aps-agent/docs/development/web-deployment.md

3.1 KiB
Raw Permalink Blame History

Web 端部署与持久化(app/server/data)

存储口径

形态 数据位置 说明
桌面端 %USERPROFILE%\.aps(Linux/macOS ~/.aps) 不变,仍读写本机文件
Web 端 容器内 /app/server/data(PVC 持久卷) 项目/会话/消息(SQLite master.db)、世界状态、知识库、导出等全部落此目录

路径解析优先级:APS_HOME >(desktop→~/.aps;web→APS_DATA_DIR 或仓库 server/data)。 镜像已内置 APS_MODE=web、APS_DATA_DIR=/app/server/data(见 Dockerfile)。

常见故障:创建项目失败(写入 500)

根因:K8s 挂载的 PVC 目录默认属 root:root,而容器以非 root 用户 aps(uid/gid 10001)运行,数据目录不可写,所有写入(创建项目、排产、导入)都会失败。

修复:Deployment 必须配置 securityContext(完整清单见 packaging/k8s/deployment.yaml):

spec:
  template:
    spec:
      securityContext:
        runAsUser: 10001
        runAsGroup: 10001
        fsGroup: 10001
        fsGroupChangePolicy: OnRootMismatch

自查:GET /api/health 返回 storage 字段(dataDir / writable / remedy); writable=false 时服务启动日志会输出 [APS][FATAL] 数据目录不可写 …。

Web 端演示数据

镜像内置 APS_WEB_DEMO_SEED=1:某租户首次打开工作区且没有任何项目时, 自动播种一套完整演示项目「演示项目 · 智能控制器装配排产」:

  • 固定产线层:2 车间 / 3 产线 / 13 工位 / 5 工序,3 款产品 BOM + 工艺路线 + 换型矩阵
  • 柔性能力池:4 类共线产品、7 个能力池、可调配压接机与模具
  • 业务单据:7 张销售订单(含 VIP 急单)、10 张柔性订单、3 张预测订单、30 天班次日历
  • 一段引导式演示对话 + 2 条示例文件记录

特性:

  • 按租户隔离:世界数据在 server/data/tenants/<租户>/projects/<项目>/world.json
  • 幂等:播种后落 demo-seeded.ok 标记;用户删光演示项目也不会回填
  • 可关闭:环境变量 APS_WEB_DEMO_SEED=0;桌面端与测试默认不播种

手动补播(如线上已有租户想要演示数据):

# 容器内执行
python scripts/seed_web_demo.py --tenant <JMS租户uuid> --user-id 1001
# 已有项目时强制再播一套
python scripts/seed_web_demo.py --tenant <JMS租户uuid> --force

项目文件上传

侧栏「文件」区支持两种记录:

  • 上传:POST /api/projects/{id}/files/upload(multipart,多文件;单文件 ≤50MB、单次 ≤20 个)。 字节持久化在数据目录 tenants/<租户>/projects/<项目>/uploads/(platform 租户为 projects/<项目>/uploads/),随 PVC / 本机 ~/.aps 持久化;同时登记项目文件记录。
  • 登记:仅元数据记录(无字节),下载返回 404。

已上传文件在侧栏可点击下载(GET /api/project-files/{fileId}/download); 删除文件记录会联动清理磁盘字节。viewer 角色上传返回 403。