如何在DigitalOcean网络防火墙中放行Certbot验证与GitHub Action的连接?
如何在DigitalOcean网络防火墙中放行Certbot验证与GitHub Action的连接?
Hey,我来帮你搞定这个问题!你这种把 staging 环境设成私有后遇到的 Certbot 和 GitHub Action 连接问题太常见了,分两部分给你说具体怎么配置:
一、解决Certbot的验证问题
Certbot 默认用 HTTP-01 验证方式,需要 Let's Encrypt 的验证服务器能访问你的 Droplet 的 80 端口来确认域名所有权——这就是现在被你的防火墙挡住的原因。有两种解决思路:
方法1:放行Let's Encrypt的验证IP段(推荐长期使用)
- 打开 DigitalOcean 控制面板,找到你绑定这个 Droplet 的防火墙规则
- 添加一条入站规则:
- 协议选择
TCP - 端口范围填
80 - 来源填入 Let's Encrypt 公开的验证 IP 段(你可以通过命令
curl https://letsencrypt.org/docs/ip-addresses/获取最新的,这些IP段会定期更新,记得隔段时间检查下)
- 协议选择
- 保存规则后,重新运行 Certbot 验证,应该就能顺利通过了
方法2:改用DNS-01验证(无需开放80端口)
如果你不想开放80端口给外部,完全可以切换到DNS验证方式:
- 运行 Certbot 时加上参数
certbot certonly --preferred-challenges dns - 按照提示配置你的域名服务商的 API 密钥,Certbot 会自动在你的DNS记录里添加验证条目,全程不需要开放80/443端口,特别适合私有 staging 环境
二、放行GitHub Action的连接
GitHub Actions 的运行器IP是动态的,但 GitHub 会定期公布官方的IP范围列表,你只需要把这些IP段添加到防火墙规则里就行:
- 先获取最新的 GitHub Actions IP 范围:运行命令
curl https://api.github.com/meta,返回结果里的actions字段就是你需要的所有IP段 - 回到 DigitalOcean 防火墙,添加一条入站规则:
- 协议根据你的需求选(比如如果是部署用SSH就选TCP,端口22;如果是访问网站就选TCP,端口80/443)
- 端口范围填你需要开放的端口
- 来源把刚才获取到的所有 GitHub Actions IP 段逐一添加进去(DigitalOcean 防火墙支持同时添加多个IP段)
- 保存规则后,GitHub Action 就能正常连接到你的 Droplet 了
另外还有个进阶小技巧:如果你的 GitHub Action 只是临时需要连接,也可以用 DigitalOcean 的 API 密钥在 Action 流程里临时添加当前运行器的IP到防火墙,完成部署后再移除——不过这个需要额外配置API权限,适合有一定技术基础的情况。
备注:内容来源于stack exchange,提问作者Juliver Galleto
相关产品推荐
相关产品推荐

