👉 这个脚本没有做完善的异常处理机制,也没有做日志,生产环境使用可以自行优化完善,另外建议结合acme.sh自动申请证书
将脚本下载到本地,例如目录结构如下:
project/
│── config.default.py
│── init.py
│── qiniu-cert-sync.py
│── requirements.txt
│── .env.example请确保你使用的是 Python 3.8+。 安装依赖:
pip install -r requirements.txtrequirements.txt 内容示例:
requests==2.32.5
cryptography==45.0.6
python-dotenv==1.1.1首先复制示例文件:
cp .env.example .env编辑 .env 文件,修改为你自己的七牛云密钥:
QINIU_ACCESS_KEY=你的七牛云AccessKey
QINIU_SECRET_KEY=你的七牛云SecretKey
⚠️ .env文件不要提交到 Git 仓库,避免泄露密钥。
编辑 config.py,设置本地证书路径和需要管理的域名:
如果不存在请自行复制 config.default.py 为 config.py,或首次运行脚本自动复制
# 本地证书存放路径
CERT_PATH = "/certs"
# 域名与证书文件映射
DOMAIN_LIST = {
"static.example.com": {
"cert": "example.com.cer",
"key": "example.com.key",
}
}确保 /certs/example.com.cer 和 /certs/example.com.key 文件存在。
执行:
python qiniu-cert-sync.py输出示例:
当前脚本版本: 1.0.0
配置文件版本: 1.0.0
域名列表 ['static.example.com']
[static.example.com] 正在查询域名配置
[static.example.com] 当前绑定证书, certId=abcdef1234567890
[static.example.com] 线上证书过期时间 2025-10-01 12:00:00 证书未过期
[static.example.com] 本地证书过期时间 2026-07-01 12:00:00 证书未过期
[static.example.com] 上传新证书成功, certId=xyz987654321
[static.example.com] 更新域名证书成功, certId=xyz987654321
[static.example.com] 删除过期证书成功, certId=abcdef1234567890如果你希望定期检查并自动更新证书,可以添加到 crontab:
# 每天凌晨 3 点执行一次。
0 3 * * * /usr/bin/python3 /path/to/project/qiniu-cert-sync.py >> /var/log/qiniu-cert-sync.log 2>&1-
打包镜像
docker build -t qiniu-cert-sync:latest . -
创建启动容器,映射出
.env、config.py# 创建并启动容器 docker run -e TZ=Asia/Shanghai -d \ --privileged=true \ -v /data/docker/qiniu-cert-sync/certs:/qiniu-cert-sync/certs \ -v /data/docker/qiniu-cert-sync/logs:/qiniu-cert-sync/logs \ -v /data/docker/qiniu-cert-sync/config:/qiniu-cert-sync/config/ \ --name qiniu-cert-sync qiniu-cert-sync:latest; # 启动容器 docker start # 重启容器 docker restart # 停止容器 docker stop
# 克隆仓库
git clone https://gitee.com/bytesharky/qiniu-cert-sync.git
# 为部署脚本添加运行权限
cd qiniu-cert-sync/deploy
chmod 755 deploy.sh
# 运行脚本并根据引导完成部署
./deploy.sh
Select language / 选择语言:
1) 中文(Chinese)
2) English
Enter choice (1/2, default 1): 1
=== Qiniu Cert Sync 部署引导 ===
请输入持久化目录地址 (默认: /data/docker/qiniu-cert-sync):
请输入证书存放路径 (默认: /root/.acme.sh/cert):
请输入容器名称 (默认: qiniu-cert-sync):
请输入七牛云 AccessKey:**********
请输入七牛云 SecretKey:**********
环境变量写入完成: /data/docker/qiniu-cert-sync/config/.env
默认 crontab 已写入 /data/docker/qiniu-cert-sync/config/crontab (每天3点执行)
正在拉取镜像...
Using default tag: latest
latest: Pulling from sharky/qiniu-cert-sync
Digest: sha256:d7bad24cf30c8595fd8bd368705c7472ebafb81175f3dd15c51717a1e2b1a17d
Status: Image is up to date for ccr.ccs.tencentyun.com/sharky/qiniu-cert-sync:latest
ccr.ccs.tencentyun.com/sharky/qiniu-cert-sync:latest
已存在容器,正在删除... qiniu-cert-sync
qiniu-cert-sync
正在启动容器...
efacdfd75f33412b66c1159e0fa18ef19a8bb91050d850f9c7a187db23e02a39
=== 部署完成 ===
持久化目录: /data/docker/qiniu-cert-sync
证书目录: /root/.acme.sh/cert
容器名称: qiniu-cert-sync
你可以用以下命令查看日志: docker logs -f qiniu-cert-sync
请记得根据需要修改以下配置文件:
1) /data/docker/qiniu-cert-sync/config/crontab
2) /data/docker/qiniu-cert-sync/config/config.py
# 或者拉取我公开的镜像手动部署
# docker pull ccr.ccs.tencentyun.com/sharky/qiniu-cert-sync