Skip to content

feat(deploy): 公网部署(Docker + Caddy 自动 HTTPS) - #27

Open
RobbsLuo wants to merge 1 commit into
mainfrom
feat/public-deploy-caddy
Open

RobbsLuo wants to merge 1 commit into
mainfrom
feat/public-deploy-caddy

Conversation

@RobbsLuo

Copy link
Copy Markdown
Owner

Closes #26

做了什么

按 issue 要求把「Caddy + override + README『公网部署(Docker)』」落成可合并的 PR。

  • docker-compose.public.yml(新增):在基础 compose 上叠一个 Caddy 入口。
    • 应用端口 !override 改绑 127.0.0.1:${PORT} —— 不留明文 http 旁路
    • TRUST_PROXY=true + HOST=0.0.0.0 + PUBLIC_BASE_URL=https://<域名>
    • ALLOWED_HOSTS 显式补域名 + 127.0.0.1:非空即「完全替换」语义,漏了会让全站 400 或 healthcheck 永远失败
    • Caddy 服务 depends_on: service_healthy,证书落具名卷 caddy_data
  • deploy/caddy/Caddyfile(新增):自动签发 / 续期、HTTP→HTTPS 308、flush_interval -1 保 SSE 逐帧、X-Forwarded-For 覆盖式写入(客户端伪造无效)、/metrics 公网返 404、反代不设超时上限(交给应用 STREAM_* / UPSTREAM_COMPLETE_TIMEOUT_SECONDS)
  • README 中 / 英:新增「公网部署(Docker + Caddy 自动 HTTPS)」一节,含 .env 两项、启动命令、覆盖文件逐条解释与注意事项;「快速开始」互链
  • .env.example:补 PUBLIC_DOMAIN / ACME_EMAIL;TECHNICAL.md 目录表同步
  • CI compose job:新增覆盖文件 config --quiet 与 caddy validate 两步

验证

  • docker compose config(base)+ 覆盖文件均通过;缺 PUBLIC_DOMAIN 时按预期报错
  • 本地真实跑通:coding2api healthy → coding2api-caddy 起来;https://localhost/health 200、/metrics 404、http 80 → 308、SSE 逐帧 0.3s 间隔到达、客户端伪造的 X-Forwarded-For: 1.2.3.4 被改写为真实对端
  • Caddyfile caddy validate 通过(v2.11.7);docker build 通过
  • 后端 ruff + pytest --cov-fail-under=100 → 100%

注:tests/deploy/test_assets.py::test_newsyslog_rule_matches_launchd_plist_paths 在本机 worktree 下失败,是本机已安装的 com.coding2api plist 指向主仓库路径所致(stash 掉本 PR 改动后同样失败),与本次改动无关,CI 上该用例跳过。

影响

  • 常规(内网 / 本地)部署完全不受影响:不传覆盖文件时不引用 PUBLIC_DOMAIN,基础 compose 行为不变
  • 需要 Docker Compose ≥ 2.24(!override 标签)

- 新增 docker-compose.public.yml:叠加 Caddy 入口,应用端口改绑回环,
  TRUST_PROXY/HOST/ALLOWED_HOSTS/PUBLIC_BASE_URL 一并按公网口径修正
- 新增 deploy/caddy/Caddyfile:自动签发续期、HTTP→HTTPS、SSE 逐帧不缓冲、
  XFF 覆盖式写入、/metrics 公网摘除
- README(中/英)新增「公网部署(Docker + Caddy)」一节 + 快速开始互链
- .env.example 补 PUBLIC_DOMAIN / ACME_EMAIL;TECHNICAL 目录表同步
- CI compose job 校验覆盖文件与 Caddyfile 语法

Refs #26
@aiqujuni

Copy link
Copy Markdown

服务器没有绑定域名,只有公网IP可以正常部署,https吗?

@aiqujuni

Copy link
Copy Markdown

@RobbsLuo @claude

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

公网部署PR

2 participants