总览

图模工坊的配置面积刻意保持小:

类型 文件 / 来源
后端运行时 apps/pf-service/config.json
ORM / 迁移 apps/pf-service/drizzle.config.ts
编辑器 apps/pf-editor/quasar.config.ts
用户端 H5 apps/pf-app/quasar.config.ts
管理后台 apps/pf-manage/.env* + vite.config.ts
人脸服务 环境变量(FACE_*
代码风格 .oxlintrc.json

pf-service 主配置

apps/pf-service/config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"server": {
"port": 3000, // 监听端口
"workerId": 1, // 多进程时唯一 ID(保留位)
"jobs": {
"composition": {
"enabled": true, // 合成 Job 总开关
"intervalMs": 10000 // 轮询间隔
}
}
},
"db": {
"url": "mysql://root:mysql@localhost:3306/pf-manage",
"host": "localhost",
"port": 3306,
"database": "pf-manage",
"username": "root",
"password": "mysql"
},
"redis": {
"host": "127.0.0.1",
"port": 6379,
"username": "default",
"password": "redis",
"db": 0
},
"s3": {
"accessKeyId": "minio",
"secretAccessKey": "passwdminio",
"bucket": "pf-bucket",
"endpoint": "http://localhost:1280"
},
"faceService": {
"baseUrl": "http://localhost:3010",
"timeoutMs": 8000
}
}

字段说明

字段 类型 默认 说明
server.port int 3000 HTTP 监听端口
server.jobs.composition.enabled bool true 是否启动合成 Job(API 专用进程组应设 false)
server.jobs.composition.intervalMs int 10000 合成 Job 轮询间隔
db.url string 优先级最高的 DSN;指定后单字段被忽略
redis.password string 留空表示无密码
s3.endpoint string S3 兼容 endpoint,含协议(http/https)
s3.bucket string 默认桶名
faceService.baseUrl string pf-face-service 的内网地址
faceService.timeoutMs int 8000 单次调用超时

多环境

约定通过部署平台的”配置注入”在启动前替换 config.json;也可以保留默认开发值,生产环境用环境变量覆盖(在 src/config/ 内做合并)。

Drizzle 配置

apps/pf-service/drizzle.config.ts

  • schema: "src/db/schema.ts"
  • out: "drizzle/"
  • dialect: "mysql"
  • dbCredentials 来自 config.json
1
2
3
bun db:generate    # 生成迁移 SQL(开发时一般用 push)
bun db:push # 同步 schema 到 DB(dev 推荐)
bun db:studio # GUI

生产请走 db:generate + 人工审过 SQL 的迁移,不要 db:push

人脸服务环境变量

变量 默认 说明
FACE_MODEL_PATH apps/pf-face-service/models/scrfd_500m_bnkps.onnx 模型路径
FACE_INPUT_SIZE 640 推理输入边长
FACE_DETECT_TIMEOUT_MS 8000 拉取图片的超时
1
2
3
FACE_MODEL_PATH=/data/models/scrfd.onnx \
FACE_INPUT_SIZE=640 \
uv run uvicorn app.main:app --host 0.0.0.0 --port 3010

前端构建配置

pf-app / pf-editor (Quasar)

  • 入口:quasar.config.ts
  • 开发端口:8000 / 9000
  • 后端地址:通过 .env.development / .env.production 注入:
1
2
VITE_API_BASE=https://pf.example.com/api
VITE_OSS_BASE=https://cdn.example.com/pf-bucket
  • PWA / Cordova / Electron:当前仅启用 SPA 模式

pf-manage (soybean-admin)

  • 入口:vite.config.ts + uno.config.ts
  • 开发端口:9527
  • .env 文件:参考 soybean-admin 文档;常见:
1
2
3
VITE_BASE_URL=/
VITE_SERVICE_BASE_URL=https://pf.example.com/api
VITE_OTHER_SERVICE_BASE_URL=
  • 路由生成:bun gen-route

代码风格

.oxlintrc.json 在根目录,所有应用通过 oxlint -c ../../.oxlintrc.json . 共用。Formatter 是 oxfmt,配置内嵌默认。

详细规范见 AGENTS.md

  • 文件命名:Vue PascalCase / TS camelCase / 文件夹 kebab-case
  • TS strict mode,禁 any
  • 不允许 console.log 留在仓库
  • 数据库表 snake_case,TS 字段 camelCase

端口约定

服务 默认端口 用途
pf-app 8000 用户端 H5(开发)
pf-editor 9000 编辑器(开发)
pf-manage 9527 管理后台(开发)
pf-service 3000 后端 API
pf-face-service 3010 人脸检测
MySQL 3306 数据库
Redis 6379 缓存
MinIO 1280 (API), 9001 (Console) 对象存储

生产部署一般通过反向代理统一对外,详见 部署

业务硬约束

由设计文档约束(写入校验逻辑而非配置):

  • 单图大小 ≤ 200MB
  • 图片格式:JPG / PNG / TIFF
  • 图片分辨率 ≥ 300DPI(合成时校验)
  • 单次批量合成模板 ≤ 20 个(防止单次请求过大)
  • 文件默认保留 90 天,过期清理

要调整这些阈值,改 pf-service 路由层 / Job 内的常量即可。

下一步

  • 想看怎么把这些参数生效在生产 → 部署
  • 想看常见配置坑 → FAQ