使用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)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐