feat: serverdata 资源目录 + serverrun 运维编排
- serverdata/:统一承载全部资源目录(data/logs/files/keys/prompts/uploads) - data/→serverdata/data、templates/→serverdata/prompts、uploads/→serverdata/uploads - config.py 集中 serverdata 路径;培训子应用 db/uploads 指到 serverdata - serverrun/:start.sh(初始化资源目录+启动 dispatcher)、Dockerfile、docker-compose(core+compute-engine+redis+mysql) - 66 测试全绿
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
# server-core 镜像(多阶段)
|
||||
FROM ghcr.io/astral-sh/uv:python3.12 AS base
|
||||
WORKDIR /app
|
||||
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
|
||||
|
||||
# 依赖层(利用缓存)
|
||||
COPY pyproject.toml uv.lock ./
|
||||
RUN uv sync --frozen --no-dev --no-install-project
|
||||
|
||||
# 代码层
|
||||
COPY app ./app
|
||||
COPY dispatcher.py main.py pyproject.toml uv.lock ./
|
||||
COPY serverdata ./serverdata
|
||||
COPY serverrun ./serverrun
|
||||
|
||||
EXPOSE 8090
|
||||
CMD ["bash", "serverrun/start.sh"]
|
||||
@@ -0,0 +1,85 @@
|
||||
# 云超服后端服务群编排(serverrun/)
|
||||
# 服务:core(server-core,统一入口)+ compute-engine(算力引擎)+ 基础设施(redis/mysql/emqx)
|
||||
# 对外统一生产服务 opc.pinesound.cn → core:8090
|
||||
|
||||
services:
|
||||
core:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: serverrun/Dockerfile
|
||||
container_name: opc-core
|
||||
restart: always
|
||||
ports:
|
||||
- "127.0.0.1:8090:8090" # 统一入口(经网关暴露,仅 loopback)
|
||||
environment:
|
||||
- PINEAGENTS_DEMO_DATABASE_URL=mysql+asyncmy://opc:opc_pass@mysql:3306/opc?charset=utf8mb4
|
||||
- REDIS_URL=redis://:redis_pass@redis:6379/0
|
||||
- TZ=Asia/Shanghai
|
||||
volumes:
|
||||
- ./../serverdata:/app/serverdata # 资源目录挂载
|
||||
depends_on:
|
||||
- redis
|
||||
- mysql
|
||||
networks:
|
||||
- opc-network
|
||||
|
||||
compute-engine:
|
||||
image: calciumion/new-api:latest
|
||||
container_name: opc-compute-engine
|
||||
restart: always
|
||||
command: --log-dir /app/logs
|
||||
ports:
|
||||
- "127.0.0.1:3000:3000" # 仅 loopback,算力服务经内部 IP 调用
|
||||
environment:
|
||||
- SQLITE_PATH=/data/new-api.db
|
||||
- REDIS_CONN_STRING=redis://:redis_pass@redis:6379/0
|
||||
- SESSION_SECRET=${SESSION_SECRET:?请设置 SESSION_SECRET}
|
||||
- TZ=Asia/Shanghai
|
||||
volumes:
|
||||
- compute-data:/data
|
||||
- compute-logs:/app/logs
|
||||
depends_on:
|
||||
- redis
|
||||
networks:
|
||||
- opc-network
|
||||
|
||||
redis:
|
||||
image: redis:7
|
||||
container_name: opc-redis
|
||||
restart: always
|
||||
command: ["redis-server", "--requirepass", "redis_pass"]
|
||||
networks:
|
||||
- opc-network
|
||||
|
||||
mysql:
|
||||
image: mysql:8
|
||||
container_name: opc-mysql
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: root_pass
|
||||
MYSQL_DATABASE: opc
|
||||
MYSQL_USER: opc
|
||||
MYSQL_PASSWORD: opc_pass
|
||||
volumes:
|
||||
- mysql-data:/var/lib/mysql
|
||||
networks:
|
||||
- opc-network
|
||||
|
||||
# emqx(消息总线,大屏/桌面端实时)——可选,启用时打开注释
|
||||
# emqx:
|
||||
# image: emqx/emqx:5.8
|
||||
# container_name: opc-emqx
|
||||
# restart: always
|
||||
# ports:
|
||||
# - "127.0.0.1:1883:1883"
|
||||
# networks:
|
||||
# - opc-network
|
||||
|
||||
volumes:
|
||||
compute-data:
|
||||
compute-logs:
|
||||
mysql-data:
|
||||
|
||||
networks:
|
||||
opc-network:
|
||||
driver: bridge
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
# server-core 启动脚本(serverrun/,参考 PineSoundServer 工程化)
|
||||
# 职责:初始化 serverdata 资源目录 → 启动服务
|
||||
set -euo pipefail
|
||||
|
||||
# 项目根(本脚本位于 serverrun/ 下)
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
echo "=========================================="
|
||||
echo "初始化 serverdata 资源目录..."
|
||||
echo "=========================================="
|
||||
|
||||
SERVERDATA_DIRS=(
|
||||
"serverdata/data"
|
||||
"serverdata/logs"
|
||||
"serverdata/files"
|
||||
"serverdata/keys"
|
||||
"serverdata/prompts"
|
||||
"serverdata/uploads"
|
||||
)
|
||||
for dir in "${SERVERDATA_DIRS[@]}"; do
|
||||
if [ ! -d "$dir" ]; then
|
||||
echo "✗ 创建 $dir"
|
||||
mkdir -p "$dir"
|
||||
else
|
||||
echo "✓ $dir"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "=========================================="
|
||||
echo "启动 core(dispatcher 统一入口)"
|
||||
echo "=========================================="
|
||||
|
||||
# 生产模式:uv 管理,uvicorn dispatcher
|
||||
if command -v uv >/dev/null 2>&1 && [ -f pyproject.toml ]; then
|
||||
exec uv run uvicorn dispatcher:app --host 0.0.0.0 --port "${PORT:-8090}"
|
||||
else
|
||||
exec uvicorn dispatcher:app --host 0.0.0.0 --port "${PORT:-8090}"
|
||||
fi
|
||||
Reference in New Issue
Block a user