chore: align local docker environment
This commit is contained in:
@@ -616,6 +616,80 @@
|
|||||||
"message": "docs: record upload generation safeguards",
|
"message": "docs: record upload generation safeguards",
|
||||||
"hash": "1728808",
|
"hash": "1728808",
|
||||||
"files_changed": 2
|
"files_changed": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T12:09:24+08:00",
|
||||||
|
"type": "commit",
|
||||||
|
"message": "chore: record Muse Mate generation run",
|
||||||
|
"hash": "7292bb2",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T04:10:01Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T04:20:01Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T04:30:01Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T04:40:01Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T04:50:01Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T05:00:01Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T05:10:02Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T05:20:02Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T05:30:02Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T05:40:02Z",
|
||||||
|
"type": "session-heartbeat",
|
||||||
|
"message": "Codex 会话活跃 · 最近命令:codex · 分支 master · 1 项未提交变更 · 最近提交:chore: record Muse Mate generation run",
|
||||||
|
"files_changed": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ts": "2026-05-19T13:40:25+08:00",
|
||||||
|
"type": "commit",
|
||||||
|
"message": "auto-save 2026-05-19 13:40 (+1, ~2)",
|
||||||
|
"hash": "f4ce3d4",
|
||||||
|
"files_changed": 3
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"created": "2026-05-18",
|
"created": "2026-05-18",
|
||||||
"urls": [
|
"urls": [
|
||||||
{ "type": "app", "url": "https://ai-toy.kang-kang.com", "label": "VPS 生产" },
|
{ "type": "app", "url": "https://ai-toy.kang-kang.com", "label": "VPS 生产" },
|
||||||
{ "type": "app", "url": "http://localhost:4560", "label": "本地 dev" }
|
{ "type": "app", "url": "http://localhost:4560", "label": "本地 Docker" }
|
||||||
],
|
],
|
||||||
"credentials": [
|
"credentials": [
|
||||||
{ "name": "OPENAI_API_KEY", "env": "OPENAI_API_KEY", "note": "GPT 文本/结构化/图片生成;没填则图片 mock" },
|
{ "name": "OPENAI_API_KEY", "env": "OPENAI_API_KEY", "note": "GPT 文本/结构化/图片生成;没填则图片 mock" },
|
||||||
@@ -25,7 +25,8 @@
|
|||||||
},
|
},
|
||||||
"stack": [
|
"stack": [
|
||||||
"Next.js + GPT + Seedance",
|
"Next.js + GPT + Seedance",
|
||||||
"Docker Compose + Coolify Traefik"
|
"Docker Compose local/prod parity",
|
||||||
|
"Coolify Traefik"
|
||||||
],
|
],
|
||||||
"ownership": "personal"
|
"ownership": "personal"
|
||||||
}
|
}
|
||||||
|
|||||||
8
RULES.md
8
RULES.md
@@ -1,8 +1,9 @@
|
|||||||
# AI玩具专利生成工作流
|
# AI玩具专利生成工作流
|
||||||
|
|
||||||
## 启动
|
## 启动
|
||||||
- `cd ~/Projects/code/20260518-ai-toy-patent-workflow && npm run dev` — 端口 4560
|
- 推荐本地环境:`cd ~/Projects/code/20260518-ai-toy-patent-workflow && npm run docker:up` — Docker Compose,端口 4560
|
||||||
- 浏览器打开 http://localhost:4560
|
- 浏览器打开 http://localhost:4560
|
||||||
|
- 备用非 Docker 开发:`npm run dev` — 端口 4560
|
||||||
- 首次依赖装好:`npm install --legacy-peer-deps`(next 15 + react 19 有 peer 警告)
|
- 首次依赖装好:`npm install --legacy-peer-deps`(next 15 + react 19 有 peer 警告)
|
||||||
|
|
||||||
## 部署事实
|
## 部署事实
|
||||||
@@ -11,7 +12,7 @@
|
|||||||
- 服务名 / 容器名:`ai-toy-patent-workflow`
|
- 服务名 / 容器名:`ai-toy-patent-workflow`
|
||||||
- 服务器路径:`/opt/ai-toy-patent-workflow`
|
- 服务器路径:`/opt/ai-toy-patent-workflow`
|
||||||
- 主站 / 前端:https://ai-toy.kang-kang.com
|
- 主站 / 前端:https://ai-toy.kang-kang.com
|
||||||
- 本地 dev:http://localhost:4560
|
- 本地 Docker:http://localhost:4560
|
||||||
- API / 后端:内置 Next.js API Route(生产同域名)
|
- API / 后端:内置 Next.js API Route(生产同域名)
|
||||||
- 文档 / 解析:无
|
- 文档 / 解析:无
|
||||||
- 管理后台:无
|
- 管理后台:无
|
||||||
@@ -22,6 +23,8 @@
|
|||||||
## 元数据回写清单
|
## 元数据回写清单
|
||||||
- 改公网域名或迁移部署时,更新 `.project.json.urls` + 本节
|
- 改公网域名或迁移部署时,更新 `.project.json.urls` + 本节
|
||||||
- 数据持久化在 `data/`(gitignored),不入库;上传原图在 `data/uploads/`
|
- 数据持久化在 `data/`(gitignored),不入库;上传原图在 `data/uploads/`
|
||||||
|
- 本地 Docker 使用 `docker-compose.yml`,挂载 `./data:/app/data`,读取 `.env.local`,并强制 `PUBLIC_APP_URL=http://localhost:4560`
|
||||||
|
- VPS 生产 Docker 使用 `docker-compose.prod.yml`,挂载 `./data:/app/data`,读取 `deploy/.env.production`,并强制 `PUBLIC_APP_URL=https://ai-toy.kang-kang.com`
|
||||||
- VPS 数据持久化在 `/opt/ai-toy-patent-workflow/data`
|
- VPS 数据持久化在 `/opt/ai-toy-patent-workflow/data`
|
||||||
- VPS 生产环境变量在 `/opt/ai-toy-patent-workflow/deploy/.env.production`,不入库
|
- VPS 生产环境变量在 `/opt/ai-toy-patent-workflow/deploy/.env.production`,不入库
|
||||||
|
|
||||||
@@ -35,6 +38,7 @@
|
|||||||
- `SEEDANCE_API_BASE` — 默认 `https://ark.cn-beijing.volces.com/api/v3`
|
- `SEEDANCE_API_BASE` — 默认 `https://ark.cn-beijing.volces.com/api/v3`
|
||||||
- `PUBLIC_APP_URL` — 生产填公网入口,用于把 `/api/img/...` 补成 Seedance 可访问的绝对 URL
|
- `PUBLIC_APP_URL` — 生产填公网入口,用于把 `/api/img/...` 补成 Seedance 可访问的绝对 URL
|
||||||
- 配置位置:`.env.local`(gitignored),参考 `.env.local.example`
|
- 配置位置:`.env.local`(gitignored),参考 `.env.local.example`
|
||||||
|
- 生产配置模板:`deploy/.env.production.example`;真实生产值只放 VPS 的 `/opt/ai-toy-patent-workflow/deploy/.env.production`
|
||||||
- 图片生成未配置 GPT Key 时回退 mock(SVG 占位图),视频生成不 mock,必须配置 Seedance Key
|
- 图片生成未配置 GPT Key 时回退 mock(SVG 占位图),视频生成不 mock,必须配置 Seedance Key
|
||||||
|
|
||||||
## 规则
|
## 规则
|
||||||
|
|||||||
10
deploy/.env.production.example
Normal file
10
deploy/.env.production.example
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# GPT API. Keep the real value only on the VPS at deploy/.env.production.
|
||||||
|
OPENAI_API_KEY=
|
||||||
|
GPT_TEXT_MODEL=gpt-5.5
|
||||||
|
GPT_IMAGE_MODEL=gpt-image-2
|
||||||
|
GPT_API_BASE=https://api.openai.com/v1
|
||||||
|
|
||||||
|
# Seedance video generation.
|
||||||
|
SEEDANCE_API_KEY=
|
||||||
|
SEEDANCE_MODEL=doubao-seedance-2-0-260128
|
||||||
|
SEEDANCE_API_BASE=https://ark.cn-beijing.volces.com/api/v3
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
name: ai-toy-patent-workflow-local
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
container_name: ai-toy-patent-workflow-local
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
image: ai-toy-patent-workflow:local
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- ./.env.local
|
||||||
|
environment:
|
||||||
|
NODE_ENV: production
|
||||||
|
PORT: "4560"
|
||||||
|
PUBLIC_APP_URL: http://localhost:4560
|
||||||
|
ports:
|
||||||
|
- "4560:4560"
|
||||||
|
volumes:
|
||||||
|
- ./data:/app/data
|
||||||
@@ -6,7 +6,10 @@
|
|||||||
"dev": "next dev -p 4560",
|
"dev": "next dev -p 4560",
|
||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "next start -p 4560",
|
"start": "next start -p 4560",
|
||||||
"lint": "next lint"
|
"lint": "next lint",
|
||||||
|
"docker:up": "docker compose up -d --build",
|
||||||
|
"docker:down": "docker compose down",
|
||||||
|
"docker:logs": "docker compose logs -f web"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"next": "^15.5.18",
|
"next": "^15.5.18",
|
||||||
|
|||||||
Reference in New Issue
Block a user