升级自动部署更新SSL证书系统、申请godaddy的APIKEY
公司之前花钱购买的ssl证书快到期了,由于'消费降级',这次领导说没有预算给到证书了...
于是使用了certd的开源方案,之前星哥写的 免费全自动申请和自动部署更新SSL证书的开源系统-certd 部署的certd,运行了几个月的时间,可以申请免费的ssl证书。
安装的是v1.31.2版,无法使用godaddy的api key,后台没有设置的选项,最近更新。
整理需求如下:
-
- 确认certd新版版本支持godaddy
-
- 如果支持则升级certd(确保数据完整性)
-
- 申请godaddy的APIKEY
-
- 自动更新证书
如图,新版的已经支持godaddy了。
升级Certd
因为之前已经安装certd,现在只需要升级docker镜像。
数据都保留在“/data/docker/certd/data”,一定要记得备份数据。
1.进入安装目录
远程ssh服务器
cd /data/docker/certd
2.查看docker-compose
cat docker-compose.yaml
version: '3.3' # 兼容旧版docker-compose
services:
certd:
# 镜像 # ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号,例如:certd:1.29.0
image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
container_name: certd # 容器名
restart: unless-stopped # 自动重启
volumes:
# ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
# 只要修改冒号前面的,冒号后面的/app/data不要动
- /data/docker/certd/data:/app/data
ports: # 端口映射
# ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突,可以修改第一个7001为其他不冲突的端口号,第二个7001不要动
- "7001:7001"
# ↓↓↓↓ ---------------------------------------------------------- https端口,可以根据实际情况,是否暴露该端口
#- "7002:7002"
#↓↓↓↓ -------------------------------------------------------------- 如果出现getaddrinfo ENOTFOUND错误,可以尝试设置dns
# dns:
# - 223.5.5.5 # 阿里云公共dns
# - 223.6.6.6
# # ↓↓↓↓ --------------------------------------------------------- 如果你服务器在腾讯云,可以用这个替换上面阿里云的公共dns
# - 119.29.29.29 # 腾讯云公共dns
# - 182.254.116.116
# # ↓↓↓↓ --------------------------------------------------------- 如果你服务器部署在国外,可以用这个替换上面阿里云的公共dns
# - 8.8.8.8 # 谷歌公共dns
# - 8.8.4.4
# extra_hosts:
# # ↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts,外网域名可以指向本地局域网ip地址
# - "localdomain.com:192.168.1.3"
# # ↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数
# network_mode: host
labels:
com.centurylinklabs.watchtower.enable: "true"
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把下面networks的注释放开
# networks:
# - ip6net
environment:
# 设置环境变量即可自定义certd配置
# 配置项见: packages/ui/certd-server/src/config/config.default.ts
# 配置规则: certd_ + 配置项, 点号用_代替
# #↓↓↓↓ ----------------------------- 如果忘记管理员密码,可以设置为true,重启之后,管理员密码将改成123456,然后请及时修改回false
- certd_system_resetAdminPasswd=false
# 默认使用sqlite文件数据库,如果需要使用其他数据库,请设置以下环境变量
# 注意: 选定使用一种数据库之后,不支持更换数据库。
# 数据库迁移方法:1、使用新数据库重新部署一套,然后将旧数据同步过去,注意flyway_history表的数据不要同步
# #↓↓↓↓ ----------------------------- 使用postgresql数据库,需要提前创建数据库
# - certd_flyway_scriptDir=./db/migration-pg # 升级脚本目录
# - certd_typeorm_dataSource_default_type=postgres # 数据库类型
# - certd_typeorm_dataSource_default_host=localhost # 数据库地址
# - certd_typeorm_dataSource_default_port=5433 # 数据库端口
# - certd_typeorm_dataSource_default_username=postgres # 用户名
# - certd_typeorm_dataSource_default_password=yourpasswd # 密码
# - certd_typeorm_dataSource_default_database=certd # 数据库名
# #↓↓↓↓ ----------------------------- 使用mysql数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
# - certd_flyway_scriptDir=./db/migration-mysql # 升级脚本目录
# - certd_typeorm_dataSource_default_type=mysql # 数据库类型, 或者 mariadb
# - certd_typeorm_dataSource_default_host=localhost # 数据库地址
# - certd_typeorm_dataSource_default_port=3306 # 数据库端口
# - certd_typeorm_dataSource_default_username=root # 用户名
# - certd_typeorm_dataSource_default_password=yourpasswd # 密码
# - certd_typeorm_dataSource_default_database=certd # 数据库名
# ↓↓↓↓ --------------------------------------------------------- 自动升级,上面certd的版本号要保持为latest
# certd-updater: # 添加 Watchtower 服务
# image: containrrr/watchtower:latest
# container_name: certd-updater
# restart: unless-stopped
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# # 配置 自动更新
# environment:
# - WATCHTOWER_CLEANUP=true # 自动清理旧版本容器
# - WATCHTOWER_INCLUDE_STOPPED=false # 不更新已停止的容器
# - WATCHTOWER_LABEL_ENABLE=true # 根据容器标签进行更新
# - WATCHTOWER_POLL_INTERVAL=600 # 每 10 分钟检查一次更新
# ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把上面networks的注释放开
#networks:
# ip6net:
# enable_ipv6: true
# ipam:
# config:
# - subnet: 2001:db8::/64
查看镜像、查看运行的容器:
查看镜像
docker images|grep certd
registry.cn-shenzhen.aliyuncs.com/handsfree/certd latest 64080b99294c 7 months ago 651MB
查看运行的容器:
docker ps|grep certd
c9e0a2ac843b registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest "docker-entrypoint.s…" 7 months ago Up 7 months 0.0.0.0:7001->7001/tcp, 7002/tcp certd
3.停止并且删除容器
再次提醒,一定要备份数据!
docker stop certd
docker rm -f certd
4.删除镜像
删除镜像
docker rmi <镜像id>
docker rmi 64080b99294c
5.启动
docker compose up -d
WARN[0000] /data/docker/certd/docker-compose.yaml: `version` is obsolete
[+] Running 5/11
⠼ certd [⣿⣤⣿⣿⣿⣀⣿⣀⠀⠀] Pulling 7.4s
✔ 2d35ebdb57d9 Pull complete 1.1s
⠧ 9682177f5dda Downloading [============================> ] 29.38MB/51.55MB 6.8s
✔ e910c7b62cc7 Download complete 0.4s
✔ eb9e06b66aae Download complete 0.5s
✔ cbfaeef5880e Download complete
确认是否升级
升级前v1.31.2
升级后v1.37.4
认证有了godaddy的授权
也多了一些其他的平台
再申请godaddy的APIKEY
使用CNAME认证
1.添加CNAME管理
如图进入后台
点击cname记录管理,添加,填写域名
2.添加域名解析记录
添加之后到godaddy里面添加一条cname记录。
3.认证成功申请ssl证书
点击认证,成功之后
再申请ssl证书的时候使用“CNAME代理认证”
Godaddy申请APIKEY
到最后才发现,这步不用操作!
认证成功 → 说明 API Key/Secret 是正确的。
权限不足 → GoDaddy 新政策要求:
DNS/域名管理 API:账户必须拥有 ≥10 个域名 或者订阅 Discount Domain Club(优惠域名计划)。
可用性/批量查询 API:账户必须拥有 ≥50 个域名 才能使用。
如果不满足条件,就会返回 ACCESS_DENIED 错误。
不过还是记录一下
1.登录godaddy
GoDaddy开发者中心
https://developer.godaddy.com/
2.点击API Keys
3.进入API Key Management
进入API Key Management后,点击[Create New API Key]进行创建API Key
4.创建API Key
创建API Key时,注意选择Environment,必须选择Production。
5.保存Key和Secret
6.在Certd中添加DNS授权
7.测试
报错
错误:请求连接超时,Error 【https://api.godaddy.com/v1/domains?limit=1】
最后
最后的最后,cname认证就可以解决问题的。浪费了一个下午,去配置APKKEY和https_proxy的代理。
以前要手动申请、下载、替换证书,搞不好还会因为忘记续期导致网站挂掉。现在使用云服务商的API Key+CNAME认证的配合certed,整个流程全自动跑起来,省心又稳妥。