fix(devops): 生产 compose 收紧——api/web 仅绑 127.0.0.1(nginx 唯一入口,basic auth 不可绕)、pg 不发布宿主端口、web 构建默认走 npmmirror

This commit is contained in:
Yaojia Wang
2026-07-07 14:16:52 +02:00
parent 03895cc0d4
commit 72d7111581

View File

@@ -13,9 +13,10 @@ services:
POSTGRES_USER: writer POSTGRES_USER: writer
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD 必填(生产强口令,勿用 base 弱口令)} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD 必填(生产强口令,勿用 base 弱口令)}
POSTGRES_DB: writer POSTGRES_DB: writer
# 不对公网暴露:仅绑本机回环(供宿主机跑迁移)。彻底隔离可整段删掉只走 compose 内网。 # 生产不发布任何宿主端口:迁移经 compose 内网(`run --rm api alembic`)直连 pg 服务名,
ports: # 且宿主已有别的 pg 占用 127.0.0.1:5432。!reset 清掉 base 的 "5432:5432"——否则 compose
- "127.0.0.1:5432:5432" # 会「拼接」两份端口base 的 0.0.0.0:5432 + 本层),既暴露公网又与宿主 pg 冲突。
ports: !reset []
restart: unless-stopped restart: unless-stopped
api: api:
@@ -26,6 +27,10 @@ services:
LOG_JSON: "true" LOG_JSON: "true"
CREDENTIAL_ENC_KEY: ${CREDENTIAL_ENC_KEY:?CREDENTIAL_ENC_KEY 必填(生产 Fernet key勿用占位值} CREDENTIAL_ENC_KEY: ${CREDENTIAL_ENC_KEY:?CREDENTIAL_ENC_KEY 必填(生产 Fernet key勿用占位值}
CORS_ORIGINS: ${CORS_ORIGINS:?CORS_ORIGINS 必填(前端真实来源,逗号分隔,禁通配)} 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 restart: unless-stopped
web: web:
@@ -34,7 +39,12 @@ services:
args: args:
# 构建期内联:生产须指向浏览器可达的公网 API通常反代后的 https 域名)。 # 构建期内联:生产须指向浏览器可达的公网 API通常反代后的 https 域名)。
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:?NEXT_PUBLIC_API_BASE 必填(浏览器可达的公网 API 基址)} 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: environment:
NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:?NEXT_PUBLIC_API_BASE 必填} NEXT_PUBLIC_API_BASE: ${NEXT_PUBLIC_API_BASE:?NEXT_PUBLIC_API_BASE 必填}
API_BASE_INTERNAL: http://api:8000 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 restart: unless-stopped