Traefik v1无法为非标准端口部署的Gitlab容器签发Let's Encrypt证书求助
故障根因
- ACME HTTP-01挑战要求公网80端口可访问,你仅配置了公网65443端口转发到服务器443端口,未将公网80端口转发到服务器80端口,Let's Encrypt无法完成域名所有权验证,导致证书申请失败。
- Gitlab容器的Traefik标签配置错误:混用了Traefik v2的配置语法,且
traefik.port配置为对外暴露的65443而非Gitlab容器内部监听端口,流量转发逻辑异常。 - 可能存在
acme.json文件权限不符合要求的问题,Traefik无法写入申请到的证书。
解决步骤
配置端口转发或切换挑战模式
- 若运营商未封禁80端口:在路由器添加规则,将公网TCP 80端口转发到服务器的80端口。
- 若80端口被封禁:将ACME挑战切换为DNS-01模式,在
traefik.toml中配置对应域名解析服务商的API密钥完成验证。
修正Gitlab配置
首先修改Gitlab容器的docker-compose.yml标签,删除Traefik v2的无效配置,修正端口:labels: - 'traefik.enable=true' - 'traefik.port=80' - 'traefik.docker.network=traefik_proxy' - 'traefik.backend=gitlab' - 'traefik.frontend.rule=Host:gitlab.dev.example.com' - 'traefik.frontend.entryPoints=https'再修改Gitlab的omnibus配置,添加以下参数,关闭Gitlab内置HTTPS,将SSL终结逻辑放在Traefik侧处理:
nginx['listen_port'] = 80 nginx['listen_https'] = false校验acme.json权限
执行以下命令确保证书存储文件权限符合要求:chmod 600 /path/to/your/acme.json重启服务验证
依次重启Traefik、Gitlab容器,查看Traefik运行日志确认证书申请成功,访问Gitlab地址验证证书已替换为Let's Encrypt签发的有效证书。若此前申请失败次数过多触发限流,可等待数小时后重试,或先切换到Let's Encrypt staging环境测试配置正确性。
内容的提问来源于stack exchange,提问作者Exo
相关产品推荐
相关产品推荐

