一、前言

个人使用证书一般都是腾讯云或者阿里云得免费证书,但是免费证书不支持泛域名,并且一年后要重新申请再部署,如果域名较多的话,还是比较繁琐。因此,使用docker部署 acme.sh 的方式免费申请泛域名证书以及配置自动续签,保证https不会到期中断。本文的dns泛域名基于API方式,使用的是腾讯云,需要先申请腾讯云的DNS Token

二、腾讯云DNS Token申请

2.1 打开DNSPod 控制台

腾讯云DNSPod Token:API 密钥 - DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS

注:一定要DNSPod Token

2.2 记住Token啊,这token忘了就只能重新创建了,以后看不到的。

三、docker搭建acme.sh

3.1 创建一个目录用于存放 acme.sh 的配置和证书文件夹

mkdir -p /data/acme

3.2 拉取 acme.sh 镜像

docker pull neilpang/acme.sh

3.3 启动 acme.sh 容器

docker run -d --name acme \
  --restart=always \
  --net host \
  -v /data/acme:/acme.sh \ #需要改成自己的ssl文件位置
  -e DP_Id="your-dp-id" \
  -e DP_Key="your-dp-key" \
  neilpang/acme.sh daemon

- *DP_IdDP_Key**:如果你使用的是腾讯云 DNS 服务,需要替换为你的腾讯云 DNS Token。

- 如果使用其他 DNS 服务(如 Cloudflare),需要替换为对应的环境变量(如 CF_EmailCF_Key)。

四、拉取证书

在容器内部,使用以下命令申请证书(以腾讯云 DNS 为例):
#最新的需要先注册邮箱(邮箱随便写)
docker exec acme --register-account -m [email protected]

docker exec acme --register-account -m [email protected]

#生成泛域名证书
#单域名
docker exec acme --issue --dns dns_dp -d web.xx.com
单域名和泛域名
docker exec acme --issue --dns dns_dp -d xx.com -d *.xx.com

- `--dns dns_dp`:指定使用腾讯云 DNS API。
- 如果使用 Cloudflare,替换为 `--dns dns_cf`。
- `-d example.com -d *.example.com`:指定申请的域名,支持泛域名。

设置自动续签
为了实现证书的自动续签,需要在宿主机上设置定时任务:
crontab -e
添加以下内容以每天检查并续签证书:
0 0 1 */2 * docker exec acme --cron
- 这将每两个月运行1次,检查并续签即将到期的证书。

验证
- 访问你的域名,确保 HTTPS 已正常工作。
- 检查证书是否已正确安装到指定目录。