🐛 fix(deploy): 移除服务 profiles——裸 up / 裸 -f 恢复一键可用
compose 规则:声明了 profiles 的服务在不带 --profile 时永远不会被选中。 拆分首版保留 profiles(双保险设计)导致部署机实测 docker compose up -d 与 -f <file> up -d 均报 "no service selected",与"一键部署、换文件名换 模式"的核心诉求互斥,故彻底移除: - 三个 compose 文件的全部 services 去掉 profiles 块,模式切换唯一入口 = -f 文件名 - 历史 --profile full/moldinsight/inventory 写法随之失效(目标服务本就已 移出默认文件,兼容无意义);文档/构建脚本提示/STATUS 日志同步改为失效声明 - frontend/README 移除"仅起前端"用法(前端反代依赖 unified backend,推荐整栈) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
+1
-8
@@ -25,14 +25,7 @@ echo === 全部构建完成 ===
|
||||
echo.
|
||||
echo 启动 unified 默认栈(前端 + backend + celery):
|
||||
echo docker compose up -d
|
||||
echo # 或:docker compose --profile full up -d
|
||||
echo.
|
||||
echo 按文件名切换模式:
|
||||
echo 按文件名切换模式(旧 --profile 写法已失效):
|
||||
echo docker compose -f docker-compose.moldinsight.yml up -d
|
||||
echo docker compose -f docker-compose.inventory.yml up -d
|
||||
echo.
|
||||
echo profile 写法(兼容旧脚本):
|
||||
echo docker compose --profile unified up -d # backend + celery
|
||||
echo docker compose --profile frontend up -d # 仅前端
|
||||
echo docker compose --profile moldinsight up -d # moldinsight + celery
|
||||
echo docker compose --profile inventory up -d # 仅 inventory
|
||||
|
||||
+1
-8
@@ -27,14 +27,7 @@ echo "=== 全部构建完成 ==="
|
||||
echo ""
|
||||
echo "启动 unified 默认栈(前端 + backend + celery):"
|
||||
echo " docker compose up -d"
|
||||
echo " # 或等价:docker compose --profile full up -d"
|
||||
echo ""
|
||||
echo "按文件名切换模式:"
|
||||
echo "按文件名切换模式(旧 --profile 写法已失效):"
|
||||
echo " docker compose -f docker-compose.moldinsight.yml up -d"
|
||||
echo " docker compose -f docker-compose.inventory.yml up -d"
|
||||
echo ""
|
||||
echo "profile 写法(兼容旧脚本):"
|
||||
echo " docker compose --profile unified up -d # backend + celery"
|
||||
echo " docker compose --profile frontend up -d # 仅前端"
|
||||
echo " docker compose --profile moldinsight up -d # moldinsight + celery"
|
||||
echo " docker compose --profile inventory up -d # 仅 inventory"
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
#
|
||||
# 一键启动:
|
||||
# docker compose -f docker-compose.inventory.yml up -d
|
||||
# 等价命令(profile 双保险):
|
||||
# docker compose --profile inventory up -d
|
||||
#
|
||||
# 服务清单:仅 inventory 后端
|
||||
# 不含前端、不含 moldinsight、不含 Celery worker。
|
||||
#
|
||||
# 基础设施:仅依赖 PostgreSQL + Redis;不依赖 RustFS / MinIO 对象存储,
|
||||
# 不挂 uploads/html 命名卷(inventory 无文件分析链路)。
|
||||
# 注意:服务未声明 profiles(避免裸 up 报 "no service selected"),
|
||||
# 模式切换唯一入口是 -f 文件名。
|
||||
|
||||
# ---------------------------------------------------------------
|
||||
# 公共环境变量(inventory 子集:DB / Redis / 认证 / 启动参数)
|
||||
@@ -49,8 +49,6 @@ services:
|
||||
ADMIN_FULL_NAME: ${ADMIN_FULL_NAME:-系统管理员}
|
||||
AUTO_MIGRATE: ${AUTO_MIGRATE:-true}
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- inventory
|
||||
networks:
|
||||
- gemold_network
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
#
|
||||
# 一键启动:
|
||||
# docker compose -f docker-compose.moldinsight.yml up -d
|
||||
# 等价命令(profile 双保险):
|
||||
# docker compose --profile moldinsight up -d
|
||||
#
|
||||
# 服务清单:moldinsight(独立 API)+ moldinsight-celery(异步分析 worker)
|
||||
# 不含前端、不含 inventory。
|
||||
# 注意:服务未声明 profiles(避免裸 up 报 "no service selected"),
|
||||
# 模式切换唯一入口是 -f 文件名。
|
||||
#
|
||||
# 镜像说明:本文件里 moldinsight service 的 image 固定为 gemold-backend:latest,
|
||||
# 与 deploy/Dockerfile.celery 的 FROM gemold-backend:latest 对齐;只要 build.sh
|
||||
@@ -76,8 +76,6 @@ services:
|
||||
- uploads_data:/app/uploads
|
||||
- html_data:/app/html_output
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- moldinsight
|
||||
networks:
|
||||
- gemold_network
|
||||
|
||||
@@ -97,8 +95,6 @@ services:
|
||||
depends_on:
|
||||
- moldinsight
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- moldinsight
|
||||
networks:
|
||||
- gemold_network
|
||||
|
||||
|
||||
+6
-15
@@ -1,16 +1,16 @@
|
||||
# geMoldInsight — unified 模式(默认入口)
|
||||
#
|
||||
# 一键启动:
|
||||
# docker compose up -d # 推荐(默认走本文件)
|
||||
# 等价命令(保留 profile 双保险,AGENTS.md 兼容性需要):
|
||||
# docker compose --profile full up -d # frontend + backend + celery
|
||||
# docker compose --profile unified up -d # backend + celery(不带前端)
|
||||
# docker compose --profile frontend up -d # 只起前端
|
||||
# docker compose up -d
|
||||
#
|
||||
# 其他模式(换文件名):
|
||||
# 其他模式(换文件名即可,无需 --profile):
|
||||
# docker compose -f docker-compose.moldinsight.yml up -d
|
||||
# docker compose -f docker-compose.inventory.yml up -d
|
||||
#
|
||||
# 注意:服务均未声明 profiles(compose 规则:声明了 profiles 的服务在
|
||||
# 不带 --profile 时不会被选中,裸 up 会报 "no service selected"),
|
||||
# 旧 --profile 写法不再是模式开关,模式切换唯一入口是 -f 文件名。
|
||||
#
|
||||
# 服务清单:frontend + backend(unified 入口) + moldinsight-celery
|
||||
# 镜像构建顺序由 deploy/build.sh 保证(base → backend → frontend,celery 复用 backend)
|
||||
|
||||
@@ -65,9 +65,6 @@ services:
|
||||
depends_on:
|
||||
- backend
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- full
|
||||
- frontend
|
||||
networks:
|
||||
- gemold_network
|
||||
|
||||
@@ -95,9 +92,6 @@ services:
|
||||
- uploads_data:/app/uploads
|
||||
- html_data:/app/html_output
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- full
|
||||
- unified
|
||||
networks:
|
||||
- gemold_network
|
||||
|
||||
@@ -118,9 +112,6 @@ services:
|
||||
depends_on:
|
||||
- backend
|
||||
restart: unless-stopped
|
||||
profiles:
|
||||
- full
|
||||
- unified
|
||||
networks:
|
||||
- gemold_network
|
||||
|
||||
|
||||
+6
-12
@@ -20,13 +20,13 @@
|
||||
|
||||
项目按"模式 ↔ Compose 文件"一一对应的方式支持一键部署。换文件名即可换模式:
|
||||
|
||||
| 模式 | Compose 文件 | 一键命令 | 等价 `--profile` 命令 |
|
||||
|---|---|---|---|
|
||||
| **unified**(默认) | [docker-compose.yml](../docker-compose.yml) | `docker compose up -d` | `docker compose --profile full up -d` |
|
||||
| moldinsight-only | [docker-compose.moldinsight.yml](../docker-compose.moldinsight.yml) | `docker compose -f docker-compose.moldinsight.yml up -d` | `docker compose --profile moldinsight up -d` |
|
||||
| inventory-only | [docker-compose.inventory.yml](../docker-compose.inventory.yml) | `docker compose -f docker-compose.inventory.yml up -d` | `docker compose --profile inventory up -d` |
|
||||
| 模式 | Compose 文件 | 一键命令 |
|
||||
|---|---|---|
|
||||
| **unified**(默认) | [docker-compose.yml](../docker-compose.yml) | `docker compose up -d` |
|
||||
| moldinsight-only | [docker-compose.moldinsight.yml](../docker-compose.moldinsight.yml) | `docker compose -f docker-compose.moldinsight.yml up -d` |
|
||||
| inventory-only | [docker-compose.inventory.yml](../docker-compose.inventory.yml) | `docker compose -f docker-compose.inventory.yml up -d` |
|
||||
|
||||
> **双保险设计**:每个 service 的 `profiles:` 字段保留,因此 `--profile` 写法继续可用(兼容现有脚本与 CI);同时支持 `-f <file>` 直接按文件名选择。两种写法等价。
|
||||
> **模式切换唯一入口是 `-f` 文件名**。各 service 均未声明 `profiles`(compose 规则:声明了 profiles 的服务在不带 `--profile` 时不会被选中,裸 `up` 会报 `no service selected`);历史 `--profile full/moldinsight/inventory` 写法随本次拆分失效,请统一改用上表命令。
|
||||
|
||||
### 1.2 镜像构建
|
||||
|
||||
@@ -58,8 +58,6 @@ bash deploy/build.sh # 显式构建 base / backend / celery / frontend 4
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
# 或等价写法(保留 profile 双保险)
|
||||
docker compose --profile full up -d
|
||||
```
|
||||
|
||||
包含服务:`frontend` + `backend`(unified 入口)+ `moldinsight-celery`。
|
||||
@@ -78,8 +76,6 @@ docker compose --profile full up -d
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.moldinsight.yml up -d
|
||||
# 或等价写法
|
||||
docker compose --profile moldinsight up -d
|
||||
```
|
||||
|
||||
包含服务:`moldinsight`(独立 API)+ `moldinsight-celery`(异步 worker)。
|
||||
@@ -98,8 +94,6 @@ docker compose --profile moldinsight up -d
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.inventory.yml up -d
|
||||
# 或等价写法
|
||||
docker compose --profile inventory up -d
|
||||
```
|
||||
|
||||
包含服务:仅 `inventory`。不挂任何命名卷(inventory 无文件分析链路),不依赖 RustFS / MinIO。
|
||||
|
||||
+2
-6
@@ -83,20 +83,16 @@ npm run gen:api # 从根目录 openapi.json 重新生成 src/types/api.ts(
|
||||
```bash
|
||||
# unified(默认;frontend + backend + moldinsight-celery)
|
||||
docker compose up -d
|
||||
# 或(profile 双保险)
|
||||
docker compose --profile full up -d
|
||||
|
||||
# moldinsight-only(moldinsight + moldinsight-celery)
|
||||
docker compose -f docker-compose.moldinsight.yml up -d
|
||||
# 或
|
||||
docker compose --profile moldinsight up -d
|
||||
|
||||
# inventory-only(仅 inventory)
|
||||
docker compose -f docker-compose.inventory.yml up -d
|
||||
# 或
|
||||
docker compose --profile inventory up -d
|
||||
```
|
||||
|
||||
> 旧 `--profile` 写法已失效(服务不再声明 profiles);模式切换唯一入口是 `-f` 文件名。
|
||||
|
||||
- 镜像构建:`bash deploy/build.sh`(base → backend → celery → frontend 4 个 tag);首次部署或更新代码后必须先 build 再 `up`。
|
||||
- PostgreSQL / Redis / RustFS 通常**复用服务器已有服务**,不由项目 compose 自带;容器只注入连接配置。
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
> 维护规则:每完整完成一个需求,**倒序在本文顶部加一条**(日期 + 主题 + 关键事实);其余主文档(架构 / 规划 / 技术债 / 部署)维护各自的"当前有效说法",本文只记录"什么时候做到了哪一步"。维护规则出处见根目录 [AGENTS.md](../AGENTS.md)。
|
||||
> 早期条目(2026-09-17 之前)已精简为锚点,完整流水见 [archive/2026-09_governance_batches.md](archive/2026-09_governance_batches.md) 与 [archive/2026-09_status_history.md](archive/2026-09_status_history.md)。
|
||||
|
||||
> 2026-09-24(**Compose 按部署模式拆分为三个一键文件 + 文档全量同步**:① 单文件 profile 编排拆为"模式 ↔ 文件名"一一对应的三文件——[docker-compose.yml](../docker-compose.yml)(unified 默认入口:frontend + backend + moldinsight-celery,`docker compose up -d` 即起)+ [docker-compose.moldinsight.yml](../docker-compose.moldinsight.yml)(moldinsight-only:独立 API + celery)+ [docker-compose.inventory.yml](../docker-compose.inventory.yml)(inventory-only:仅 inventory,不声明任何命名卷避免空卷);② **所有 service 的 `profiles:` 字段保留(双保险)**,`--profile full/moldinsight/inventory` 旧命令继续可用;③ **顺手修复两个既有部署隐患**——moldinsight-only 场景 celery 的 `depends_on` 悬空(原指向被 profile 过滤掉的 `backend`,现各文件内分别指向 `backend` / `moldinsight`),以及 `gemold-moldinsight:latest` 与 `gemold-backend:latest` 双 tag 漂移(moldinsight service 的 image 统一为 `gemold-backend:latest`,与 [Dockerfile.celery](../deploy/Dockerfile.celery) 的 FROM 对齐,干净环境单跑 moldinsight-only 不再构建失败);④ `gemold_network` / `uploads_data` / `html_data` 加 `name:` 固定命名,跨文件 / 跨模式可复用;每文件内部以 YAML anchor(`x-base-env`)收敛 35+ 行重复 environment,`SECRET_KEY` / `ADMIN_PASSWORD` 的 `${VAR:?}` fail-fast 校验保留;⑤ 文档同步 11 文件:[DEPLOYMENT.md](DEPLOYMENT.md) §1.1 新增一键部署总表 + §2 三模式各附文件名与等价命令,[deployment/LINUX_SETUP.md](deployment/LINUX_SETUP.md) §6/§11 重写,[README.md](../README.md) 快速开始与 Compose 入口、[OPERATIONS.md](OPERATIONS.md) §4、[deploy/build.sh](../deploy/build.sh) / [.bat](../deploy/build.bat) 末尾提示、PORT_CONFIG / DEPLOY_PORT / STORAGE_SETUP / frontend/README 链接全部对齐(`AGENTS.md` §4.1 部署方式→DEPLOYMENT 同步规则满足)。**验证**:三文件 YAML 解析 + 结构静态校验通过(services / profiles / depends_on / 卷声明 / anchor 合并 / 网络命名);5 个 service 的 environment 键与拆分前逐一比对(YAML 展开合并键后 39/39、34/34、39/39、34/34、20/20)零丢失。**遗留**:本机无 docker,`docker compose -f <file> config` 干跑与真实 up 待部署机执行。)
|
||||
> 2026-09-24(**Compose 按部署模式拆分为三个一键文件 + 文档全量同步**:① 单文件 profile 编排拆为"模式 ↔ 文件名"一一对应的三文件——[docker-compose.yml](../docker-compose.yml)(unified 默认入口:frontend + backend + moldinsight-celery,`docker compose up -d` 即起)+ [docker-compose.moldinsight.yml](../docker-compose.moldinsight.yml)(moldinsight-only:独立 API + celery)+ [docker-compose.inventory.yml](../docker-compose.inventory.yml)(inventory-only:仅 inventory,不声明任何命名卷避免空卷);② **服务不再声明 `profiles`**——compose 规则是声明了 profiles 的服务在裸 `up` 下不会被选中(拆分首版保留 profiles 导致裸 `up` / 裸 `-f` 均报 `no service selected`,部署机实测暴露后移除),模式切换唯一入口是 `-f` 文件名,历史 `--profile full/moldinsight/inventory` 写法随拆分失效(其目标服务本就已移出默认文件,兼容无意义);③ **顺手修复两个既有部署隐患**——moldinsight-only 场景 celery 的 `depends_on` 悬空(原指向被 profile 过滤掉的 `backend`,现各文件内分别指向 `backend` / `moldinsight`),以及 `gemold-moldinsight:latest` 与 `gemold-backend:latest` 双 tag 漂移(moldinsight service 的 image 统一为 `gemold-backend:latest`,与 [Dockerfile.celery](../deploy/Dockerfile.celery) 的 FROM 对齐,干净环境单跑 moldinsight-only 不再构建失败);④ `gemold_network` / `uploads_data` / `html_data` 加 `name:` 固定命名,跨文件 / 跨模式可复用;每文件内部以 YAML anchor(`x-base-env`)收敛 35+ 行重复 environment,`SECRET_KEY` / `ADMIN_PASSWORD` 的 `${VAR:?}` fail-fast 校验保留;⑤ 文档同步 11 文件:[DEPLOYMENT.md](DEPLOYMENT.md) §1.1 新增一键部署总表 + §2 三模式各附文件名与一键命令,[deployment/LINUX_SETUP.md](deployment/LINUX_SETUP.md) §6/§11 重写,[README.md](../README.md) 快速开始与 Compose 入口、[OPERATIONS.md](OPERATIONS.md) §4、[deploy/build.sh](../deploy/build.sh) / [.bat](../deploy/build.bat) 末尾提示、PORT_CONFIG / DEPLOY_PORT / STORAGE_SETUP / frontend/README 链接全部对齐(`AGENTS.md` §4.1 部署方式→DEPLOYMENT 同步规则满足)。**验证**:三文件 YAML 解析 + 结构静态校验通过(services / depends_on / 卷声明 / anchor 合并 / 网络命名 / 无 profiles 残留);5 个 service 的 environment 键与拆分前逐一比对(YAML 展开合并键后 39/39、34/34、39/39、34/34、20/20)零丢失。**遗留**:`docker compose -f <file> config` 干跑与真实 up 待部署机执行。)
|
||||
>
|
||||
> 2026-09-24(**D17 Human-in-Loop 老师傅经验反馈批 3 上线(前端按钮 + Dialog + 经验角标)——闭环可视**:① [ResultView.vue:35-47](frontend/src/modules/moldinsight/ResultView.vue#L35-L47) 方案卡片 summary-header 加 `t-tag theme="success" variant="light"` 经验角标("📚 历史经验 N 条"),从 `hintsByAxis[currentAxisHint]` 读取,按 scheme_axis 索引,无 hints 时不渲染;② [ResultView.vue:131-138](frontend/src/modules/moldinsight/ResultView.vue#L131-L138) `export-buttons-bar` 加 `👍 老师傅反馈` 按钮(`v-if="canGiveFeedback"` 角色门控:admin 或 process_engineer);③ 新建 [components/HumanFeedbackDialog.vue](frontend/src/modules/moldinsight/components/HumanFeedbackDialog.vue):t-dialog + t-form + t-radio-group 三选一(采纳 / 建议调整 / 拒绝)+ t-textarea 原因 + 调整建议(仅 adjust 模式显隐);提交走 `moldinsightApi.submitExperienceFeedback`,成功后 emit `submitted` 让父组件重拉 hints 刷新角标;④ [shared/api-client.ts:407-444](frontend/src/shared/api-client.ts#L407-L444) `moldinsightApi` 新增 `getExperienceHints` / `submitExperienceFeedback` 两个方法(生成类型由 openapi-typescript 自动产出);⑤ [ResultView.vue](frontend/src/modules/moldinsight/ResultView.vue) `onMounted` 调 `loadExperienceHints` 拉一次 + 反馈提交后 `onFeedbackSubmitted` 再拉一次(写入即消费前端可见);`canGiveFeedback` 走 `is_superuser || roles 含 process_engineer` 表达式(项目硬规则"前端不要破坏 ResultView.vue 视觉一致性":按钮与既有 6 个 t-button 同一 `export-buttons-bar`,theme/size 一致;角标 theme="success" variant="light" 与既有 t-tag theme="primary" / "warning" 同款)。**接口变更三件套随批完成**:openapi.json 重导出(2 个新 path,含 ExperienceFeedbackCreate / ExperienceHintItem / ExperienceHintsResponse 三个新 schema)→ `npm run gen:api` 再生 types/api.ts → `npm run build` 通过。**后端基线**:**192 passed, 13 skipped**(批 3 不改后端);**前端构建**:vue-tsc + vite 通过,ResultView 包大小 37.18 kB / 11.91 kB gzip。**D17 闭环端到端可用**:admin / process_engineer 在 ResultView 点"👍 老师傅反馈" → Dialog 选"采纳"+ 写原因 → 提交 → 角标即时刷新(重拉 hints);下次同指纹 STP 分析,`PartingCandidateGenerator` 候选方向加成 + `PartingSchemeScorer` total_score 加成 + method 标签升级 `human_experience_primary`。**下一步**:批 4(衰减机制完善 + DFM 规则库独立模块化 + 经验冲突仲裁 UI)按需排期。)
|
||||
|
||||
|
||||
@@ -408,13 +408,7 @@ curl http://127.0.0.1:8000/health
|
||||
| moldinsight-only | [docker-compose.moldinsight.yml](../../docker-compose.moldinsight.yml) | `docker compose -f docker-compose.moldinsight.yml up -d` |
|
||||
| inventory-only | [docker-compose.inventory.yml](../../docker-compose.inventory.yml) | `docker compose -f docker-compose.inventory.yml up -d` |
|
||||
|
||||
每个 service 的 `profiles:` 字段仍在老 `--profile` 命令下生效(双保险):
|
||||
|
||||
| 文件 | 等价 `--profile` 命令 |
|
||||
|---|---|
|
||||
| [docker-compose.yml](../../docker-compose.yml) | `docker compose --profile full up -d` |
|
||||
| [docker-compose.moldinsight.yml](../../docker-compose.moldinsight.yml) | `docker compose --profile moldinsight up -d` |
|
||||
| [docker-compose.inventory.yml](../../docker-compose.inventory.yml) | `docker compose --profile inventory up -d` |
|
||||
> 注意:各 service 均未声明 `profiles`,旧 `--profile full/moldinsight/inventory` 写法不再是模式开关(声明了 profiles 的服务在裸 `up` 下不会被选中,会报 `no service selected`);模式切换统一用上表 `-f` 命令。
|
||||
|
||||
不同模式分别包含的服务:
|
||||
|
||||
|
||||
+3
-7
@@ -51,18 +51,14 @@ npm run build
|
||||
- [deploy/Dockerfile.frontend](../deploy/Dockerfile.frontend)
|
||||
- [deploy/nginx/frontend.conf](../deploy/nginx/frontend.conf)
|
||||
|
||||
以及根目录 [docker-compose.yml](../docker-compose.yml)(unified 模式)中的 `frontend` 服务:
|
||||
以及根目录 [docker-compose.yml](../docker-compose.yml)(unified 模式)中的 `frontend` 服务。完整系统一键启动:
|
||||
|
||||
```bash
|
||||
# 仅起前端(假设后端已在 unified / moldinsight 模式下独立运行)
|
||||
docker compose --profile frontend up -d
|
||||
|
||||
# 完整系统(默认 unified)
|
||||
docker compose up -d
|
||||
# 或
|
||||
docker compose --profile full up -d
|
||||
```
|
||||
|
||||
> 旧 `--profile frontend` 仅起前端的写法已随 compose 拆分移除;前端同域反代依赖 unified backend,推荐整栈启动。前后端分离开发时,前端本地 `npm run dev`、后端直跑 `uvicorn`(见 [LINUX_SETUP.md](../docs/deployment/LINUX_SETUP.md) §6)。
|
||||
|
||||
---
|
||||
|
||||
## 说明
|
||||
|
||||
Reference in New Issue
Block a user