Files
social-app/deploy/README.md
T
qzl aa30fe0ce6 refactor: 重构 Tool Result 契约,移除 ui_hints 统一使用 result 字段
- ToolAgentOutput 移除 result_summary 和 ui_hints,统一使用 result 字段
- 日历/用户查找工具移除 ui_hints 输出,改为机器可读的结构化结果
- Agent History 移除 tool 消息的 ui_hints 处理逻辑
- App 版本检查改为 manifest.json 方式,支持多渠道发布
- 更新 settings 配置和测试用例适配新结构
2026-03-17 12:18:09 +08:00

130 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Production Deploy Package
本目录是单机 `docker compose` 的生产交付包,架构为:
- 应用层:`litellm + web + worker-critical + worker-default + worker-bulk + init-job`
- 中间件:`redis`
- 数据与认证:云 Supabase(通过环境变量访问)
- 反向代理:由服务器侧 nginx 托管(不在本目录编排)
## 交付物
1. `deploy/build-prod-image.sh`:构建并导出生产镜像。
2. `deploy/docker-compose.prod.yml`:生产 Docker Compose 编排。
3. `deploy/.env.prod.example`:生产环境变量模板。
4. `deploy/README.md`:部署说明书。
## 安全基线
- `deploy/.env.prod.example` 仅作为模板,真实密钥请在服务器上填写到 `deploy/.env.prod`,不要提交仓库。
- Redis 密码必填;为空时容器会启动失败。
- 后端镜像默认使用非 root 用户运行。
- 容器间通信仅走 Docker 内网(`redis``litellm` 服务名)。
## 目录结构
```text
deploy/
├── build-prod-image.sh
├── docker-compose.prod.yml
├── .env.prod.example
└── README.md
```
## 一次性交付:构建生产镜像
在仓库根目录执行:
```bash
bash deploy/build-prod-image.sh
```
成功后会产出:
- 镜像名:`social-app-backend:prod`(可用 `SOCIAL_BACKEND_IMAGE` 覆盖)
- 归档文件:`deploy/social-app-backend-prod.tar.gz`
如果你要把镜像拷贝到另一台服务器,传输该 `.tar.gz` 后执行:
```bash
gunzip -c social-app-backend-prod.tar.gz | docker load
```
## 启动流程(生产)
### 1) 检查环境变量
先创建生产环境变量文件:
```bash
cp deploy/.env.prod.example deploy/.env.prod
```
确认 `deploy/.env.prod` 至少包含以下关键变量(云 Supabase 与数据库连接):
- `SOCIAL_SUPABASE__PUBLIC_URL`
- `SOCIAL_SUPABASE__ANON_KEY`
- `SOCIAL_SUPABASE__SERVICE_ROLE_KEY`
- `SOCIAL_SUPABASE__JWT_SECRET`
- `SOCIAL_DATABASE__HOST`
- `SOCIAL_DATABASE__PORT`
- `SOCIAL_DATABASE__NAME`
- `SOCIAL_DATABASE__USER`
- `SOCIAL_DATABASE__PASSWORD`
- `SOCIAL_REDIS__PASSWORD`
说明:
- 容器内通信统一使用 Docker 内网:`SOCIAL_REDIS__HOST=redis``SOCIAL_LITELLM__HOST=litellm`
- `SOCIAL_WEB__HOST`/`SOCIAL_LITELLM__BIND_HOST` 是容器内监听地址,生产建议保持 `0.0.0.0`
### 2) 启动常驻服务
```bash
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml up -d redis litellm-config-job
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml up -d litellm web worker-critical worker-default worker-bulk
```
### 3) 执行一次性 bootstrap
```bash
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml run --rm init-job
```
### 4) 查看状态与日志
```bash
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml ps
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml logs -f web
```
## 停止与重启
停止:
```bash
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml down
```
重启:
```bash
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml up -d
```
## nginx 对接建议
- 反向代理到 `127.0.0.1:${SOCIAL_WEB__PORT}`(默认 `5775`)。
- 仅开放 nginx 对外端口;应用容器仅发布到本机回环地址。
- 如果 nginx 运行在宿主机,`web` 需要保留 `127.0.0.1:host_port:container_port` 端口映射。
- 如果 nginx 也运行在 Docker 同网络内,可以移除 `web.ports`,改为容器内反向代理(例如 `proxy_pass http://web:5775`)。
### App 安装包下载代理(必须配置)
在 nginx 增加静态目录映射:`location /releases/ { alias /你的项目绝对路径/deploy/static/releases/; }`,这样 `https://你的域名/releases/xxx.apk` 可直接下载安装包。并在 `deploy/.env.prod` 设置 `SOCIAL_APP_VERSION__DOWNLOAD_BASE_URL=https://你的域名``SOCIAL_APP_VERSION__RELEASE_PATH_PREFIX=releases`,确保 `check-updates` 返回的 `download_url` 指向该路径。
## 已知约束
- LiteLLM 配置由 `litellm-config-job` 一次性生成到共享 volume`litellm_config`)。若更新了 LLM 目录或 Provider Key,需重新执行 `up -d litellm-config-job` 后重启 `litellm`
- `init-job` 为一次性任务,不长期驻留。