# 公网入口模板(Caddy 自动证书路径,P2-ops 二选一里选了 Caddy, # certbot 路径只是备选、未做成模板)。 # # 只暴露 webhook 与 OAuth 回调,任务/项目/管理 API 不对外。 # # 变量是 Caddy 原生环境变量展开({$DOMAIN} / {$ACME_EMAIL}), # 不是部署时 sed 替换:Caddy 启动时从进程环境读这两个变量, # 未设时启动即报错(fail-fast,不会静默跑成空域名)。 # 部署步骤见 deploy/README.md“公网入口”一节;变量文件示例: # /etc/caddy/env(600): # DOMAIN=example.invalid # ACME_EMAIL=ops@example.invalid # caddy.service 模板(同目录)用 EnvironmentFile 指向该文件。 # # 控制面本身仍只监听 127.0.0.1:8765,不直接对外;Caddy 只做反向代理 + TLS。 # GitHub webhook 与 OAuth 回调都要求 https 且证书有效,Caddy 的自动证书满足这一点; # 自签名证书不行,GitHub 会拒绝送达,浏览器也会拦截 OAuth 回调。 # # 当前生产现状:生产走宝塔 nginx,不是 Caddy;本模板是新机可复现的选项, # 不是“生产已切 Caddy”的声明(见 deploy/README.md)。 {$DOMAIN} { encode gzip tls {$ACME_EMAIL} # GitHub webhook:签名校验在控制面做(GITHUB_WEBHOOK_SECRET),Caddy 只转发。 @github path /webhooks/github reverse_proxy @github 127.0.0.1:8765 # Slack webhook(目前只有解析,未接执行;先留着入口,执行接通后再用)。 @slack path /webhooks/slack reverse_proxy @slack 127.0.0.1:8765 # OAuth 浏览器登录/回调:回调 URL 必须与 OAuth App 里填的完全一致, # 即 https://{$DOMAIN}/oauth//callback。 @oauth path /oauth/* reverse_proxy @oauth 127.0.0.1:8765 # 其余一切(/tasks、/projects、/admin/*、/metrics 等)一律不对公网开放。 respond "forbidden" 403 }