问题: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 早已包含此项,本次只补齐生产侧。
83 lines
3.1 KiB
YAML
83 lines
3.1 KiB
YAML
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 |