由于官方的教程太复杂,所以写了这个稍微简单点的。
作为一个 Docker 爱好者,就算是一个 sh 也要用 Docker 部署!刚好作者提供了镜像,正合我意了。
当然想要直接在宿主机部署也可以啦~只需要把我给的命令中,前面的 docker exec 删掉就好。
Docker Compose
1 | services: |
其中 /path/to/your/SSL:/deploy 挂载卷,只要把你宿主机放证书的文件夹,和容器内一个自定的文件夹挂一起就好。
然后 docker compose up -d 启动!
注册
ZeroSSL
默认使用 ZeroSSL 签证书,不在他们网站上注册账户也是可以的,不过我推荐注册一个,可以方便的看到自己的所有证书。
注册好后,从 ZeroSSL 开发者控制台,获取 EAB 密钥,是一个 KID 和 KEY 的组合。
然后用下面这行命令,在 acme.sh 注册。
1 | copy docker exec acme.sh --register-account --server zerossl --eab-kid xxxx --eab-hmac-key xxxx |
可以把 ZeroSSL 固定为默认签发机构,以后就不用指定 server 了。
1 | copy docker exec acme.sh --set-default-ca --server zerossl |
Cloudflare DNS API
通过 DNS API 可以让 acme.sh 帮你创建验证域名所有权用的 TXT 记录。
我用 Cloudflare 演示,如果你的域名是其他家的,可以在官方的文档里看看如何获取令牌。
前往用户 API 令牌创建一个 Token,使用默认的编辑区域 DNS 即可。
拿到的Token是一会要用的 CF_Token 。
然后前往任意一个域名的概述页,找到账户 ID,这个是 CF_Account_ID。
签发和吊销
首次签发
Token 和 ID 只第一次运行需要,之后会存到配置文件里。
建议你看一下“之后签发”这部分,自行拼接一个完整的命令。
1 | copy docker exec -e CF_Token='xxxx' CF_Account_ID="xxxx" acme.sh --issue -d "*.domain.com" --dns dns_cf |
之后签发
这是整合好的一个完整命令,会签发你的根域名和泛域名证书,之后每隔 60 天续签一次,并且存放到你指定的文件夹。
1 | docker exec acme.sh --issue -d '*.domain.com' -d domain.com --dns dns_cf --key-file /deploy/key.pem --fullchain-file /deploy/cert.pem |
可以用多个 -d ,在一份证书里包含多个域,签发的证书可以在 ZeroSSL 证书控制台看到。
指定的 deploy 文件夹,是刚刚挂载的那个。
如果你想修改证书存放的位置,需要修改 Docker Compose 的挂载目录,而不是这里。
续签
一般情况下,不需要手动续签。acme.sh 会每隔 60 天自动续签一次。
下面是强制续签的命令,注意,这个续签是给你签一张新的,而非续期原来的证书。
1 | docker exec acme.sh --renew -d '*.domain.com' --force |
吊销
签发的证书虽然可以在 ZeroSSL 控制台看到,但是不能吊销。吊销依然需要 acme.sh。
不过注意,这个吊销的话,会将这个域名所有生效的证书吊销。
例如你连续签发了好几张相同域名的证书,那全都会被吊销。
1 | docker exec acme.sh --revoke -d '*.domain.com' |
其他
邮件通知
我喜欢用 SMTP 给我发邮件,如果你用想用其他通知服务,可以去官方的文档中看看。
通知配置是可选的,不要也行。
1 | docker exec -e SMTP_FROM="MAIL" -e SMTP_TO="MAIL" -e SMTP_HOST="smtp.xxxx.com" -e SMTP_SECURE="ssl" -e SMTP_PORT="465" -e SMTP_USERNAME="MAIL" -e SMTP_PASSWORD="PWD" -e SMTP_TIMEOUT="30" acme.sh --set-notify --notify-hook smtp |
还有些自定义字段:--notify-source:邮件中你的服务器名字,只起到一个展示作用。--notify-level:0 为不通知,1 为错误时通知,2 为续期和错误时通知,3 为每日 corn 通知。--notify-mode:0 为所有证书统一到一个邮件里,1 为每个证书一封邮件。
1 | docker exec acme.sh --set-notify --notify-level 3 --notify-mode 0 --notify-source "Vanadiry SSL" |
服务总览
可以查看你都部署了哪些域名,以及他们什么时候会续期。
1 | docker exec acme.sh --list |