火山引擎配置使用acme
基于 acme.sh 与火山引擎 API 自动化签发 SSL 通配符证书
核心痛点
acme.sh 官方原生暂未内置火山引擎(VolcEngine)的 DNS 供应商插件。若要通过 DNS 验证(DNS-01挑战)申请泛域名/通配符证书,我们需要引入第三方的 DNS API 扩展脚本。
本文将基于开源项目 mitkimi/acmesh_volcengine_api,完整演示从安装、配置到自动化部署的全流程。
环境准备与 acme.sh 安装
首先安装 acme.sh。建议绑定您的常用邮箱,以便在证书即将过期且自动续期失败时收到 Let's Encrypt 的邮件提醒。
Bash
# 方案 A:指定邮箱安装(推荐)
curl https://get.acme.sh | sh -s email=your_email@example.com# 方案 B:匿名安装
curl https://get.acme.sh | sh
安装完成后,使环境变量生效并验证版本:
source ~/.bashrc
acme.sh --version
配置火山引擎 API 密钥与插件
3.1 获取 API 凭证
登录火山引擎控制台,前往 访问控制 -> API访问密钥 -> 密钥列表 -> 新建密钥,获取 AccessKey ID 和 Secret AccessKey。
3.2 注入环境变量
直接在当前 Shell 终端中执行以下命令(无需写入 .bashrc)。
安全提示:
acme.sh在首次签发成功后,会将这两个密钥自动加密持久化至~/.acme.sh/account.conf中。未来 crontab 定时任务自动续期时会自动调用该配置,因此无需在全局配置文件中常驻明文密钥。
export VOLCENGINE_ACCESS_KEY_ID="您的AccessKeyID"
export VOLCENGINE_SECRET_ACCESS_KEY="您的SecretAccessKey"
3.3 下载第三方火山引擎 DNS 插件
下载由作者 mitkimi 编写的外部 DNS 脚本,并放置到 acme.sh 的插件目录中:
Bash
# 下载原始脚本(注意:必须使用 raw 域名链接)
curl -sSfL https://raw.githubusercontent.com/mitkimi/acmesh_volcengine_api/main/dns_volcengine.sh \> ~/.acme.sh/dnsapi/dns_volcengine.sh# 赋予可执行权限
chmod +x ~/.acme.sh/dnsapi/dns_volcengine.sh
申请 SSL 证书
执行以下命令开始申请证书。此处以 liangzhantu.fun 为例,同时申请主域名与泛域名。
Bash
# 首次申请证书
acme.sh --issue --dns dns_volcengine -d yourdomain.com -d '*.yourdomain.com'# 如果需要强制重新签发或调试,可追加 --force 和 --debug 参数
acme.sh --issue --dns dns_volcengine -d yourdomain.com -d '*.yourdomain.com' --force --debug
提取证书与自动化运维(以 Nginx 容器为例)
切勿直接将 Nginx 的配置文件指向 ~/.acme.sh/ 目录下的原始文件,该目录结构内部可能会发生变动。
正确的做法是使用 --install-cert 命令将证书复制到指定的生产目录,并通过 --reloadcmd 设定自动化重载钩子。
Bash
# 创建证书存储目录(此处以 /etc/nginx/ssl/ 为例,可根据实际情况修改)
mkdir -p /etc/nginx/ssl/yourdomain.com/# 提取证书并配置容器重载
acme.sh --install-cert -d yourdomain.com --ecc \--key-file /etc/nginx/ssl/yourdomain.com/yourdomain.com.key \--fullchain-file /etc/nginx/ssl/yourdomain.com/yourdomain.com.pem \--reloadcmd "docker exec <nginx-name> nginx -s reload"
关于未来的自动化续期
acme.sh 在安装时已自动向系统的 crontab 注入了定时任务。
你可以通过以下命令查看:
crontab -l
输出中会包含一条类似以下的内容:
56 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
自动化续期的运行逻辑:
-
每晚定时任务触发。
-
acme.sh检查证书,若证书有效期少于 30 天,则触发续期。 -
acme.sh自动读取~/.acme.sh/account.conf中保存的火山引擎密钥,通过 API 自动到域名解析中添加 TXT 记录。 -
验证通过后,新证书生成。
-
自动执行
--reloadcmd绑定的命令(例如docker exec ... nginx -s reload),整个过程无感、零人工干预。
