Files
track-LICA/docker-compose.yml
duxingchen 347b7b6a68 feat: LICA 部门独立实例 — 组织隔离与端口/标识改造
派生自 IRIS 实例的 feature/ai-audit-update @ 192c8ee,在同一台机器上独立运行。

隔离机制(开关集中在 app/core/config.py 的 ORG_DEPARTMENT / MATERIAL_CATEGORY_PREFIX):
- 登录:sys_user 查询增加 department 条件,非本部门账号一律 401
- 人员列表:服务端钉死部门、忽略客户端传参;删除「异常退回全表」的降级分支
- 物料:groups 与 items 都增加 category LIKE 'LICA/%' 前缀过滤
- 人员操作统计:把硬编码的 department='IRIS' 改为配置项

物料为什么用前缀而不是 LIKE '%LICA%':
MOM 里存在 171 条 IRIS/成品/LICA/...(无人机/野外便携/高塔监测等),
模糊匹配会把这些 IRIS 物料漏给 LICA。实测前缀匹配命中 795 条 / 5 个分组。

部署隔离:
- 端口 8030/8031/8032,容器名 lica_*,卷 lica_pgdata(与 IRIS 完全独立)
- 服务名改为 lica_backend,避免在 projects_default 网络上与 IRIS 的 backend
  重名 —— 否则将来任何一方写 http://backend:8000 会随机打到另一个部门
- SECRET_KEY 重新生成:实测两边 token 互不通用(双向 401)

客户端标识(不改会导致两个部门的客户端互相覆盖):
- Tauri identifier 改 com.lica.production(否则桌面端互相覆盖安装,且共用
  WebView 数据目录会让 track_admin_token 串号)
- uni-app appid 改 __UNI__D2F4A19(否则同机 APK 互相覆盖、wgt 热更新串号)
- uni-app 地址端口 8011 → 8031(收敛在 utils/config.js 单一来源)
- sync-watch.sh 的 DST 指向 LICA 专属 HBuilderX 目录(否则会把源码灌进 IRIS 工程)

排除项:未复制 deploy.sh / deploy_full.sh / docker-compose.prod.yml ——
它们写死了 IRIS 的生产服务器,误跑会覆盖线上系统。
2026-09-21 16:10:52 +08:00

110 lines
4.6 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.

# ============================================================
# LICA 生产流转管理系统 — 独立实例(与 IRIS 版同机共存)
# 启动: docker compose up -d --build
# 停止: docker compose down
# 日志: docker compose logs -f
#
# ⚠️ 首次部署必须先跑数据库迁移,否则业务接口全部 500
# docker compose exec lica_backend python -m alembic upgrade head
# ============================================================
name: track-lica
services:
# ============================================================
# PostgreSQL 15 + pgvector — LICA 独立库
# ============================================================
db:
image: pgvector/pgvector:pg15
container_name: lica_db
restart: unless-stopped
environment:
POSTGRES_USER: lica
POSTGRES_PASSWORD: bc7e44ba7aa424b5a1d95a53dec824fc
POSTGRES_DB: lica_production
ports:
- "8032:5432"
volumes:
# ⚠️ 绝不能与 IRIS 的 track_pgdata 共用,否则两个部门写同一个库
- lica_pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U lica -d lica_production"]
interval: 10s
timeout: 5s
retries: 5
# ============================================================
# FastAPI 后端 — --reload 热更新
# 服务名用 lica_backend 而非 backend服务名会作为网络别名注册到
# projects_default与 IRIS 实例的 backend 重名会导致将来任何一方
# 写 http://backend:8000 时随机打到另一个部门。
# ============================================================
lica_backend:
build:
context: ./backend
dockerfile: Dockerfile.dev
container_name: lica_backend
restart: unless-stopped
environment:
# ⚠️ 主机名必须是 lica_db绝不能写 db ——
# MOM 的 compose 服务名就叫 db在 projects_default 网络上
# 会把本后端解析到 MOM 生产库并写入。
DATABASE_URL: postgresql+asyncpg://lica:bc7e44ba7aa424b5a1d95a53dec824fc@lica_db:5432/lica_production
# ⚠️ 必须与 IRIS 不同get_current_user 只验签名不查库,
# 两边共用密钥则 IRIS 签发的 token 可直接访问 LICA 接口。
SECRET_KEY: aQy1zyEJY50OJlYrZ2OkNgQN3N46F4bvjYVdva0y4N3wpfaZotf9NKBTZ0CTDeLD
DEBUG: "true"
# ---- 组织隔离(本实例唯一的部门开关,供登录/人员/物料三处 SQL 引用)----
ORG_DEPARTMENT: LICA
MATERIAL_CATEGORY_PREFIX: "LICA/"
# 8030 = PC 管理端5173/8020 = track-uniapp 的 H5 调试服务
# HBuilderX「运行到浏览器」起在 5173直接跑 vite 按 track-uniapp/vite.config.ts 是 8020
# ⚠️ 漏了 uniapp 的来源时,浏览器会在 CORS 预检阶段就掐掉请求,
# 表现是「点登录没反应」,且控制台只报一句笼统的 404/400。
CORS_ORIGINS: '["http://localhost:8030","https://localhost:8030","http://192.168.9.80:8030","https://192.168.9.80:8030","http://localhost:5173","https://localhost:5173","http://192.168.9.80:5173","https://192.168.9.80:5173","http://localhost:8020","https://localhost:8020","tauri://localhost"]'
# MOM 老系统数据库 — 通过容器名解析projects_default 网络内 DNS不要写死 IP
MOM_DB_HOST: inventory_db
MOM_DB_PORT: "5432"
# MOM 回调验签 Key — 暂与 IRIS 相同MOM 侧目前只有单个 TRACK_WEBHOOK_KEY
# 且回调地址写死指向 IRIS 的 track_backend。待 MOM 支持按部门双推后,
# 再决定是否给 LICA 单独签发。(在此之前 LICA 收不到出入库联动)
TRACK_WEBHOOK_KEY: 2ce5fedb48fde3fd7e0abf67472a5027b03e9ae6f19cf768
ports:
- "8031:8000"
volumes:
- ./backend:/app
depends_on:
db:
condition: service_healthy
networks:
- default
- mom_net
# ============================================================
# Vite + React 前端 — HMR 热更新
# ============================================================
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.dev
container_name: lica_frontend
restart: unless-stopped
environment:
VITE_API_BASE_URL: /api/v1
ports:
- "8030:1420"
volumes:
- ./frontend:/app
- /app/node_modules # 匿名卷,不覆盖容器里的 node_modules
depends_on:
- lica_backend
networks:
mom_net:
external: true
name: projects_default # MOM 系统所在网络IRIS 实例也在此网络上)
volumes:
lica_pgdata:
name: lica_pgdata