A equipe LinuxServer.io traz para você outro lançamento de contêiner apresentando:
Encontre-nos em:
SWAG - Secure Web Application Gateway (anteriormente conhecido como letsencrypt, sem relação com Let's Encrypt™) configura um servidor web Nginx e proxy reverso com suporte a php e um cliente certbot integrado que automatiza processos gratuitos de geração e renovação de certificados de servidor SSL (Let's Encrypt e ZeroSSL). Ele também contém fail2ban para prevenção de invasões.
Utilizamos o manifesto docker para reconhecimento multiplataforma. Mais informações estão disponíveis no docker aqui e em nosso anúncio aqui.
Simplesmente extrair lscr.io/linuxserver/swag:latest
deve recuperar a imagem correta para o seu arco, mas você também pode extrair imagens específicas do arco por meio de tags.
As arquiteturas suportadas por esta imagem são:
Arquitetura | Disponível | Marcação |
---|---|---|
x86-64 | ✅ | amd64-<tag de versão> |
braço64 | ✅ | arm64v8-<tag de versão> |
braço |
URL
será yoursubdomain.duckdns.org
e os SUBDOMAINS
podem ser www,ftp,cloud
com validação http ou wildcard
com validação de DNS. Você pode usar nossa imagem duckdns para atualizar seu IP em duckdns.org.http
, a porta 80 no lado da Internet do roteador deve ser encaminhada para a porta 80 deste contêinerdns
, certifique-se de inserir suas credenciais no arquivo ini correspondente (ou json para alguns plugins) em /config/dns-conf
yoursubdomain.duckdns.org
, deixe a variável SUBDOMAINS
vazia)*.yoursubdomain.duckdns.org
, defina a variável SUBDOMAINS
como wildcard
)--cap-add=NET_ADMIN
é necessário para fail2ban modificar iptableshttps://yourdomain.url
para acessar a página inicial padrão (o acesso http através da porta 80 está desabilitado por padrão, você pode habilitá-lo editando a configuração padrão do site em /config/nginx/site-confs/default.conf
)./config/log/letsencrypt
para ver por que as renovações estão falhando. É recomendável inserir seu e-mail nos parâmetros do docker para receber avisos de expiração do Let's Encrypt nessas circunstâncias.O SWAG inclui muitos plug-ins Certbot prontos para uso, mas nem todos os plug-ins podem ser incluídos. Se você precisar de um plug-in que não está incluído, a maneira mais rápida de disponibilizá-lo é usar nosso Mod Docker de instalação de pacote universal.
Defina as seguintes variáveis de ambiente no seu contêiner:
DOCKER_MODS=linuxserver/mods:universal-package-install
INSTALL_PIP_PACKAGES=certbot-dns-<plugin>
Defina as credenciais necessárias (geralmente encontradas na documentação do plugin) em /config/dns-conf/<plugin>.ini
. Recomenda-se tentar obter um certificado com STAGING=true
primeiro para ter certeza de que o plugin está funcionando conforme o esperado.
dhparams.pem
.docker exec -it swag htpasswd -c /config/nginx/.htpasswd <username>
.htpasswd
. Para o primeiro usuário, use o comando acima, para outros, use o comando acima sem o sinalizador -c
, pois forçará a exclusão do .htpasswd
existente e a criação de um novo/config/nginx/site-confs/default.conf
. Sinta-se à vontade para modificar este arquivo e você pode adicionar outros arquivos conf a este diretório. No entanto, se você excluir o arquivo default
, um novo padrão será criado na inicialização do contêiner.README.md
em /config/nginx/proxy_confs
para obter instruções sobre como ativá-los. As configurações predefinidas residem e são importadas deste repositório.add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
Isso solicitará ao Google e outros que não indexem e listem seu site. Tenha cuidado com isso, pois você acabará sendo retirado da lista se deixar esta linha em um site que deseja que esteja presente nos motores de busca.-v /path-to-swag-config:/swag-ssl
) e nos outros contêineres, use o local do certificado /swag-ssl/keys/letsencrypt/
etc
que reside em /config
em outros contêineres (ou seja, -v /path-to-swag-config/etc:/swag-ssl
) e nos outros contêineres, use o local do certificado /swag-ssl/letsencrypt/live/<your.domain.url>/
(Isso é mais seguro porque o primeiro método compartilha toda a pasta de configuração SWAG com outros contêineres, incluindo os arquivos www, enquanto o segundo método compartilha apenas o certificados SSL)cert.pem
, chain.pem
, fullchain.pem
e privkey.pem
, que são gerados pelo Certbot e usados pelo nginx e vários outros aplicativosprivkey.pfx
, um formato suportado pela Microsoft e comumente usado por aplicativos dotnet como o Emby Server (sem senha)priv-fullchain-bundle.pem
, um certificado pem que agrupa a chave privada e o fullchain, usado por aplicativos como ZNC/config/fail2ban/jail.local
.conf
, crie arquivos .local
com o mesmo nome e edite-os porque os arquivos .conf são substituídos quando as ações e os filtros são atualizados. Os arquivos .local
anexarão tudo o que estiver nos arquivos .conf
(ou seja, nginx-http-auth.conf
--> nginx-http-auth.local
)docker exec -it swag fail2ban-client status
docker exec -it swag fail2ban-client status <jail name>
docker exec -it swag fail2ban-client set <jail name> unbanip <IP>
linuxserver/letsencrypt
Siga as instruções nesta postagem do blog.
Para ajudá-lo a começar a criar um contêiner a partir desta imagem, você pode usar o docker-compose ou o docker cli.
---
services :
swag :
image : lscr.io/linuxserver/swag:latest
container_name : swag
cap_add :
- NET_ADMIN
environment :
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- URL=yourdomain.url
- VALIDATION=http
- SUBDOMAINS=www, # optional
- CERTPROVIDER= # optional
- DNSPLUGIN=cloudflare # optional
- PROPAGATION= # optional
- EMAIL= # optional
- ONLY_SUBDOMAINS=false # optional
- EXTRA_DOMAINS= # optional
- STAGING=false # optional
volumes :
- /path/to/swag/config:/config
ports :
- 443:443
- 80:80 # optional
restart : unless-stopped
docker run -d
--name=swag
--cap-add=NET_ADMIN
-e PUID=1000
-e PGID=1000
-e TZ=Etc/UTC
-e URL=yourdomain.url
-e VALIDATION=http
-e SUBDOMAINS=www, ` # optional `
-e CERTPROVIDER= ` # optional `
-e DNSPLUGIN=cloudflare ` # optional `
-e PROPAGATION= ` # optional `
-e EMAIL= ` # optional `
-e ONLY_SUBDOMAINS=false ` # optional `
-e EXTRA_DOMAINS= ` # optional `
-e STAGING=false ` # optional `
-p 443:443
-p 80:80 ` # optional `
-v /path/to/swag/config:/config
--restart unless-stopped
lscr.io/linuxserver/swag:latest
Os contêineres são configurados usando parâmetros passados em tempo de execução (como os acima). Esses parâmetros são separados por dois pontos e indicam <external>:<internal>
respectivamente. Por exemplo, -p 8080:80
exporia a porta 80
de dentro do contêiner para ser acessível a partir do IP do host na porta 8080
fora do contêiner.
Parâmetro | Função |
---|---|
-p 443 | Porta HTTPS |
-p 80 | Porta HTTP (necessária para validação http e redirecionamento http -> https) |
-e PUID=1000 | para UserID - veja abaixo a explicação |
-e PGID=1000 | para GroupID - veja abaixo a explicação |
-e TZ=Etc/UTC | especifique um fuso horário para usar, consulte esta lista. |
-e URL=yourdomain.url | URL principal sobre o qual você tem controle ( customdomain.com se for o proprietário ou customsubdomain.ddnsprovider.com se for DNS dinâmico). |
-e VALIDATION=http | Método de validação Certbot a ser usado, as opções são http ou dns (o método dns também requer o conjunto de variáveis DNSPLUGIN ). |
-e SUBDOMAINS=www, | Subdomínios que você gostaria que o certificado cobrisse (separados por vírgulas, sem espaços), ou seja. www,ftp,cloud . Para um certificado curinga, defina exatamente como wildcard (o certificado curinga está disponível apenas por meio de validação dns ) |
-e CERTPROVIDER= | Opcionalmente, defina o provedor de certificado. Defina como zerossl para certificados ZeroSSL (requer uma conta ZeroSSL existente e o endereço de e-mail inserido em EMAIL env var). Caso contrário, o padrão é Let's Encrypt. |
-e DNSPLUGIN=cloudflare | Obrigatório se VALIDATION estiver definido como dns . As opções são acmedns , aliyun , azure , bunny , cloudflare , cpanel , desec , digitalocean , directadmin , dnsimple , dnsmadeeasy , dnspod , do , domeneshop , dreamhost , duckdns , dynu , freedns , gandi , gehirn , glesys , godaddy , google , he , hetzner , infomaniak , inwx , ionos , linode , loopia , luadns , namecheap , netcup , njalla , nsone , ovh , porkbun , rfc2136 , route53 , sakuracloud , standalone , transip e vultr . Também é necessário inserir as credenciais no arquivo ini (ou json para alguns plug-ins) correspondente em /config/dns-conf . |
-e PROPAGATION= | Opcionalmente, substitua (em segundos) o tempo de propagação padrão para os plugins DNS. |
-e EMAIL= | Endereço de e-mail opcional usado para notificações de expiração de certificado (obrigatório para ZeroSSL). |
-e ONLY_SUBDOMAINS=false | Se você deseja obter certificados apenas para determinados subdomínios, mas não para o domínio principal (o domínio principal pode estar hospedado em outra máquina e não pode ser validado), defina como true |
-e EXTRA_DOMAINS= | Nomes de domínio totalmente qualificados adicionais (separados por vírgulas, sem espaços), ou seja. extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org |
-e STAGING=false | Defina como true para recuperar certificados no modo de teste. Os limites de taxa serão muito mais altos, mas o certificado resultante não passará no teste de segurança do navegador. Para ser usado apenas para fins de teste. |
-v /config | Arquivos de configuração persistentes |
Esta imagem utiliza cap_add
ou sysctl
para funcionar corretamente. Isto não está implementado corretamente em algumas versões do Portainer, portanto esta imagem pode não funcionar se implementada através do Portainer.
Você pode definir qualquer variável de ambiente de um arquivo usando um prefixo especial FILE__
.
Por exemplo:
-e FILE__MYVAR=/run/secrets/mysecretvariable
Definirá a variável de ambiente MYVAR
com base no conteúdo do arquivo /run/secrets/mysecretvariable
.
Para todas as nossas imagens, oferecemos a capacidade de substituir as configurações padrão de umask para serviços iniciados nos contêineres usando a configuração opcional -e UMASK=022
. Tenha em mente que umask não é chmod, ele subtrai das permissões com base no valor que não adiciona. Por favor, leia aqui antes de pedir suporte.
Ao usar volumes (sinalizadores -v
), podem surgir problemas de permissão entre o sistema operacional host e o contêiner. Evitamos esse problema permitindo que você especifique o PUID
do usuário e PGID
do grupo.
Certifique-se de que todos os diretórios de volume no host pertençam ao mesmo usuário que você especificou e quaisquer problemas de permissão desaparecerão como mágica.
Neste caso PUID=1000
e PGID=1000
, para encontrar o seu use id your_user
conforme abaixo:
id your_user
Exemplo de saída:
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
Publicamos vários Docker Mods para permitir funcionalidades adicionais dentro dos contêineres. A lista de Mods disponíveis para esta imagem (se houver), bem como mods universais que podem ser aplicados a qualquer uma de nossas imagens podem ser acessados através dos emblemas dinâmicos acima.
Acesso ao shell enquanto o contêiner está em execução:
docker exec -it swag /bin/bash
Para monitorar os logs do contêiner em tempo real:
docker logs -f swag
Número da versão do contêiner:
docker inspect -f ' {{ index .Config.Labels "build_version" }} ' swag
Número da versão da imagem:
docker inspect -f ' {{ index .Config.Labels "build_version" }} ' lscr.io/linuxserver/swag:latest
A maioria de nossas imagens são estáticas, versionadas e requerem atualização de imagem e recriação de contêiner para atualizar o aplicativo interno. Com algumas exceções (indicadas no readme.md relevante), não recomendamos nem oferecemos suporte à atualização de aplicativos dentro do contêiner. Consulte a seção Configuração do aplicativo acima para ver se é recomendado para a imagem.
Abaixo estão as instruções para atualizar contêineres:
Atualizar imagens:
Todas as imagens:
docker-compose pull
Imagem única:
docker-compose pull swag
Atualizar contêineres:
Todos os contêineres:
docker-compose up -d
Recipiente único:
docker-compose up -d swag
Você também pode remover as imagens antigas pendentes:
docker image prune
Atualize a imagem:
docker pull lscr.io/linuxserver/swag:latest
Pare o contêiner em execução:
docker stop swag
Exclua o contêiner:
docker rm swag
Recrie um novo contêiner com os mesmos parâmetros de execução do docker conforme instruído acima (se mapeado corretamente para uma pasta host, sua pasta /config
e configurações serão preservadas)
Você também pode remover as imagens antigas pendentes:
docker image prune
Dica
Recomendamos Diun para notificações de atualização. Outras ferramentas que atualizam contêineres automaticamente de forma autônoma não são recomendadas nem suportadas.
Se você quiser fazer modificações locais nessas imagens para fins de desenvolvimento ou apenas para personalizar a lógica:
git clone https://github.com/linuxserver/docker-swag.git
cd docker-swag
docker build
--no-cache
--pull
-t lscr.io/linuxserver/swag:latest .
As variantes ARM podem ser construídas em hardware x86_64 e vice-versa usando lscr.io/linuxserver/qemu-static
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
Uma vez registrado, você pode definir o dockerfile para usar com -f Dockerfile.aarch64
.
priv-fullchain-bundle.pem
gerado.certbot-dns-dynudns
.stream.conf
de dentro do contêiner para permitir que os usuários incluam seu próprio bloco em nginx.conf
.google-domains
.STAGING=true
e falhas na revogação.ssl.conf
.SUBDOMAINS
var como opcional.resolver.conf
e patch para CVE-2021-32637
.dhparams.pem
de acordo com RFC7919. Adicionado worker_processes.conf
, que define o número de trabalhadores nginx, e resolver.conf
, que define o resolvedor de DNS. Ambos os arquivos conf são gerados automaticamente apenas na primeira inicialização e podem ser modificados pelo usuário posteriormente.CERTPROVIDER
env var opcional. Atualize os plug-ins aliyun, domeneshop, inwx e transip dns com os novos nomes de plug-ins. Oculte donoteditthisfile.conf
porque os usuários o estavam editando apesar do nome. Suprima erros inofensivos quando nenhuma configuração de proxy estiver habilitada.