LinuxServer.io 团队为您带来了另一个容器版本,其中包含:
找到我们:
SWAG - 安全 Web 应用程序网关(以前称为 Let's Encrypt™,与 Let's Encrypt™ 无关)设置 Nginx Web 服务器和具有 php 支持的反向代理以及内置的 certbot 客户端,可自动执行免费 SSL 服务器证书生成和更新过程(Let's Encrypt)和 ZeroSSL)。它还包含用于入侵防御的fail2ban。
我们利用 docker 清单来实现多平台感知。更多信息可从此处的 docker 和此处的公告获得。
只需拉动lscr.io/linuxserver/swag:latest
就可以为您的拱门检索正确的图像,但您也可以通过标签拉取特定的拱门图像。
该镜像支持的架构有:
建筑学 | 可用的 | 标签 |
---|---|---|
x86-64 | ✅ | amd64-<版本标签> |
ARM64 | ✅ | arm64v8-<版本标签> |
臂氢夫 |
URL
为yoursubdomain.duckdns.org
, SUBDOMAINS
可以是www,ftp,cloud
,或带 dns 验证的wildcard
。您可以使用我们的 duckdns 映像在 duckdns.org 上更新您的 IP。http
验证,路由器互联网端的端口 80 应转发到此容器的端口 80dns
验证,请确保将您的凭据输入到/config/dns-conf
下相应的 ini(或某些插件的 json)文件中yoursubdomain.duckdns.org
,将SUBDOMAINS
变量留空)*.yoursubdomain.duckdns.org
,将SUBDOMAINS
变量设置为wildcard
)--cap-add=NET_ADMIN
需要fail2ban修改iptableshttps://yourdomain.url
访问默认主页(默认情况下禁用通过端口 80 的 http 访问,您可以通过编辑/config/nginx/site-confs/default.conf
)。/config/log/letsencrypt
下的日志以了解续订失败的原因。建议在 docker 参数中输入您的电子邮件,以便您在这种情况下收到来自 Let's Encrypt 的过期通知。SWAG 包含许多开箱即用的 Certbot 插件,但并非所有插件都可以包含在内。如果您需要未包含的插件,获得该插件的最快方法是使用我们的通用包安装 Docker Mod。
在容器上设置以下环境变量:
DOCKER_MODS=linuxserver/mods:universal-package-install
INSTALL_PIP_PACKAGES=certbot-dns-<plugin>
在/config/dns-conf/<plugin>.ini
中设置所需的凭据(通常在插件文档中找到)。建议首先尝试获取STAGING=true
的证书,以确保插件按预期工作。
dhparams.pem
传送。docker exec -it swag htpasswd -c /config/nginx/.htpasswd <username>
.htpasswd
。对于第一个用户,使用上面的命令,对于其他用户,使用上面不带-c
标志的命令,因为它将强制删除现有的.htpasswd
并创建一个新的。/config/nginx/site-confs/default.conf
。您可以随意修改此文件,并且可以将其他conf文件添加到此目录中。但是,如果删除default
文件,则会在容器启动时创建新的默认文件。/config/nginx/proxy_confs
下的README.md
文件。预设confs驻留在此存储库中并从此存储库导入。add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
这将要求Google 等人不要索引和列出您的网站。请小心这一点,因为如果您在希望出现在搜索引擎上的网站上留下此行,您最终将被除名-v /path-to-swag-config:/swag-ssl
),并在其他容器中使用证书位置/swag-ssl/keys/letsencrypt/
/config
下的 SWAG 文件夹etc
(即-v /path-to-swag-config/etc:/swag-ssl
)并在其他容器中,使用证书位置/swag-ssl/letsencrypt/live/<your.domain.url>/
(这更安全,因为第一种方法与其他容器共享整个 SWAG 配置文件夹,包括 www 文件,而第二种方法仅共享 ssl证书)cert.pem
、 chain.pem
、 fullchain.pem
和privkey.pem
,由 Certbot 生成并由 nginx 和各种其他应用程序使用privkey.pfx
,一种 Microsoft 支持的格式,通常由 Emby Server 等 dotnet 应用程序使用(无密码)priv-fullchain-bundle.pem
,一个捆绑私钥和全链的 pem 证书,由 ZNC 等应用程序使用/config/fail2ban/jail.local
.conf
文件,而是创建同名的.local
文件并编辑这些文件,因为更新操作和过滤器时 .conf 文件会被覆盖。 .local
文件将附加.conf
文件中的所有内容(即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>
取消禁止 IPlinuxserver/letsencrypt
镜像迁移请按照此博客文章中的说明进行操作。
为了帮助您开始从此映像创建容器,您可以使用 docker-compose 或 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
容器是使用运行时传递的参数(例如上面的参数)进行配置的。这些参数以冒号分隔,分别表示<external>:<internal>
。例如, -p 8080:80
将从容器内部公开端口80
,以便可以从容器外部端口8080
上的主机 IP 进行访问。
范围 | 功能 |
---|---|
-p 443 | https端口 |
-p 80 | HTTP 端口(http 验证和 http -> https 重定向所需) |
-e PUID=1000 | 对于 UserID - 请参阅下面的说明 |
-e PGID=1000 | 对于 GroupID - 请参阅下面的说明 |
-e TZ=Etc/UTC | 指定要使用的时区,请参阅此列表。 |
-e URL=yourdomain.url | 您可以控制的顶级网址(如果您拥有customdomain.com ,或者如果是动态 dns,则为customsubdomain.ddnsprovider.com )。 |
-e VALIDATION=http | Certbot 使用的验证方法,选项是http 或dns ( dns 方法还需要设置DNSPLUGIN 变量)。 |
-e SUBDOMAINS=www, | 您希望证书覆盖的子域(逗号分隔,无空格),即。 www,ftp,cloud 。对于通配符证书,请将其精确设置为wildcard (通配符证书仅可通过dns 验证获得) |
-e CERTPROVIDER= | (可选)定义证书提供者。对于 ZeroSSL 证书,设置为zerossl (需要现有 ZeroSSL 帐户以及在EMAIL 环境变量中输入的电子邮件地址)。否则默认为 Let's Encrypt。 |
-e DNSPLUGIN=cloudflare | 如果VALIDATION 设置为dns 则为必需。选项有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 和vultr 。还需要将凭据输入到/config/dns-conf 下相应的 ini(或某些插件的 json)文件中。 |
-e PROPAGATION= | 可以选择覆盖(以秒为单位)dns 插件的默认传播时间。 |
-e EMAIL= | 用于证书过期通知的可选电子邮件地址(ZeroSSL 必需)。 |
-e ONLY_SUBDOMAINS=false | 如果您希望仅获取某些子域的证书,而不是主域的证书(主域可能托管在另一台计算机上并且无法验证),请将其设置为true |
-e EXTRA_DOMAINS= | 其他完全限定域名(逗号分隔,无空格),即。 extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org |
-e STAGING=false | 设置为true 以在暂存模式下检索证书。速率限制会高得多,但生成的证书将无法通过浏览器的安全测试。仅用于测试目的。 |
-v /config | 持久化配置文件 |
该映像使用cap_add
或sysctl
才能正常工作。这在 Portainer 的某些版本中未正确实现,因此如果通过 Portainer 部署,此映像可能无法工作。
您可以使用特殊的前缀FILE__
从文件中设置任何环境变量。
举个例子:
-e FILE__MYVAR=/run/secrets/mysecretvariable
将根据/run/secrets/mysecretvariable
文件的内容设置环境变量MYVAR
。
对于我们的所有镜像,我们提供了使用可选的-e UMASK=022
设置覆盖容器内启动的服务的默认 umask 设置的功能。请记住,umask 不是 chmod,它根据它不添加的值从权限中减去。在寻求支持之前,请先阅读此处。
使用卷( -v
标志)时,主机操作系统和容器之间可能会出现权限问题,我们通过允许您指定用户PUID
和组PGID
来避免此问题。
确保主机上的所有卷目录都属于您指定的同一用户,并且任何权限问题都会像魔术一样消失。
在本例中PUID=1000
和PGID=1000
,要找到您的,请使用id your_user
,如下所示:
id your_user
输出示例:
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
我们发布了各种 Docker Mod 以在容器内启用附加功能。可通过上面的动态徽章访问该图像可用的 Mod 列表(如果有)以及可应用于我们任何一个图像的通用 Mod。
容器运行时的 shell 访问:
docker exec -it swag /bin/bash
实时监控容器的日志:
docker logs -f swag
容器版本号:
docker inspect -f ' {{ index .Config.Labels "build_version" }} ' swag
图片版本号:
docker inspect -f ' {{ index .Config.Labels "build_version" }} ' lscr.io/linuxserver/swag:latest
我们的大多数图像都是静态的、版本化的,并且需要图像更新和容器重新创建来更新内部的应用程序。除了一些例外情况(相关 readme.md 中注明),我们不建议也不支持更新容器内的应用程序。请参阅上面的“应用程序设置”部分,了解是否建议将其用于图像。
以下是更新容器的说明:
更新图片:
所有图像:
docker-compose pull
单张图像:
docker-compose pull swag
更新容器:
所有容器:
docker-compose up -d
单个容器:
docker-compose up -d swag
您还可以删除旧的悬空图像:
docker image prune
更新图像:
docker pull lscr.io/linuxserver/swag:latest
停止正在运行的容器:
docker stop swag
删除容器:
docker rm swag
按照上面的说明,使用相同的 docker 运行参数重新创建一个新容器(如果正确映射到主机文件夹,您的/config
文件夹和设置将被保留)
您还可以删除旧的悬空图像:
docker image prune
提示
我们推荐 Diun 来获取更新通知。不推荐也不支持其他在无人值守的情况下自动更新容器的工具。
如果您想出于开发目的或只是为了自定义逻辑而对这些图像进行本地修改:
git clone https://github.com/linuxserver/docker-swag.git
cd docker-swag
docker build
--no-cache
--pull
-t lscr.io/linuxserver/swag:latest .
ARM 变体可以使用lscr.io/linuxserver/qemu-static
在 x86_64 硬件上构建,反之亦然
docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
注册后,您可以定义要与-f Dockerfile.aarch64
一起使用的 dockerfile。
priv-fullchain-bundle.pem
上的权限。certbot-dns-dynudns
恢复对 DynuDNS 的支持。stream.conf
,以允许用户在nginx.conf
中包含自己的块。google-domains
。STAGING=true
时的失败以及撤销时的失败。ssl.conf
中选择退出 Google FLoC。SUBDOMAINS
var 标记为可选。resolver.conf
和CVE-2021-32637
补丁。dhparams.pem
使用 ffdhe4096。添加了worker_processes.conf
,它设置nginx工作线程的数量,以及resolver.conf
,它设置dns解析器。这两个conf文件仅在首次启动时自动生成,并且可以供用户稍后修改。CERTPROVIDER
环境变量从 ZeroSSL 获取证书的支持。使用新的插件名称更新 aliyun、domeneshop、inwx 和 transip dns 插件。隐藏donoteditthisfile.conf
,因为用户正在编辑它,尽管它的名称如此。当没有启用代理配置时抑制无害的错误。