- Dockerfile 改为 Node 24 运行时:Vike 产物 + Go API 二进制共用镜像 - docker-compose 双容器:web(:3000 对外 SSR) + api(:3001 内部,持 /data 卷) - entrypoint 改用 gosu 降权(Debian 基础镜像),健康检查用 node fetch - Makefile/build.ps1:build 不再打包前端,新增 serve(本地双进程)与 web-build - README 同步双服务架构、端口/环境变量、部署与开发说明
58 lines
1.7 KiB
YAML
58 lines
1.7 KiB
YAML
# 姜十三论坛 — Docker Compose 双服务部署
|
||
# 架构:web(Node :3000 对外:Vike SSR + 静态资源 + API 反代) → api(Go :3001 内部:纯 API + /data 数据卷)
|
||
# 启动:docker compose up -d --build
|
||
# 或:make compose-up / build.bat -Target compose-up
|
||
|
||
services:
|
||
api:
|
||
image: hangzhang714128/jiang13-forum:latest
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
args:
|
||
VERSION: dev
|
||
command: ["--work-path", "/app", "--data", "/data", "--port", "3001"]
|
||
volumes:
|
||
- jiang13-data:/data
|
||
# 可选:挂载自定义 app.ini(只读)
|
||
# - ./app.ini:/app/app.ini:ro
|
||
environment:
|
||
TZ: Asia/Shanghai
|
||
# 可选:固定 JWT 密钥(留空则自动生成并持久化到 /data/.jwt_secret)
|
||
# JIANG13_JWT_SECRET: your-secret-here
|
||
expose:
|
||
- "3001"
|
||
restart: unless-stopped
|
||
stop_grace_period: 15s
|
||
healthcheck:
|
||
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3001/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|
||
start_period: 15s
|
||
|
||
web:
|
||
image: hangzhang714128/jiang13-forum:latest
|
||
entrypoint: ["node", "server/index.mjs"]
|
||
working_dir: /app/frontend
|
||
user: "1000:1000"
|
||
ports:
|
||
- "3000:3000"
|
||
environment:
|
||
TZ: Asia/Shanghai
|
||
PORT: "3000"
|
||
GO_API_URL: http://api:3001
|
||
depends_on:
|
||
api:
|
||
condition: service_healthy
|
||
restart: unless-stopped
|
||
healthcheck:
|
||
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
||
interval: 30s
|
||
timeout: 5s
|
||
retries: 3
|
||
start_period: 15s
|
||
|
||
volumes:
|
||
jiang13-data:
|