acme自动续签
项目简介
项目地址:https://github.com/acmesh-official/acme.sh
本地部署
curl https://get.acme.sh | sh -s email=373704015@qq.com
or
wget -O - https://get.acme.sh | sh -s email=373704015@qq.com
普通用户和 root 用户都可以安装使用。
export Tencent_SecretId="刚刚申请的ID"
export Tencent_SecretKey="刚刚申请的Key"
acme.sh --issue --dns dns_tencent -d example.com -d *.example.com --keylength ec-256
docker run -d --name centos7-acme centos:7 /bin/bash -c "while true; do echo hello world; sleep 10; done"
# 进入容器
docker exec -it centos7-acme /bin/bash
docker部署
# 复制下载好的acme.sh到容器
docker cp /home/hongqi/acme/acme.sh centos7-acme:/root/acme
# yum -y install vixie-cron
Loaded plugins: fastestmirror, refresh-packagekit, security
Existing lock /var/run/yum.pid: another copy is running as pid 25960.
Another app is currently holding the yum lock; waiting for it to exit...
使用现成镜像
# 第一步
docker pull neilpang/acme.sh
# 创建ssl文件存放目录
cd /data && mkdir acmell
# 指定key启动镜像
docker run -it -d --name acme --restart=always --net host -v /home/hongqi/app/nginx/ssl_from_acme:/acme.sh -e DP_Id='xxx' -e DP_Key='xxx' -e Tencent_SecretId='' neilpang/acme.sh daemon
docker run -it -d --name acme --restart=always --net host -v /home/hongqi/app/nginx/ssl_from_acme:/acme.sh -e Tencent_SecretId='xxx' -e Tencent_SecretKey='xxx' neilpang/acme.sh daemon
开始启动服务
# 需要注册邮箱
docker exec acme --register-account -m 373704015@qq.com
#开始签名证书
docker exec acme --issue --dns dns_tencent -d capsion.top -d *.capsion.top --keylength ec-256
export Tencent_SecretId="刚刚申请的ID"
export Tencent_SecretKey="刚刚申请的Key"
acme.sh --issue --dns dns_tencent -d example.com -d *.example.com --keylength ec-256
docker exec acme --issue --dns dns_tencent -d wxyibu.top -d *.wxyibu.top --keylength ec-256
nginx中使用
将通过 acme.sh
生成的 SSL 证书集成到 Nginx 中的步骤如下:
1. 确认必要文件
使用 acme.sh
申请的证书文件中,主要需要以下两个:
fullchain.cer
:包含完整的证书链。capsion.top.key
:私钥文件。
2. 复制文件到 Nginx 使用的目录
将上述两个文件复制到一个安全目录,例如 /etc/nginx/ssl/capsion.top/
。建议使用以下命令:
sudo mkdir -p /etc/nginx/ssl/capsion.top/
sudo cp fullchain.cer /etc/nginx/ssl/capsion.top/
sudo cp capsion.top.key /etc/nginx/ssl/capsion.top/
3. 配置 Nginx
编辑对应的 Nginx 配置文件(例如 /etc/nginx/conf.d/capsion.top.conf
或 /etc/nginx/nginx.conf
),确保 SSL 配置正确。示例配置如下:
server {
listen 443 ssl;
server_name capsion.top;
ssl_certificate /etc/nginx/ssl/capsion.top/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/capsion.top/capsion.top.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /path/to/your/website; # 修改为实际的网站路径
index index.html index.htm;
}
}
server {
listen 80;
server_name capsion.top;
# 将 HTTP 请求重定向到 HTTPS
return 301 https://$host$request_uri;
}
4. 检查 Nginx 配置
在重新加载 Nginx 之前,检查配置是否正确:
sudo nginx -t
如果输出显示 syntax is ok
和 test is successful
,说明配置正确。
5. 重启 Nginx
应用新的配置:
复制编辑
sudo systemctl restart nginx
6. 验证 HTTPS
在浏览器中访问 https://capsion.top
,确认证书已正确应用。
注意事项
如果证书即将过期,可使用
acme.sh --renew
命令自动续期。为了避免每次续期后手动更新证书,可以使用
--reloadcmd
参数让
acme.sh
自动重启 Nginx。例如:
bash复制编辑acme.sh --install-cert -d capsion.top \
--key-file /etc/nginx/ssl/capsion.top/capsion.top.key \
--fullchain-file /etc/nginx/ssl/capsion.top/fullchain.cer \
--reloadcmd "systemctl reload nginx"
完整案例
wxyibu.top
docker pull neilpang/acme.sh
# 运行容器
docker run -it -d --name wxyibu_acme --restart=always --net host -e Tencent_SecretId='xxx' -e Tencent_SecretKey='xxx' neilpang/acme.sh daemon
# 注册
docker exec wxyibu_acme --register-account -m 373704015@qq.com
# 生成key
docker exec wxyibu_acme --issue --force --dns dns_tencent -d wxyibu.top -d *.wxyibu.top
# 直接使用docker cp复制文件
docker cp wxyibu_acme:/acme.sh/wxyibu.top_ecc/fullchain.cer /home/hongqi/app/nginx/wxyibu.top/ssl/1_wxyibu.top_bundle.crt
docker cp wxyibu_acme:/acme.sh/wxyibu.top_ecc/wxyibu.top.key /home/hongqi/app/nginx/wxyibu.top/ssl/2_wxyibu.top.key
docker restart wxyibu-nginx
# 优化方案
docker run -it -d --name wxyibu_acme --restart=always --net host -e -v /home/hongqi/app/nginx/wxyibu.top/ssl/:/ Tencent_SecretId='xxx' -e Tencent_SecretKey='xxx' neilpang/acme.sh daemon
打包成脚本
#!/bin/bash
set -e # 遇到错误立即退出
# 定义变量
CONTAINER_ACME="wxyibu_acme"
CONTAINER_NGINX="wxyibu-nginx"
DOMAIN="wxyibu.top"
CERTS_DIR="/home/hongqi/app/nginx/${DOMAIN}/ssl"
# 生成证书(使用腾讯云DNS验证)
docker exec ${CONTAINER_ACME} acme.sh --issue --force \
--dns dns_tencent \
-d "${DOMAIN}" \
-d "*.${DOMAIN}" \
--log /acme.sh/acme.log # 记录日志到容器内路径
# 从容器复制证书到宿主机
docker cp ${CONTAINER_ACME}:/acme.sh/${DOMAIN}_ecc/fullchain.cer ${CERTS_DIR}/1_${DOMAIN}_bundle.crt
docker cp ${CONTAINER_ACME}:/acme.sh/${DOMAIN}_ecc/${DOMAIN}.key ${CERTS_DIR}/2_${DOMAIN}.key
# 重启Nginx容器(可选:先检查配置)
# docker exec ${CONTAINER_NGINX} nginx -t # 验证配置语法
docker restart ${CONTAINER_NGINX}
# 记录日志(可选)
echo "[$(date)] Certificate renewed successfully." >> /home/hongqi/scripts/renew_cert.log