一、获取CloudFlare的API令牌
登录CloudFlare之后,可以通过这个链接访问令牌页面:https://dash.cloudflare.com/profile/api-tokens,点击创建令牌,使用编辑区域DNS模板,在区域资源中选择包括-特定区域-你的域名。
二、Docker配置
在注册表搜索安装neilpang/acme.sh这个映像,随后安装。
创建一个文件夹用于存放文件,例如我创建在docker/acme,将此文件夹映射到/acme.sh。
网络选项卡选择使用与Docker Host相同的网络。
环境变量添加如下内容:
变量名 | 变量值 |
CF_Token | 第一步获取的API令牌 |
CF_Account_ID | 域名区域ID |
SYNO_Port | 群晖的内网端口号,默认为5000 |
SYNO_Username | 登录群晖的用户名 |
SYNO_Password | 登录密码 |
SYNO_Certificate | 要添加的证书的名字,空字符串("")为将主域名去替换上一个使用的证书 |
脚本配置。
三、脚本配置
Docker设置好后并不会申请证书,要配合脚本使用来触发,并且可以通过将脚本放入任务计划来自动更新证书。
本地新建一个.sh脚本文件,填写如下内容:
#!/bin/bash
# 域名
DOMAIN='yjy520.top'
# # DNS类型,dns_ali dns_dp dns_gd dns_aws dns_linode根据域名服务商而定,CloudFlare就是dns_cf
DNS='dns_cf'
# DNS API 生效等待时间 值(单位:秒),一般120即可
# 某些域名服务商的API生效时间较大,需要将这个值加大(比如900)
DNS_SLEEP=120
# 证书服务商,zerossl 和 letsencrypt,我使用letsencrypt,使用zerossl还需要注册
CERT_SERVER='letsencrypt'
generateCrtCommand="acme.sh --force --log --issue --server ${CERT_SERVER} --dns ${DNS} --dnssleep ${DNS_SLEEP} -d "${DOMAIN}" -d "*.${DOMAIN}""
installCrtCommand="acme.sh --deploy -d "${DOMAIN}" -d "*.${DOMAIN}" --deploy-hook synology_dsm"
docker exec neilpang-acme.sh2 $generateCrtCommand
docker exec neilpang-acme.sh2 $installCrtCommand
此处注意最后两行,我的Docker创建的容器实例名字就叫做 neilpang-acme.sh2 ,在编写脚本时注意改为实际docker实例名字。
四、自动运行
acme申请的证书只有90天,需要自动续签才行。
为了实现自动更新证书,我们把脚本上传至群晖内某个特定文件夹,并右键查看文件属性,得到文件的实际存储位置,例如我放在了/var/services/homes/zhouandyang/run_acme.sh。
打开控制面板-任务计划,新增一个计划的任务-用户定义的脚本。
在计划选项卡下设置为在以下日期运行-每月重复,这样就可以每月自动更新一次证书。
在任务设置选项卡下的运行命令中,输入如下脚本:
bash /var/services/homes/zhouandyang/run_acme.sh >>/var/services/homes/zhouandyang/logs/run_acme.txt 2>&1
其中前面为脚本所在路径,后面为希望存放日志文件的路径。
保存即可。
五、手动运行
看到如下日志就已经配置好了
[Tue May 23 16:50:59 UTC 2023] Your cert is in: /acme.sh/yjy520.top/yjy520.top.cer
[Tue May 23 16:50:59 UTC 2023] Your cert key is in: /acme.sh/yjy520.top/yjy520.top.key
[Tue May 23 16:50:59 UTC 2023] The intermediate CA cert is in: /acme.sh/yjy520.top/ca.cer
[Tue May 23 16:50:59 UTC 2023] And the full chain certs is there: /acme.sh/yjy520.top/fullchain.cer
[Tue May 23 16:50:59 UTC 2023] Logging into localhost:5000
[Tue May 23 16:50:59 UTC 2023] Getting certificates in Synology DSM
[Tue May 23 16:50:59 UTC 2023] Generate form POST request
[Tue May 23 16:50:59 UTC 2023] Upload certificate to the Synology DSM
[Tue May 23 16:51:02 UTC 2023] http services were NOT restarted
[Tue May 23 16:51:02 UTC 2023] Success
[Tue May 23 16:50:59 UTC 2023] Your cert is in: /acme.sh/yjy520.top/yjy520.top.cer
[Tue May 23 16:50:59 UTC 2023] Your cert key is in: /acme.sh/yjy520.top/yjy520.top.key
[Tue May 23 16:50:59 UTC 2023] The intermediate CA cert is in: /acme.sh/yjy520.top/ca.cer
[Tue May 23 16:50:59 UTC 2023] And the full chain certs is there: /acme.sh/yjy520.top/fullchain.cer
[Tue May 23 16:50:59 UTC 2023] Logging into localhost:5000
[Tue May 23 16:50:59 UTC 2023] Getting certificates in Synology DSM
[Tue May 23 16:50:59 UTC 2023] Generate form POST request
[Tue May 23 16:50:59 UTC 2023] Upload certificate to the Synology DSM
[Tue May 23 16:51:02 UTC 2023] http services were NOT restarted
[Tue May 23 16:51:02 UTC 2023] Success
打开控制面板,就可以在证书中看见刚刚部署好的证书了。
Comments | NOTHING