目标:从零开始,把图模工坊在一台开发机上跑起来,10 分钟内看到用户端 H5 + 编辑器 + 管理后台都能登录并互通。
0. 环境前置
| 依赖 | 版本 | 用途 |
|---|---|---|
| Bun | latest | 包管理 + 运行后端 |
| Node | ≥ 20(22/24 更佳) | Quasar / Vite 工具链 |
| Python | 3.12+ | pf-face-service |
| uv | latest | Python 包管理 |
| MySQL | 8.0+ | 业务数据 |
| Redis | 6.x+ | 缓存 |
| MinIO | latest | 对象存储 |
Windows / macOS / Linux 都跑得动,主项目以 Bun 为最小公因子。
1. 拉代码
1 | git clone https://gitcode.com/<your-account>/printing-factory.git |
bun install 会按 package.json 的 workspaces 自动安装 apps/* + packages/* 的依赖。
2. 起依赖服务
最快路径是 docker compose(自备一份 docker-compose.yml):
1 | services: |
1 | docker compose up -d |
在 MinIO 控制台 http://localhost:9001 用 minio / passwdminio 登录,创建 bucket pf-bucket,并将其访问策略设为公共读(或后续都走预签名)。
3. 配置 pf-service
apps/pf-service/config.json 自带开发默认值,无需改动即可对接上面起的容器:
1 | { |
如果你改了任何凭证 / 端口,把这里同步好。
4. 初始化数据库
1 | cd apps/pf-service |
执行完后 pf-manage 库里能看到 20+ 张表。
5. 准备人脸模型
把 scrfd_500m_bnkps.onnx(InsightFace 公开模型)放到:
1 | apps/pf-face-service/models/scrfd_500m_bnkps.onnx |
模型下载地址参见 InsightFace 仓库;模型校验/兼容策略见 人脸检测服务。
6. 启动全部服务
回到仓库根目录,一行命令并行起:
1 | bun dev |
这会通过 concurrently 同时拉起:
1 | editor → bun run --filter @wangijun/pf-editor dev http://localhost:9000 |
如果不想一次起全部,使用单独脚本:
1 | bun dev:service # 只起后端 |
7. 健康自检
1 | curl http://localhost:3000/health |
Swagger 文档:http://localhost:3000/docs
8. 首次登录
打开 http://localhost:9527(管理后台),用 seed 中的默认管理员账号(参见 apps/pf-service/src/db/seed.ts)登录。
进入”模板治理”→ 上架若干样板模板 → 在 http://localhost:8000(用户端 H5)就能看到模板列表,选一张进入工坊页传图体验全流程。
9. 联调验证清单
跑完一遍以下场景代表整条链路通了:
- 后台登录、新增/编辑用户、菜单可用
- 编辑器创建一张模板并上架
- 用户端能看到该模板
- 工坊页能成功传图(小图 / 大图 / 批量)
- 提交后在后台能看到
pending提交 - 10 秒内自动转为
processing→completed - 合成产物 URL 可在浏览器打开
- 带
faceSafe节点的模板,人脸不被裁掉
10. 常见踩坑
| 问题 | 排查方向 |
|---|---|
bun dev 报某端口被占用 |
改对应 app 的 vite.config.ts / quasar.config.ts 端口或杀进程 |
| MinIO 上传 403 | 检查 bucket 是否存在、accessKey / secretKey 是否一致 |
| 合成永远卡在 pending | 看 pf-service 日志 Job 是否启动;config.server.jobs.composition.enabled 是否为 true |
| face-service 启动失败 | 模型文件是否到位、是否缺 OpenCV 依赖(Linux 装 libgl1) |
| Puppeteer 第一次跑很慢 | 首次会下载 Chromium(可改 PUPPETEER_SKIP_DOWNLOAD=1 走系统 Chrome) |
| 字体乱码 | 字体库未上传 woff2 / fontPreload 跨域问题 |