站点/后台分轨背景与用户列表排序一并落地;生产 CORS 改走 SITE_URL,健康检查带版本号。 Co-authored-by: Cursor <cursoragent@cursor.com>
官方运行时(Docker Compose)
一体交付:Next.js SSR + Go API + PostgreSQL 17。 不含反代:TLS 与同源路由由你现有的 Nginx / Caddy 处理,示例见 nginx.example.conf。契约见 CONTRACT.md。
本地开发不要用这份 Compose。请继续用仓库根 start.bat / start.sh(只起 Postgres,前后端热重载)。
首次安装
- 安装 Docker Compose v2。
- 复制环境文件并改密码:
cd deploy
cp .env.example .env
# 编辑 .env:POSTGRES_PASSWORD、JWT_SECRET、SITE_URL
SITE_URL 填浏览器看到的 HTTPS origin(如 https://bbs.example.com)。DEV_MODE=false 会启用 __Host- cookie,必须由你的反代提供 HTTPS。
- 启动(尚未推镜像仓库时从源码构建):
docker compose up -d --build
默认只把 127.0.0.1:3000(web)和 127.0.0.1:3001(api)交给本机反代。与本地 start.bat 的 3000/3001 冲突时,先停开发进程,或改 .env 里的 JIANG13_WEB_PORT / JIANG13_API_PORT。
- 按 nginx.example.conf 把同一 Host 指过来:
/→ web:3000/api/(含/api/ws)、/uploads/、/health→ api:3001
GET https://你的域名/health 应返回 "status":"ok" 和 version。空库首次注册的账号自动成为站长。不要把 API 放到另一个子域。
数据在 Docker volume appdata / pgdata。不要把 backend/data 或真实 app.ini 打进镜像。
更新应用(官方路径)
镜像已推到仓库、且 .env 里 JIANG13_IMAGE_* 指向该仓库时:
cd deploy
docker compose pull
docker compose up -d
只换应用 tag,不改本目录 Compose / 环境变量表。启动时自动迁移。建议先备份:
docker compose exec postgres pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB" > backup.sql
appdata 用 docker volume 备份。失败则把 JIANG13_VERSION 改回上一版再 up -d。
尚未发布镜像时,在更新源码后执行 docker compose up -d --build。
Compose 文件本身有变更时,按新版本 changelog 合并 deploy/docker-compose.yml 与 .env,不能只 pull。
停止
cd deploy
docker compose down
加 -v 会删数据库和上传,仅在你确认要清空时使用。不要对仓库根的开发 Postgres 执行这条。
不做本期
- 后台一键更新
- 预编译包 / watchdog
- 把 Docker socket 交给 Web 进程
- 在 Compose 里内置 Nginx / Caddy
- Cloudflare Workers 作为官方运行时