# 打包部署 > 本文档同时面向 **AI 助手**(约束和规则)和 **运维人员**(操作步骤)。 --- ## 一、AI 约束(必读) ### 1.1 打包环境 - **构建机**:macOS(Go 交叉编译到 Windows) - **目标平台**:Windows amd64 ### 1.2 构建命令 ```bash # 前端构建 + 交叉编译 + 复制资源文件,输出到 bin/ bash build-windows.sh ``` ### 1.3 编译参数硬约束 | 参数 | 值 | 原因 | |------|-----|------| | `CGO_ENABLED` | `0` | 纯 Go 项目,禁用 CGO 才能跨平台编译 | | `GOOS` | `windows` | 目标平台 | | `GOARCH` | `amd64` | 64 位 | | `-ldflags` | `-s -w -H=windowsgui` | 去除调试信息 + 隐藏命令行窗口 | | `-trimpath` | 必须 | 去除源码路径信息 | ### 1.4 构建前置条件 1. **ent/ 代码已生成**:`ent/` 目录在 `.gitignore` 中,不提交 git。若 `ent/` 不存在,需先执行 `go generate ./schema/...` 2. **前端已构建**:脚本会自动执行 `npm run build`,但需确保 `node_modules` 已安装 3. **Go 版本**:`go.mod` 中 `go 1.25.0` ### 1.5 数据库工具编译规则 - `schema/tools/migrate.go` — 编译为 `migrate.exe`,必须同时编译 `app.go`:`go build migrate.go app.go` - `schema/tools/data.go` — 编译为 `data.exe`,必须同时编译 `app.go`:`go build data.go app.go` - 两个文件都有 `//go:build ignore`,不可单独编译,必须显式指定文件列表 - `app.go` 提供 `getAppDir()` 和 `loadDBConfig()` 公共函数 ### 1.6 输出目录 - 输出到 `bin/`(与 `build.bat` 保持一致,`.gitignore` 中已忽略) - 目录结构: ``` bin/ ├── spherical.exe # 主程序(GUI 模式,隐藏控制台) ├── migrate.exe # 数据库表结构迁移 ├── data.exe # 数据初始化(signals/seed/admin) ├── app.ico # 托盘图标 ├── etc/ │ └── spherical-api.yaml # 配置文件 └── doc/ ├── signals.sql # PLC 信号定义(146 条) ├── data.sql # 设备/配方/产品种子数据 ├── reset.sql # 生产数据重置脚本 ├── engine_schema.sql # 新引擎表结构(recipe_step_resource 等) └── new_recipe.sql # 新引擎配方种子数据 ``` ### 1.7 禁止事项 - 禁止修改 `build-windows.sh` 中的 `CGO_ENABLED=0`、`GOOS=windows`、`-H=windowsgui` - 禁止在 `bin/` 目录中放入 `go.mod`、`go.sum`、源码文件 - 禁止将 `public/` 打包到 `bin/`(前端已通过 `//go:embed public` 嵌入 exe) - 数据库工具 `data.go` 和 `migrate.go` 的路由定位依赖 `getAppDir()`(基于 exe 路径),不要改为基于 `go.mod` 的定位方式 --- ## 二、技术栈版本 | 组件 | 版本 | 说明 | |------|------|------| | Go | 1.25.0 | go.mod | | pgx | v5.7.4 | PostgreSQL 驱动,支持 PG 12-17 | | PostgreSQL | **17**(推荐) | 兼容 12-17 | | Node.js | 18+ | 前端构建 | | Vite | 7.x | 前端构建工具 | | React | 18.x | 前端框架 | | ent | 0.14.x | ORM | --- ## 三、Windows 部署步骤(给人看) ### 3.1 环境准备 1. 安装 **PostgreSQL 17**:[下载](https://www.postgresql.org/download/windows/) - 安装时设置超级用户密码,端口保持默认 **5432** 2. 安装 **Node.js** 18+(如果需要在 Windows 上重新构建前端) ### 3.2 部署文件 将 `bin/` 整个目录复制到 Windows 电脑,例如 `D:\spherical\` ### 3.3 修改配置 编辑 `etc/spherical-api.yaml`,修改数据库密码: ```yaml Database: Host: 127.0.0.1 Port: 5432 User: postgres Password: 你的密码 # ← 必须修改 Dbname: spherical ``` ### 3.4 创建数据库 用 **pgAdmin** 或 **psql** 执行: ```sql CREATE DATABASE spherical; ``` ### 3.5 初始化数据库 打开 **命令提示符**(cmd),进入部署目录,**依次执行**: ```bash cd D:\spherical # 1. 创建表结构(根据 ent schema 自动建表) migrate.exe # 2. 导入 PLC 信号定义(146 条) data.exe signals # 3. 导入设备/配方/产品种子数据 data.exe seed # 4. 创建管理员账号 data.exe admin # 5. 初始化新引擎(创建引擎表结构 + 导入配方种子数据) # 交互式命令,输入 y 确认 data.exe new-engine ``` > **重要:** 步骤 5 必须执行。新引擎依赖 `recipe_step_resource/signal/action/decision`、`resource_lock`、`job_step` 等表与配方数据,缺少会导致产线无法运行(引擎找不到配方/资源)。 #### 数据库工具命令一览 所有 `data.exe` 支持的命令(在 cmd 中运行): | 命令 | 说明 | 是否交互 | |------|------|:---:| | `data.exe signals` | 导入 PLC 信号定义到 `signal` 表 | 否 | | `data.exe seed` | 导入设备类型、设备实例、槽位、配方、产品类型 | 否 | | `data.exe admin` | 创建默认管理员账号 admin/admin123 | 否 | | `data.exe reset-pwd` | 重置 admin 密码为 admin123 | 否 | | `data.exe reset` | 清空所有生产数据,恢复设备槽位为空闲 | 是(需输入 y 确认) | | `data.exe reset-all` | 完全重建数据库:删表 → 建表 → 导入种子数据 + 管理员 + 信号 + 迁移(含新引擎表结构) | 是(需输入 y 确认) | | `data.exe migrate` | 执行数据库结构迁移(幂等,列不存在时跳过) | 是(需输入 y 确认) | | `data.exe new-engine` | 初始化新引擎:创建引擎表结构 + 导入配方数据(已有数据库升级用,reset-all 已包含) | 是(需输入 y 确认) | 支持一次执行多个命令: ```bash data.exe seed admin signals # 依次执行 seed、admin、signals ``` #### migrate.exe 说明 `migrate.exe` 等价于 `data.exe migrate`,用于数据库表结构迁移。首次部署时使用 `migrate.exe` 创建所有表结构,后续 schema 变更后使用 `data.exe migrate` 执行增量迁移。 > **注意:** `data.exe` 和 `migrate.exe` 是控制台程序,必须从 **命令提示符(cmd)** 运行,不要双击执行(窗口会一闪而过)。交互式命令(如 `reset-all`)运行后会提示输入 `y` 确认,输入后按回车继续。 ### 3.6 启动系统 ```bash spherical.exe ``` - 首次运行自动创建桌面快捷方式「华德零件自动化生产线管控系统」 - 程序在系统托盘运行,右键托盘图标可打开页面 / 设置开机启动 / 退出 - 浏览器自动打开 `http://127.0.0.1:8888` ### 3.7 登录 | 用户名 | 密码 | |--------|------| | `admin` | `admin123` | ### 3.8 数据重置 #### 方式一:完全重建(推荐用于 schema 变更后) 清空数据库并重新导入所有数据: ```bash data.exe reset-all ``` 运行后会提示「警告:此操作将删除所有表并重建数据库!所有数据将永久丢失!输入 y 继续:」,输入 `y` 回车确认。 > `reset-all` 已包含新引擎初始化(`new-engine` 的全部内容),重建后即可直接运行 mockrun/产线,无需再单独执行 `data.exe new-engine`。 #### 方式二:仅清空生产数据 保留基础配置(设备、产品、配方、PLC 信号、用户),仅清空工单、工件、事件日志等生产数据: ```bash data.exe reset ``` #### 方式三:手动执行 SQL ```bash psql -U postgres -d spherical -f doc/reset.sql data.exe seed ``` #### 其他维护命令 ```bash data.exe reset-pwd # 重置 admin 密码为 admin123 data.exe migrate # 执行数据库结构增量迁移 ``` --- ## 四、常见问题 | 问题 | 解决 | |------|------| | 运行 exe 提示缺少 DLL | 安装 [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe) | | 数据库连接失败 | 检查 `etc/spherical-api.yaml` 中密码是否正确,PostgreSQL 服务是否启动 | | 端口被占用 | 修改 `etc/spherical-api.yaml` 中 `Port` 字段 | | 快捷方式没出现 | 检查 PowerShell 执行策略:`Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` | | 开机启动不生效 | 以管理员身份运行一次,在托盘菜单中重新勾选 | | `data.exe` 或 `migrate.exe` 双击一闪而过 | 这是控制台程序,必须从 **命令提示符(cmd)** 运行,不要双击 | | `data.exe reset-all` 无响应 | 程序在等待输入 `y` 确认,看清提示后输入 `y` 回车。如果仍然无响应,检查 `etc/spherical-api.yaml` 中数据库配置是否正确 | | 数据库工具连接失败 | 工具从 `etc/spherical-api.yaml` 读取数据库配置,路径基于 exe 所在目录。确保 `etc/` 目录与 `data.exe` 在同一级 |