refactor: 移除 LiteLLM proxy 架构,后端直连 Provider API
- 移除 backend/scripts/build_litellm_proxy_config.py - 简化 LiteLLMService,移除 run_completion_with_cost 方法 - AgentScopeRunner 改为从 LlmFactory 获取 api_base 和 api_key - 部署配置移除 litellm/litellm-config-job 服务 - Flutter 新增 AuthBootScreen 引导页 - Android 添加通知权限 (POST_NOTIFICATIONS, RECEIVE_BOOT_COMPLETED, SCHEDULE_EXACT_ALARM) - 优化 LocalNotificationService 调度失败 fallback - 更新 manifest.json (version 3)
This commit is contained in:
@@ -16,13 +16,6 @@ SOCIAL_WEB__HOST=0.0.0.0
|
||||
SOCIAL_WEB__PORT=5775
|
||||
SOCIAL_WEB__WORKERS=2
|
||||
|
||||
############
|
||||
# LiteLLM Proxy 网关配置
|
||||
############
|
||||
# 可选:覆盖官方 LiteLLM 镜像(默认使用 compose 内置 digest)
|
||||
# SOCIAL_LITELLM_IMAGE=ghcr.io/berriai/litellm@sha256:b959a1816fa454a14d2842242d0fa1cd0d39f96fc94d3a1f4e1de4e48e2398c6
|
||||
SOCIAL_LITELLM__PORT=3875
|
||||
|
||||
############
|
||||
# Redis 配置
|
||||
############
|
||||
|
||||
+5
-7
@@ -2,7 +2,7 @@
|
||||
|
||||
本目录是单机 `docker compose` 的生产交付包,架构为:
|
||||
|
||||
- 应用层:`litellm + web + worker-critical + worker-default + worker-bulk + init-job`
|
||||
- 应用层:`web + worker-critical + worker-default + worker-bulk + init-job`
|
||||
- 中间件:`redis`
|
||||
- 数据与认证:云 Supabase(通过环境变量访问)
|
||||
- 反向代理:由服务器侧 nginx 托管(不在本目录编排)
|
||||
@@ -19,7 +19,7 @@
|
||||
- `deploy/.env.prod.example` 仅作为模板,真实密钥请在服务器上填写到 `deploy/.env.prod`,不要提交仓库。
|
||||
- Redis 密码必填;为空时容器会启动失败。
|
||||
- 后端镜像默认使用非 root 用户运行。
|
||||
- 容器间通信仅走 Docker 内网(`redis`、`litellm` 服务名)。
|
||||
- 容器间通信仅走 Docker 内网(`redis` 服务名)。
|
||||
|
||||
## 目录结构
|
||||
|
||||
@@ -75,14 +75,13 @@ cp deploy/.env.prod.example deploy/.env.prod
|
||||
|
||||
说明:
|
||||
|
||||
- 容器内通信统一使用 Docker 内网:`SOCIAL_REDIS__HOST=redis`、`SOCIAL_LITELLM__HOST=litellm`。
|
||||
- `SOCIAL_WEB__HOST`/`SOCIAL_LITELLM__BIND_HOST` 是容器内监听地址,生产建议保持 `0.0.0.0`。
|
||||
- 容器内通信统一使用 Docker 内网:`SOCIAL_REDIS__HOST=redis`。
|
||||
- `SOCIAL_WEB__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
|
||||
docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml up -d redis web worker-critical worker-default worker-bulk
|
||||
```
|
||||
|
||||
### 3) 执行一次性 bootstrap
|
||||
@@ -125,5 +124,4 @@ docker compose --env-file deploy/.env.prod -f deploy/docker-compose.prod.yml up
|
||||
|
||||
## 已知约束
|
||||
|
||||
- LiteLLM 配置由 `litellm-config-job` 一次性生成到共享 volume(`litellm_config`)。若更新了 LLM 目录或 Provider Key,需重新执行 `up -d litellm-config-job` 后重启 `litellm`。
|
||||
- `init-job` 为一次性任务,不长期驻留。
|
||||
|
||||
@@ -23,50 +23,6 @@ services:
|
||||
timeout: 3s
|
||||
retries: 10
|
||||
|
||||
litellm-config-job:
|
||||
image: ${SOCIAL_BACKEND_IMAGE:-social-app-backend:prod}
|
||||
container_name: social-prod-litellm-config-job
|
||||
restart: "no"
|
||||
env_file:
|
||||
- ./.env.prod
|
||||
environment:
|
||||
- PYTHONPATH=/app/backend/src
|
||||
- PYTHONDONTWRITEBYTECODE=1
|
||||
command: >
|
||||
.venv/bin/python backend/scripts/build_litellm_proxy_config.py --output /config/litellm-proxy-config.yaml
|
||||
volumes:
|
||||
- litellm_config:/config
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
|
||||
litellm:
|
||||
image: ghcr.io/berriai/litellm@sha256:b959a1816fa454a14d2842242d0fa1cd0d39f96fc94d3a1f4e1de4e48e2398c6
|
||||
container_name: social-prod-litellm
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ./.env.prod
|
||||
command: >
|
||||
--config /config/litellm-proxy-config.yaml --host ${SOCIAL_LITELLM__BIND_HOST:-0.0.0.0} --port ${SOCIAL_LITELLM__PORT:-3875}
|
||||
volumes:
|
||||
- litellm_config:/config:ro
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
litellm-config-job:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"python",
|
||||
"-c",
|
||||
"import os,sys,urllib.request;port=os.getenv('SOCIAL_LITELLM__PORT','3875');u=f'http://127.0.0.1:{port}/health';sys.exit(0 if urllib.request.urlopen(u, timeout=3).getcode() < 500 else 1)",
|
||||
]
|
||||
interval: 15s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
web:
|
||||
image: ${SOCIAL_BACKEND_IMAGE:-social-app-backend:prod}
|
||||
container_name: social-prod-web
|
||||
@@ -80,8 +36,6 @@ services:
|
||||
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-prod}
|
||||
- SOCIAL_REDIS__HOST=redis
|
||||
- SOCIAL_REDIS__PORT=6379
|
||||
- SOCIAL_LITELLM__HOST=litellm
|
||||
- SOCIAL_LITELLM__PORT=${SOCIAL_LITELLM__PORT:-3875}
|
||||
command: >
|
||||
sh -c '.venv/bin/uvicorn app:app --host ${SOCIAL_WEB__HOST:-0.0.0.0} --port ${SOCIAL_WEB__PORT:-5775} --workers ${SOCIAL_WEB__WORKERS:-2} --log-level $(printf "%s" "${SOCIAL_RUNTIME__LOG_LEVEL:-info}" | tr "[:upper:]" "[:lower:]")'
|
||||
ports:
|
||||
@@ -89,8 +43,6 @@ services:
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
litellm:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../logs:/app/logs
|
||||
- ./static/releases:/app/deploy/static/releases:ro
|
||||
@@ -119,15 +71,11 @@ services:
|
||||
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-prod}
|
||||
- SOCIAL_REDIS__HOST=redis
|
||||
- SOCIAL_REDIS__PORT=6379
|
||||
- SOCIAL_LITELLM__HOST=litellm
|
||||
- SOCIAL_LITELLM__PORT=${SOCIAL_LITELLM__PORT:-3875}
|
||||
command: >
|
||||
sh -c '.venv/bin/taskiq worker core.taskiq.app:critical_broker core.agentscope.runtime.tasks --workers ${SOCIAL_WORKER__GROUPS__CRITICAL__CONCURRENCY:-2}'
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
litellm:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../logs:/app/logs
|
||||
- ./static/releases:/app/deploy/static/releases:ro
|
||||
@@ -145,15 +93,11 @@ services:
|
||||
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-prod}
|
||||
- SOCIAL_REDIS__HOST=redis
|
||||
- SOCIAL_REDIS__PORT=6379
|
||||
- SOCIAL_LITELLM__HOST=litellm
|
||||
- SOCIAL_LITELLM__PORT=${SOCIAL_LITELLM__PORT:-3875}
|
||||
command: >
|
||||
sh -c '.venv/bin/taskiq worker core.taskiq.app:default_broker core.agentscope.runtime.tasks --workers ${SOCIAL_WORKER__GROUPS__DEFAULT__CONCURRENCY:-2}'
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
litellm:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../logs:/app/logs
|
||||
- ./static/releases:/app/deploy/static/releases:ro
|
||||
@@ -171,15 +115,11 @@ services:
|
||||
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-prod}
|
||||
- SOCIAL_REDIS__HOST=redis
|
||||
- SOCIAL_REDIS__PORT=6379
|
||||
- SOCIAL_LITELLM__HOST=litellm
|
||||
- SOCIAL_LITELLM__PORT=${SOCIAL_LITELLM__PORT:-3875}
|
||||
command: >
|
||||
sh -c '.venv/bin/taskiq worker core.taskiq.app:bulk_broker core.agentscope.runtime.tasks --workers ${SOCIAL_WORKER__GROUPS__BULK__CONCURRENCY:-1}'
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
litellm:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../logs:/app/logs
|
||||
- ./static/releases:/app/deploy/static/releases:ro
|
||||
@@ -197,14 +137,10 @@ services:
|
||||
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-prod}
|
||||
- SOCIAL_REDIS__HOST=redis
|
||||
- SOCIAL_REDIS__PORT=6379
|
||||
- SOCIAL_LITELLM__HOST=litellm
|
||||
- SOCIAL_LITELLM__PORT=${SOCIAL_LITELLM__PORT:-3875}
|
||||
command: .venv/bin/python -m core.runtime.cli bootstrap
|
||||
depends_on:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
litellm:
|
||||
condition: service_healthy
|
||||
volumes:
|
||||
- ../logs:/app/logs
|
||||
- ./static/releases:/app/deploy/static/releases:ro
|
||||
@@ -213,4 +149,3 @@ services:
|
||||
|
||||
volumes:
|
||||
redis_data:
|
||||
litellm_config:
|
||||
|
||||
@@ -4,23 +4,12 @@
|
||||
"platform": "android",
|
||||
"channel": "release",
|
||||
"version_name": "0.1.0",
|
||||
"version_code": 1,
|
||||
"min_supported_version_code": 1,
|
||||
"file_name": "social-app-android-v0.1.0+1-release.apk",
|
||||
"release_notes": "\u95ee\u9898\u4fee\u590d\u548c\u4f53\u9a8c\u4f18\u5316",
|
||||
"file_size": 21371504,
|
||||
"sha256": "6cf53601f36e0037b6de909ea3567d1e18a1bcec1164e1b70d88c1802eafd44b"
|
||||
},
|
||||
{
|
||||
"platform": "android",
|
||||
"channel": "release",
|
||||
"version_name": "0.1.0",
|
||||
"version_code": 2,
|
||||
"min_supported_version_code": 2,
|
||||
"file_name": "social-app-android-v0.1.0+2-release.apk",
|
||||
"release_notes": "\u95ee\u9898\u4fee\u590d\u548c\u4f53\u9a8c\u4f18\u5316",
|
||||
"file_size": 21371504,
|
||||
"sha256": "8f769bda3ba5414dfd5712ac026d8a13663990b7e83a4e92b8e85caf9945d5eb"
|
||||
"version_code": 3,
|
||||
"min_supported_version_code": 3,
|
||||
"file_name": "social-app-android-v0.1.0+3-release.apk",
|
||||
"release_notes": null,
|
||||
"file_size": 21371568,
|
||||
"sha256": "34691f96004b3dc3b2070d84ae0e7f0d2943f6c9978160eb78550081bc72a74a"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user