云服务器是什么系统
升级自动部署更新SSL证书系统、申请godaddy的APIKEY
公司之前花钱购买的ssl证书快到期了,由于消费降级,这次领导说没有预算给到证书了...
于是使用了certd的开源方案,之前星哥写的 免费全自动申请和自动部署更新SSL证书的开源系统-certd 部署的certd,运行了几个月的时间,可以申请免费的ssl证书。
安装的是v1.31.2版,无法使用godaddy的api key,后台没有设置的选项,最近更新。
整理需求如下:
1. 确认certd新版版本支持godaddy2. 如果支持则升级certd(确保数据完整性)3. 申请godaddy的APIKEY4. 自动更新证书如图,新版的已经支持godaddy了。
升级Certd
因为之前已经安装certd,现在只需要升级docker镜像。
数据都保留在/data/docker/certd/data,一定要记得备份数据。
1.进入安装目录
远程ssh服务器
cd/data/docker/certd2.查看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错误,可以尝试设置dnsdns:- 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.4extra_hosts:↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts,外网域名可以指向本地局域网ip地址-"localdomain.com:192.168.1.3"↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数network_mode: hostlabels: com.centurylinklabs.watchtower.enable: "true"↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把下面networks的注释放开networks:- ip6netenvironment:设置环境变量即可自定义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的版本号要保持为latestcertd-updater:添加 Watchtower 服务image: containrrr/watchtower:latestcontainer_name: certd-updaterrestart: unless-stoppedvolumes:- /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:trueipam:config:- subnet: 2001:db8::/64查看镜像、查看运行的容器:
查看镜像dockerimages|grepcertdregistry.cn-shenzhen.aliyuncs.com/handsfree/certdlatest64080b99294c7monthsago651MB查看运行的容器:dockerps|grepcertdc9e0a2ac843bregistry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest"docker-entrypoint.s…"7monthsagoUp7months0.0.0.0:7001->7001/tcp,7002/tcpcertd3.停止并且删除容器
再次提醒,一定要备份数据!
dockerstop certddockerrm -f certd4.删除镜像
删除镜像dockerrmi <镜像id>dockerrmi 64080b99294c5.启动
dockercomposeup-dWARN[0000]/data/docker/certd/docker-compose.yaml:`version`isobsolete[+]Running5/11⠼certd[⣿⣤⣿⣿⣿⣀⣿⣀⠀⠀]Pulling7.4s✔2d35ebdb57d9Pullcomplete1.1s⠧9682177f5ddaDownloading[============================>]29.38MB/51.55MB6.8s✔e910c7b62cc7Downloadcomplete0.4s✔eb9e06b66aaeDownloadcomplete0.5s✔cbfaeef5880eDownloadcomplete确认是否升级
升级前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,整个流程全自动跑起来,省心又稳妥。
阿里云服务器普通
