Skip to content

Latest commit

 

History

302 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Production Platform

生产制造平台仓库,包含统一的 Web 操作界面、FastAPI 服务和产线硬件工具。项目使用 uv 管理 Python workspace,使用 Vue 3 + Vite 构建前端,并通过 systemd + Nginx 部署到服务器。

项目组成

production-scripts/
├── apps/
│   ├── backend/              # FastAPI API、业务服务、数据持久化和部署配置
│   ├── web-ui/               # Vue 3 管理界面
│   └── hardwares/            # 产线硬件 CLI、驱动、诊断和打包工具
├── deploy/                   # 本机服务器和远程服务器部署脚本
├── csv-samples/              # 测试与分析示例数据
├── Makefile                  # 开发、测试、构建和部署统一入口
├── pyproject.toml            # uv workspace 配置
└── uv.lock                   # Python 依赖锁文件

功能模块

Web 平台

  • Dashboard / Downloads:项目版本、文件资源、消息和下载管理。
  • Productions Testing:Opentrons 设备发现、设备信息与控制、终端测试、Protocol 房间监控、运行状态和测试数据管理。
  • Flex 远程能力:ODD 远程屏幕与交互、Protocol 仿真,以及设备卡片上的 Flex 摄像头 HLS 直播、图片切换和放大预览。
  • 数据管理:测试数据上传记录、数据查询、移液器与机器人装配质量分析、数据链接。
  • Productions Versions:产品工作流、SOP 与 Duro 数据对比、版本历史、Duro API Key 状态与更新。
  • Production Agent:生产知识、协议分析、附件、计划任务和工具调用。
  • 平台能力:中英文界面、统一登录、角色权限、消息中心、服务器 / Google Drive / Slack 状态。

后端服务

  • FastAPI 统一 API,覆盖认证、机器人、测试、上传、数据分析、版本、SOP、Duro、工作流和 Agent。
  • Opentrons HTTP API 客户端、批量设备操作、日志 / 文件 / Protocol 管理。
  • JWT Access Token 默认 5 分钟,登录会话默认 360 小时(15 天)。
  • 业务文档默认使用 MongoDB ProductionsMessage;显式开启仿真后才切换到 apps/backend/db-storage/simulating/ 下的 SQLite。
  • 认证存储独立配置:本地开发默认使用 apps/backend/db-storage/auth/auth.sqlite3,服务器默认使用 MongoDB。
  • 设备扫描独立配置:本地开发默认扫描真实网络设备,只有 PRODUCTION_PLATFORM_DEVICE_SCAN_MODE=simulated 或仿真开关打开时才使用固定测试设备。
  • Google Drive、Slack、Duro API Key 和 LLM 等外部服务集成。

硬件工具

  • 生产硬件交互 CLI,以及串口、SSH、Socket、声音和 Opentrons 驱动。
  • 移液器、模块、水平校准、称重和高压等测试工具。
  • PyInstaller 可执行文件构建。

安装与运行

1. 准备环境

  • Git、Make 和 lsof
  • Python 3.10。硬件应用要求 Python >=3.10,<3.11,因此建议整个项目统一使用 3.10。
  • uv
  • Node.js 20 LTS 或更高版本,以及 npm。
  • MongoDB 6.0 或更高版本。默认本地开发配置仍需要 MongoDB 保存业务数据;仓库提供 Docker 启动命令,只有明确启用仿真模式后才可以完全离线运行。

确认主要工具已安装:

python3 --version
uv --version
node --version
npm --version
make --version

2. 获取源码并安装依赖

git clone git@github.com:Opentrons/production-scripts.git
cd production-scripts

# 安装后端和硬件 Python workspace 依赖
make sync

# 严格按照 package-lock.json 安装前端依赖
make web-install

3. 配置后端

复制本地配置文件,并生成至少 32 个字符的 JWT Secret:

cp apps/backend/.env.example apps/backend/.env
openssl rand -hex 32

openssl 输出写入 apps/backend/.env,并确保本地 HTTP 开发配置至少包含以下内容:

PRODUCTION_PLATFORM_RUN_ENV=dev
PRODUCTION_PLATFORM_AUTH_STORAGE=sqlite
PRODUCTION_PLATFORM_DEVICE_SCAN_MODE=real
PRODUCTION_PLATFORM_AUTH_JWT_SECRET=<openssl rand -hex 32 的输出>
PRODUCTION_PLATFORM_AUTH_ACCESS_TOKEN_MINUTES=5
PRODUCTION_PLATFORM_AUTH_REFRESH_TOKEN_HOURS=360
PRODUCTION_PLATFORM_AUTH_COOKIE_SECURE=false
PRODUCTION_PLATFORM_MONGO_URI=mongodb://127.0.0.1:27017

apps/backend/.env 已被 Git 忽略,不得提交。Duro、Google Drive、Slack 和 LLM 等外部服务的配置可以暂时留空,对应功能会显示为未连接。

4. 准备数据存储和管理员

本地默认配置的职责是:认证走 SQLite,业务数据走 MongoDB,设备管理执行真实扫描。因此先启动 MongoDB。已安装 Docker 时直接使用仓库命令:

make mongo-dev

该容器只绑定 127.0.0.1:27017,数据库保存在 Docker volume production-platform-mongodb。停止容器但保留数据使用 make mongo-stop

使用自行安装的 MongoDB 时,确认 mongodb://127.0.0.1:27017 可访问:

nc -vz 127.0.0.1 27017

如果 MongoDB 在另一台内网服务器,必须在 .env 中填写可达的 URI,例如 PRODUCTION_PLATFORM_MONGO_URI=mongodb://100.90.10.25:27017。不要依赖默认地址;默认地址只适用于本机 MongoDB。

项目会使用 ProductionsMessage 数据库。认证 SQLite 文件固定在 apps/backend/db-storage/auth/auth.sqlite3,与业务仿真开关无关。然后创建首个管理员账号:

uv run --package production-backend \
  python apps/backend/scripts/create_auth_user.py \
  --username admin --display-name "Administrator" --role admin

命令会交互式要求输入并确认至少 12 个字符的密码。

如果只是临时体验界面、当前没有 MongoDB,可以明确启用离线仿真模式。仿真模式会同时使用 SQLite 业务数据和固定测试设备;它不是本地真实设备开发模式:

mkdir -p apps/backend/db-storage
printf '{"simulating": true}\n' > apps/backend/db-storage/mode.json

uv run --package production-backend \
  python apps/backend/scripts/create_auth_user.py \
  --username admin --display-name "Administrator" --role admin

恢复到本地真实设备开发配置:

printf '{"simulating": false}\n' > apps/backend/db-storage/mode.json
# .env 保持 PRODUCTION_PLATFORM_AUTH_STORAGE=sqlite
# .env 保持 PRODUCTION_PLATFORM_DEVICE_SCAN_MODE=real

三个运行开关的关系如下:

配置 作用 本地开发默认值
PRODUCTION_PLATFORM_AUTH_STORAGE 登录用户和会话存储位置 sqlite
apps/backend/db-storage/mode.json 业务数据是否从 MongoDB 切到仿真 SQLite false
PRODUCTION_PLATFORM_DEVICE_SCAN_MODE 设备扫描真实网络或固定测试设备 real

因此,认证使用 SQLite 并不会让工作流绕过 MongoDB。MongoDB 不可达时,后端会进入本地降级模式:登录和真实设备扫描仍可用,MongoDB 工作流、健康持久化和 Agent 调度会暂停。启动 MongoDB 后重启后端即可恢复完整功能,业务数据不会静默改写到 SQLite。

5. 启动并访问

# 同时启动 FastAPI 和 Vue 开发服务器
make dev
  • Web 界面:http://127.0.0.1:8091
  • 后端 API:http://127.0.0.1:8090
  • OpenAPI 文档:http://127.0.0.1:8090/docs
  • 健康检查:make backend-health

make dev 会先停止占用 8090 和 8091 端口的进程。使用 Ctrl+C 可以停止两个开发服务;也可以覆盖默认端口:

make dev API_PORT=8092 WEB_PORT=8093

需要单独调试时,可以在不同终端分别运行:

make backend-dev
make web-dev

6. 测试与构建

make backend-test
make hardware-test
make web-build
make build

运行 make help 可以查看全部 Make 目标。

服务器部署

远程一键部署

默认服务器为 root@192.168.6.55,默认安装目录为 /opt/production-platform。部署命令会先构建前端,然后通过 SSH / rsync 同步代码和静态资源,安装 Duro API Key,重启 FastAPI systemd 服务,更新 Nginx,并执行健康检查。

部署前需要:

  • 本机已安装 sshrsyncnpmuv
  • 远程服务器已安装 systemd、Nginx 和 uv,并可通过 SSH 登录。
  • TLS 证书和私钥已存在于远程服务器。
  • 本机存在 apps/backend/auth-files/duro-api-key.txt,或通过 DURO_API_KEY_PATH 指定。
# 使用 Makefile 默认参数部署
make deploy-remote

# 指定服务器、域名和远程证书
make deploy-remote \
  REMOTE_HOST=192.168.6.55 \
  REMOTE_USER=root \
  REMOTE_ROOT=/opt/production-platform \
  SERVER_NAME=productions.example.com \
  REMOTE_SSL_CERTIFICATE=/etc/ssl/production-platform/production-platform.crt \
  REMOTE_SSL_CERTIFICATE_KEY=/etc/ssl/production-platform/production-platform.key

常用远程参数:

Make 参数 默认值 用途
REMOTE_HOST 192.168.6.55 服务器地址
REMOTE_USER root SSH 用户
REMOTE_SSH_PORT 22 SSH 端口
REMOTE_ROOT /opt/production-platform 远程安装目录
REMOTE_UV_BIN /root/.local/bin/uv 远程 uv 路径
SERVER_NAME _ Nginx 域名或服务器名
DURO_API_KEY_PATH apps/backend/auth-files/duro-api-key.txt 本机 Duro Key 文件

在当前服务器部署

在目标服务器仓库目录内可以分别部署后端和前端:

# 安装依赖并创建 / 重启 production-backend.service
make deploy-backend API_PORT=8090

# 构建前端并配置 Nginx HTTPS 站点
make deploy-web \
  API_PORT=8090 \
  SERVER_NAME=productions.example.com \
  SSL_CERTIFICATE=/etc/ssl/production-platform/production-platform.crt \
  SSL_CERTIFICATE_KEY=/etc/ssl/production-platform/production-platform.key

首次部署后创建管理员:

sudo "$(command -v uv)" run --package production-backend \
  python apps/backend/scripts/create_auth_user.py --username admin --role admin

服务器 systemd 服务会显式设置 PRODUCTION_PLATFORM_RUN_ENV=serverPRODUCTION_PLATFORM_AUTH_STORAGE=mongodbPRODUCTION_PLATFORM_DEVICE_SCAN_MODE=realmake deploy-remote 不会同步本机 apps/backend/.env;Mongo URI 等服务器专属变量应写在远端 /etc/production-platform.env,该文件会被保留。认证密钥保存在该文件中,部署脚本会生成缺失的 JWT Secret,并将登录会话设置为 360 小时(15 天)。运行数据、数据库、本地 .env 和认证文件不会被远程同步删除。

数据持久化

  • 认证:由 PRODUCTION_PLATFORM_AUTH_STORAGE 独立控制。本地默认写入 apps/backend/db-storage/auth/auth.sqlite3,生产默认写入 MongoDB ProductionsMessage
  • 业务数据:由 apps/backend/db-storage/mode.jsonsimulating 控制。false 写入 MongoDB,true 写入 apps/backend/db-storage/simulating/ 下的 SQLite。
  • 辅料主数据:本地开发或仿真模式使用 supplementary_materials.sqlite3;生产 server 模式使用 MongoDB ProductionsMessage.supplementary_materials。可用 apps/backend/scripts/migrate_supplies_sqlite_to_mongodb.py 从 SQLite 迁移。
  • 设备管理:由 PRODUCTION_PLATFORM_DEVICE_SCAN_MODE 控制扫描来源。real 扫描网络设备,simulated 使用测试设备;旧的仿真开关打开时也会兼容使用测试设备。
  • 顶部健康状态:开发环境的 Server / Google Drive / Slack 健康缓存写入本地 SQLite,避免业务 Mongo 不可达时状态栏显示未知;服务器环境写入 MongoDB。
  • 本地缓存:Duro 和 SOP 缓存保存在 apps/backend/db-storage/business/,部署时保留。
  • 敏感文件.env、JWT Secret、Duro Key、Google / Slack 凭据、数据库和运行数据均已加入 .gitignore,不得提交。

旧版生产 SQLite 数据迁移到 MongoDB:

# 先检查迁移内容
uv run --package production-backend \
  python apps/backend/scripts/migrate_sqlite_to_mongodb.py --dry-run

# 确认后执行迁移
uv run --package production-backend \
  python apps/backend/scripts/migrate_sqlite_to_mongodb.py

认证与 HTTPS 的完整说明见 apps/backend/docs/platform-authentication.md

About

This repository is create for SZ team storage some production scripts

Resources

Code of conduct

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages