Files
writer-work-flow/docker-compose.prod.yml

51 lines
2.9 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 生产加固覆盖层 —— 与 base 叠加使用base 保持 dev 便利,本文件收紧安全):
# docker compose -f docker-compose.yml -f docker-compose.prod.yml build
# docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
#
# 需在宿主机 .envchmod 600勿入库或环境变量提供以下必填项缺失即拒绝 up / config 报错):
# POSTGRES_PASSWORD —— pg 强随机口令(替换 base 的弱口令 writer/writer
# CREDENTIAL_ENC_KEY —— Fernet key生产新生成勿用 .env.example 占位值)
# CORS_ORIGINS —— 前端真实来源,逗号分隔,禁通配 *
# NEXT_PUBLIC_API_BASE—— 浏览器可达的公网 API 基址(构建期内联进 web bundle
services:
pg:
environment:
POSTGRES_USER: writer
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD 必填(生产强口令,勿用 base 弱口令)}
POSTGRES_DB: writer
# 生产不发布任何宿主端口:迁移经 compose 内网(`run --rm api alembic`)直连 pg 服务名,
# 且宿主已有别的 pg 占用 127.0.0.1:5432。!reset 清掉 base 的 "5432:5432"——否则 compose
# 会「拼接」两份端口base 的 0.0.0.0:5432 + 本层),既暴露公网又与宿主 pg 冲突。
ports: !reset []
restart: unless-stopped
api:
environment:
DATABASE_URL: postgresql+asyncpg://writer:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD 必填}@pg:5432/writer
DATABASE_URL_SYNC: postgresql+psycopg://writer:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD 必填}@pg:5432/writer
APP_ENV: prod
LOG_JSON: "true"
CREDENTIAL_ENC_KEY: ${CREDENTIAL_ENC_KEY:?CREDENTIAL_ENC_KEY 必填(生产 Fernet key勿用占位值}
CORS_ORIGINS: ${CORS_ORIGINS:?CORS_ORIGINS 必填(前端真实来源,逗号分隔,禁通配)}
# base 发布 0.0.0.0:8000dev 便利生产只绑回环——nginx 是唯一公网入口basic auth 不可绕过。
# !override 整体替换 base 的端口列表(否则拼接会残留 0.0.0.0:8000
ports: !override
- "127.0.0.1:8000:8000"
restart: unless-stopped
web:
build:
context: ./apps/web
args:
# 构建期内联:生产须指向浏览器可达的公网 API通常反代后的 https 域名)。
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:?NEXT_PUBLIC_API_BASE 必填(浏览器可达的公网 API 基址)}
# 本机所在区域 registry.npmjs.org 不可达,构建走 npmmirror 镜像(可用 env NPM_REGISTRY 覆盖)。
NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com}
environment:
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:?NEXT_PUBLIC_API_BASE 必填}
API_BASE_INTERNAL: http://api:8000
# 只绑回环(同 apinginx 反代 127.0.0.1:3000 是唯一公网入口。!override 替换 base 的 3000:3000。
ports: !override
- "127.0.0.1:3000:3000"
restart: unless-stopped