Files
KCGL/docker-compose.prod.yml
yueli 69d9f010a9 fix(deploy): 生产 compose 补上 MOM_INTERNAL_API_KEY
问题:c7f8588「新增对内接口,让 Track 能提交生产报废」已经提交了
config.py 的 MOM_INTERNAL_API_KEY 读取与 api/v1/internal.py 的实现,
但 docker-compose.prod.yml 忘了同步 —— 生产环境压根不会注入这个变量。

后果:不是"悄悄放行",而是 fail-closed 一直 503。内部接口在生产上
根本不可用,Track 提交生产报废会全部失败。

★ 刻意**不给默认值**(${MOM_INTERNAL_API_KEY:-}):未配置时内部接口返回
  503,而不是让一个写接口用着众所周知的密钥在生产上悄悄打开。
  部署时必须在服务器 .env 里显式配置,且与 Track 侧配同一个值。

注:开发用的 docker-compose.yml 早已包含此项,本次只补齐生产侧。
2026-09-23 17:16:12 +08:00

83 lines
3.1 KiB
YAML
Raw 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.

version: '3.8'
services:
# --- 数据库 (已修改为自带 pgvector 的镜像) ---
db:
image: pgvector/pgvector:pg15
container_name: inventory_db_prod
restart: always
environment:
POSTGRES_USER: prod_user
POSTGRES_PASSWORD: StrongPassword123!
POSTGRES_DB: inventory_system
volumes:
# 数据卷保持不变,你的历史数据不会丢失!
- ./pgdata_prod:/var/lib/postgresql/data
ports:
- "5432:5432"
# --- 后端 (Flask) (保持不变) ---
backend:
build:
context: ./inventory-backend
container_name: inventory_api_prod
restart: always
expose:
- "8000"
volumes:
- ./uploads_prod:/app/uploads
- ./models_prod:/app/models
command: gunicorn -c gunicorn.conf.py run:app
environment:
DATABASE_URL: postgresql://prod_user:StrongPassword123!@db:5432/inventory_system
MAIL_ENABLED: "true"
MAIL_SERVER: smtp.mxhichina.com
MAIL_PORT: "465"
MAIL_USERNAME: wms@iris-rs.cn
MAIL_PASSWORD: Q7nYyyESWlaThKjx
MAIL_DEFAULT_SENDER: wms@iris-rs.cn
MAIL_USE_SSL: "true"
MAIL_USE_TLS: "false"
# Track 系统联动(扫码入库/出库/Webhook 通知)
# ★ 生产地址硬编码为容器名 track_backend_prod(同一服务器 mom_net 网络内互通),
# 避免被服务器上残留的 .env 覆盖成 dev 的 track_backend
TRACK_WEBHOOK_URL: http://track_backend_prod:8000/api/v1/external/webhooks/mom-inbound
TRACK_WEBHOOK_KEY: ${TRACK_WEBHOOK_KEY:-2ce5fedb48fde3fd7e0abf67472a5027b03e9ae6f19cf768}
TRACK_API_URL: http://track_backend_prod:8000
TRACK_OUTBOUND_WEBHOOK_URL: http://track_backend_prod:8000/api/v1/external/webhooks/mom-outbound
# ★ 对内接口(Track → MOM 生产报废受理)共享密钥,请求头 X-API-Key。
# 与 TRACK_WEBHOOK_KEY 刻意分离(方向相反、权限不同),独立轮换。
# ★ 刻意**不给默认值** —— 未配置时内部接口 503(Fail-Closed),
# 而不是让一个写接口用着众所周知的密钥在生产上悄悄打开。
# 部署时必须在服务器 .env 里显式配置,且与 Track 侧配同一个值。
MOM_INTERNAL_API_KEY: ${MOM_INTERNAL_API_KEY:-}
depends_on:
- db
# 加入 mom_net 外部网络,与 Track 生产容器互通
networks:
- default
- mom_net
# --- 前端 (Nginx + Vue) (包含 HTTPS 配置) ---
frontend:
build:
context: ./inventory-web
dockerfile: Dockerfile.prod
container_name: inventory_ui_prod
restart: always
ports:
- "80:80" # HTTP 端口
- "443:443" # 【新增】HTTPS 端口
volumes:
# 【新增】挂载 SSL 证书
# 左边是服务器路径 ./ssl/nginx.crt
# 右边是容器内路径 /etc/nginx/ssl/nginx.crt (必须和报错日志里的一致)
- ./ssl/nginx.crt:/etc/nginx/ssl/nginx.crt
- ./ssl/nginx.key:/etc/nginx/ssl/nginx.key
depends_on:
- backend
networks:
# 与 Track 生产容器共享的外部网络(Track prod 的 mom_net 也叫这个名字)
mom_net:
external: true
name: inventory-app_default