feat: harden deployment and public api handoff
This commit is contained in:
162
docs/DEPLOYMENT.md
Normal file
162
docs/DEPLOYMENT.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# 智念AIGC平台部署说明
|
||||
|
||||
本文面向运维部署。推荐使用 Docker Compose,同一套编排会启动 Web 服务和任务 Worker。
|
||||
|
||||
## 服务器要求
|
||||
|
||||
- Linux 服务器
|
||||
- Docker
|
||||
- Docker Compose v2(`docker compose`)或旧版 `docker-compose`
|
||||
- 可访问外网供应商接口:火山 Visual、EvoLink、Seedance、OSS
|
||||
|
||||
## 一键部署
|
||||
|
||||
```bash
|
||||
git clone <仓库地址>
|
||||
cd NianAIGC
|
||||
bash scripts/deploy.sh
|
||||
```
|
||||
|
||||
脚本会自动:
|
||||
|
||||
- 从 `.env.example` 创建 `.env.local`(如果不存在)
|
||||
- 创建 `.runtime/data`、`.runtime/uploads`、`.runtime/generated-results`
|
||||
- 构建镜像
|
||||
- 启动 `zhinian-aigc` Web 服务
|
||||
- 启动 `zhinian-worker` 任务 Worker
|
||||
- 输出容器状态
|
||||
|
||||
默认访问:
|
||||
|
||||
```text
|
||||
http://服务器IP:3000
|
||||
```
|
||||
|
||||
## 必填生产配置
|
||||
|
||||
部署前编辑 `.env.local`:
|
||||
|
||||
```env
|
||||
APP_PORT=3000
|
||||
PORT=3000
|
||||
HOSTNAME=0.0.0.0
|
||||
NEXT_PUBLIC_APP_URL=https://你的域名
|
||||
|
||||
ZHINIAN_API_KEYS=partner-a:请替换为强随机key
|
||||
ZHINIAN_INTERNAL_WORKER_TOKEN=请替换为强随机token
|
||||
ZHINIAN_WEBHOOK_SECRET=请替换为webhook签名密钥
|
||||
```
|
||||
|
||||
真实生成能力按需配置:
|
||||
|
||||
```env
|
||||
IMAGE_GENERATE_ENGINE=evolink
|
||||
IMAGE_INPAINT_ENGINE=jimeng
|
||||
|
||||
EVOLINK_API_KEY=
|
||||
|
||||
VOLCENGINE_ACCESS_KEY_ID=
|
||||
VOLCENGINE_SECRET_ACCESS_KEY=
|
||||
|
||||
SEEDANCE_API_KEY=
|
||||
|
||||
ALI_OSS_ENDPOINT=
|
||||
ALI_OSS_BUCKET=
|
||||
ALI_OSS_ACCESS_KEY_ID=
|
||||
ALI_OSS_ACCESS_KEY_SECRET=
|
||||
ALI_OSS_PUBLIC_BASE_URL=
|
||||
```
|
||||
|
||||
如果不配置真实供应商密钥,mock 配置会保留本地验收能力,但生产对接应配置真实密钥。
|
||||
|
||||
## 常用运维命令
|
||||
|
||||
```bash
|
||||
docker compose ps
|
||||
docker compose logs -f zhinian-aigc
|
||||
docker compose logs -f zhinian-worker
|
||||
docker compose restart
|
||||
docker compose down
|
||||
```
|
||||
|
||||
更新部署:
|
||||
|
||||
```bash
|
||||
git pull
|
||||
bash scripts/deploy.sh
|
||||
```
|
||||
|
||||
健康检查:
|
||||
|
||||
```bash
|
||||
curl -f http://127.0.0.1:${APP_PORT:-3000}/api/health
|
||||
```
|
||||
|
||||
OpenAPI:
|
||||
|
||||
```bash
|
||||
curl http://127.0.0.1:${APP_PORT:-3000}/api/v1/openapi.json
|
||||
```
|
||||
|
||||
## 数据持久化
|
||||
|
||||
Docker Compose 会挂载:
|
||||
|
||||
```text
|
||||
./.runtime:/app/.runtime
|
||||
```
|
||||
|
||||
本地 JSON 数据层、上传文件和生成结果都会放在 `.runtime/` 下。生产环境如果未启用 Supabase/Postgres,请定期备份该目录。
|
||||
|
||||
建议备份:
|
||||
|
||||
```bash
|
||||
tar -czf zhinian-runtime-$(date +%Y%m%d%H%M%S).tar.gz .runtime
|
||||
```
|
||||
|
||||
## 服务组成
|
||||
|
||||
- `zhinian-aigc`:Next.js Web/API 服务,默认容器端口 `3000`
|
||||
- `zhinian-worker`:后台任务 Worker,负责提交供应商任务、轮询结果、导入资产和触发 Webhook
|
||||
|
||||
注意:只启动 Web 服务时,任务会停留在 `queued` 或 `running`,必须同时运行 Worker。
|
||||
|
||||
## 反向代理建议
|
||||
|
||||
Nginx 示例:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
client_max_body_size 100m;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
配置反向代理后,将 `.env.local` 里的 `NEXT_PUBLIC_APP_URL` 设置成公网 HTTPS 地址。
|
||||
|
||||
## 验收清单
|
||||
|
||||
部署后执行:
|
||||
|
||||
```bash
|
||||
curl -f https://你的域名/api/health
|
||||
curl -H "Authorization: Bearer <API_KEY>" https://你的域名/api/v1/capabilities
|
||||
curl https://你的域名/api/v1/openapi.json
|
||||
```
|
||||
|
||||
确认:
|
||||
|
||||
- Web 页面可访问
|
||||
- `/api/health` 返回 `ok: true`
|
||||
- `/api/v1/capabilities` 使用 API Key 可访问
|
||||
- `zhinian-worker` 日志持续输出 `claimed=...`
|
||||
- OSS、EvoLink、火山、Seedance 密钥按业务需要配置完成
|
||||
Reference in New Issue
Block a user