docker acme.sh https 证书/多域名通配符自动续期(群晖https证书)
使用docker的原因是为了方便可靠,不会因为不同的操作系统缺包无法安装 acme.sh,也不会在操作系统中留下灿烂内容,acme 版的docker 包含了运行环境。
使用docker的原因是为了方便可靠,不会因为不同的操作系统缺包无法安装 acme.sh,也不会在操作系统中留下灿烂内容,acme 版的docker 包含了运行环境。
主要步骤如下:
1、运行带有 acme.sh 运行环境的 docker 容器
以华为云域名服务商为例,阿里云等更多域名服务商详见链接:https://github.com/acmesh-official/acme.sh/wiki/deployhooks
docker run -itd \
-e AUTO_UPGRADE:
-e SYNO_USERNAME:admin
-e SYNO_PASSWORD:123456
-e SYNO_CERTIFICATE:
-e HUAWEICLOUD_Username:test
-e HUAWEICLOUD_PassWord:test123
-e HUAWEICLOUD_DomainName:test
-e LE_CONFIG_HOME:/acme.sh
-v "/opt/acme.sh":/acme.sh \
--net=host \
--restart=always \
--name=acme \
neilpang/acme.sh
1、其中四个 SYNO 开头的环境变量是我给群晖使用的,分别配置群晖的账号密码(管理员的),如果不是群晖使用,这几个变量不需要。
2、其中/opt/acme.sh
为本地挂载目录,在初次生成证书后,里面会生成证书配置信息和证书文件。
2、运行脚本生成证书
第一次需要运行并生成证书配置文件,这一步是必须要执行的,以后才是自动升级。
docker exec acme acme.sh --issue --dns dns_huaweicloud -d demo.com -d *.demo.com -m 123456@qq.com
这个脚本可以重复执行,如果没有到下次自动续期的时间,它会输出日志提示你。如果需要强制重新生成和签发证书,添加
--force
参数即可。
其中--dns
参数就是指定域名服务商的,不同的域名服务商需要使用不同的环境变量参数,详见上文给的文档链接。
3、配置自动续期定时任务
将上面的脚本原封不动的配置到系统的定时任务中,可以设置为每周执行一次。
附上 acme.sh 容器的官方连接:https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker
至此结束,以上内容适合所有可以运行 docker 容器的 Linux 平台。
4、群晖补充篇
官方的 acme.sh 对群晖证书替换做了支持,通过追加参数 --deploy-hook synology_dsm
来实现。
这个 hook 的原理就是调用了群晖的 API 来发布证书,因为需要调用 API 需要群晖账号密码的支持,所以要先修改容器添加环境变量参数。
参数 | 说明 |
---|---|
SYNO_DID | 填入获取的 DID (没有设置两步验证的忽略),点击查看获取方法 |
SYNO_PORT | 填入群晖内网的端口号(默认端口5000可以不提供) |
SYNO_USERNAME | 登录群晖的用户名 |
SYNO_PASSWORD | 登录群晖的密码 |
SYNO_CERTIFICATE | 要添加的证书的名字,空字符串(“”)为替换默认证书 |
SYNO_CREATE | 当 SYNO_Certificate 不为(“”)时,需要设置自动创建的证书名 (仅替换证书的可以不设置,第一次设置证书可能会用到) |
运行容器部署命令的示例:
docker exec acme acme.sh --issue --dns dns_huaweicloud -d demo.com -d *.demo.com --deploy --deploy-hook synology_dsm
然后再群晖的定时执行计划中添加任务,必须使用 root 用户否则会有权限错误,如下:
--deploy
表示需要部署证书到server,--deploy-hook
指定部署到的目标,exec 后面的 acme 是容器的名称。
在群晖里,第一次生成证书(不是这个部署操作),我也是创建的一个临时任务手工执行的,如下图所示:
(END)
更多推荐
所有评论(0)