Files
AIclinicalresearch/docs/05-部署文档/13-Node.js后端-镜像修复记录.md
HaHafeng 66255368b7 feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
2026-01-16 13:42:10 +08:00

5.0 KiB
Raw Blame History

Node.js 后端 - 镜像修复记录

修复时间2025-12-24 问题原因Docker镜像中缺少config目录 解决方案重新构建镜像v1.1


🐛 问题描述

错误信息

Error: ENOENT: no such file or directory, open '/app/config/agents.yaml'

根本原因

  • 应用启动时需要读取 /app/config/agents.yaml 配置文件
  • Dockerfile v1.0 中只复制了 distprisma 目录
  • 遗漏了 config 目录

解决方案

1. 修改Dockerfile

修改位置1构建阶段第32行

# 5. 复制本地已编译好的 dist 文件夹跳过TypeScript编译
COPY dist ./dist

# 6. 复制配置文件agents.yaml等✨ 新增
COPY config ./config

修改位置2运行阶段第61行

# 从构建阶段复制产物
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
COPY --from=builder --chown=nodejs:nodejs /app/package*.json ./
COPY --from=builder --chown=nodejs:nodejs /app/prisma ./prisma
COPY --from=builder --chown=nodejs:nodejs /app/config ./config  ✨ 新增

2. 重新构建镜像

构建命令

docker build -t crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1 .

构建结果

  • 构建成功
  • 耗时59.4秒
  • 镜像大小:~186MB压缩后

3. 推送到ACR

推送命令

docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1

推送结果

  • 推送成功
  • Digest: sha256:f309cec92d2ebb7fd40c38916980d7fcc2d589e61d10a8875f2976c267eac890

📦 新版本镜像信息

版本对比

项目 v1.0(旧版本) v1.1(新版本)
Dockerfile修改 缺少config 包含config
镜像大小 838MB 838MB基本一致
构建时间 ~5分钟 ~1分钟缓存优化
状态 启动失败 待验证

新版本镜像地址

公网地址(用于本地拉取):

crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1

VPC地址SAE部署使用

crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1

🎯 下一步操作

步骤1登录SAE控制台

访问:https://sae.console.aliyun.com/

步骤2更新应用镜像版本

  1. 找到应用:nodejs-backend-test
  2. 点击【配置管理】→【部署配置】
  3. 找到"镜像设置"部分
  4. 修改镜像版本:
    • 从:backend-service:v1.0
    • 改为:backend-service:v1.1

步骤3保存并重新部署

  1. 点击【保存】
  2. 点击【重新部署】
  3. 等待3-5分钟
  4. 查看实时日志

预期结果

成功的日志输出

============================================================
🚀 AI临床研究平台 - 后端服务器启动成功!
============================================================
📍 服务地址: http://0.0.0.0:3001
🔍 健康检查: http://0.0.0.0:3001/health
📡 API入口: http://0.0.0.0:3001/api/v1
🌍 运行环境: production
============================================================

[INFO] Server listening at http://0.0.0.0:3001
[INFO] Config loaded: /app/config/agents.yaml ✅
[INFO] Database connected successfully
[INFO] Health check endpoint available

关键验证点

  • 应用状态:运行中(绿色)
  • 健康检查:通过(绿色)
  • 日志中出现:Config loaded: /app/config/agents.yaml
  • 无ENOENT错误

📝 修复总结

问题根源Dockerfile不完整遗漏配置文件 修复方式添加2行COPY指令 影响范围:仅需重新构建和部署,无需修改代码 修复时间约5分钟构建1分钟 + 推送1分钟 + 部署3分钟


🔍 预防措施

1. Dockerfile检查清单

创建完整的文件复制清单:

✅ COPY package*.json ./
✅ COPY prisma ./prisma/
✅ COPY dist ./dist/
✅ COPY config ./config/  # 不要遗漏!
❓ COPY public ./public/  # 如果有静态文件
❓ COPY scripts ./scripts/ # 如果有启动脚本

2. 本地测试流程

在推送镜像前,先在本地测试:

# 1. 构建镜像
docker build -t backend-test:local .

# 2. 本地运行测试
docker run -p 3001:3001 \
  -e DATABASE_URL="..." \
  -e JWT_SECRET="..." \
  backend-test:local

# 3. 访问健康检查
curl http://localhost:3001/health

# 4. 确认无错误后再推送

3. CI/CD集成

建议在GitHub Actions中添加

- name: Build Docker Image
  run: docker build -t backend:${{ github.sha }} .

- name: Test Docker Image
  run: |
    docker run -d -p 3001:3001 backend:${{ github.sha }}
    sleep 10
    curl http://localhost:3001/health

文档创建时间2025-12-24
维护人员:运维团队