You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik v1无法为非标准端口部署的Gitlab容器签发Let's Encrypt证书求助

故障根因

  1. ACME HTTP-01挑战要求公网80端口可访问,你仅配置了公网65443端口转发到服务器443端口,未将公网80端口转发到服务器80端口,Let's Encrypt无法完成域名所有权验证,导致证书申请失败。
  2. Gitlab容器的Traefik标签配置错误:混用了Traefik v2的配置语法,且traefik.port配置为对外暴露的65443而非Gitlab容器内部监听端口,流量转发逻辑异常。
  3. 可能存在acme.json文件权限不符合要求的问题,Traefik无法写入申请到的证书。

解决步骤

  1. 配置端口转发或切换挑战模式

    • 若运营商未封禁80端口:在路由器添加规则,将公网TCP 80端口转发到服务器的80端口。
    • 若80端口被封禁:将ACME挑战切换为DNS-01模式,在traefik.toml中配置对应域名解析服务商的API密钥完成验证。
  2. 修正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
    
  3. 校验acme.json权限
    执行以下命令确保证书存储文件权限符合要求:

    chmod 600 /path/to/your/acme.json
    
  4. 重启服务验证
    依次重启Traefik、Gitlab容器,查看Traefik运行日志确认证书申请成功,访问Gitlab地址验证证书已替换为Let's Encrypt签发的有效证书。若此前申请失败次数过多触发限流,可等待数小时后重试,或先切换到Let's Encrypt staging环境测试配置正确性。

内容的提问来源于stack exchange,提问作者Exo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:07