6.2 KiB
serverrun —— 运行环境与部署编排
本目录是 server-core 的运行环境中心:集中基础设施编排(MySQL/Redis/EMQX)与三服务容器编排(部署入口)。
不存放业务代码;运行时数据全部落在各项目 serverdata/(见下方「数据策略」)。
编排总览
| 编排 | 用途 | 说明 |
|---|---|---|
mysql/docker-compose.yml |
基础设施:MySQL 8 | 容器名 opc-mysql,宿主机端口 8091,数据 serverdata/mysql-data |
redis/docker-compose.yml |
基础设施:Redis 7 | 容器名 opc-redis,宿主机端口 8092,数据 serverdata/redis-data |
mqtt/docker-compose.yml |
基础设施:EMQX | 容器名 opc-emqx,1883/8883/8083/8084/18083,数据 serverdata/emqx-data、emqx-log |
docker-compose.yml |
业务主编排:三服务一起(opc-server/opc-im/opc-compute) | 部署入口,仅 8090 对外 |
all/docker-compose.yml |
三服务一起(等价根编排,单源 include) | 与根文件同效果 |
core/docker-compose.yml |
单独启动 opc-server | 只起核心服务 |
im/docker-compose.yml |
单独启动 opc-im | 只起即时通讯 |
compute/docker-compose.yml |
单独启动 opc-compute | 只起算力服务 |
所有编排共用外部网络
opc-network;业务与基础设施在同一网络内以容器名互访。 旧start.sh/start-all.sh等启动脚本与旧Dockerfile已废弃移除,镜像入口直接uvicorn。
快速开始
1. 创建共享网络(一次性)
docker network create opc-network
2. 启动基础设施(MySQL / Redis / EMQX)
cd serverrun/mysql && docker compose up -d # opc-mysql
cd serverrun/redis && docker compose up -d # opc-redis
cd serverrun/mqtt && docker compose up -d # opc-emqx
镜像均走国内加速(docker.m.daocloud.io);MySQL 首次启动由
init.sql自动建库。
3. 构建业务镜像(各自项目内)
cd server-core && docker build -t opc-server:latest .
cd im-service && docker build -t opc-im:latest .
cd compute && docker build -t opc-compute:latest .
4. 配置环境变量并启动业务
cd serverrun
cp .env.example .env # 默认已适配本地 Docker 基础设施(opc-mysql/opc-redis/opc-emqx)
docker compose up -d # 三服务一起;或 cd all 同样效果
# 单独启动某个:cd core && docker compose up -d(im / compute 同理)
5. 数据库迁移(首次部署,幂等)
# server-core:alembic 迁移
cd serverrun && docker compose run --rm opc-server uv run alembic upgrade head
# compute:迁移 + 种子(非运行态,先于启动)
docker compose run --rm opc-compute sh -c "uv run python scripts/db/migrate.py && uv run python scripts/db/seed.py"
# im-service:无迁移脚本(lifespan 启动时建表),无需执行
6. 验证
curl http://localhost:8090/health # opc-server 健康检查
docker compose ps # 业务容器状态(healthy)
docker ps | grep opc- # 全部容器(含基础设施)
端口与网络
| 服务 | 容器名 | 端口 | 对外 | 说明 |
|---|---|---|---|---|
| opc-server | opc-server |
8090 | ✅ 8090:8090 |
主 API / admin / website / 桌面更新源 |
| opc-im | opc-im |
8101 | ❌ | 即时通讯,server-core 经 http://opc-im:8101 调用 |
| opc-compute | opc-compute |
3000 | ❌ | 算力中转/计量,server-core 经 http://opc-compute:3000 调用 |
| opc-mysql | opc-mysql |
8091→3306 | 宿主机 8091 | 业务主库(opc 库、compute 库) |
| opc-redis | opc-redis |
8092→6379 | 宿主机 8092 | 会话/缓存/限流 |
| opc-emqx | opc-emqx |
1883/8083/18083… | 宿主机同端口 | MQTT 总线 / WebSocket / Dashboard |
业务容器内访问基础设施用 容器名 + 内部端口(.env 已默认配置):
opc-mysql:3306、opc-redis:6379、opc-emqx:1883。
服务间地址(.env 注入 server-core):
| 变量 | 值 |
|---|---|
PINEAGENTS_COMPUTE_BASE_URL |
http://opc-compute:3000 |
PINEAGENTS_IM_BASE_URL |
http://opc-im:8101 |
PINEAGENTS_IM_WS_URL |
ws://opc-im:8101/ws |
数据策略
数据目录在各自项目的 serverdata/,挂载到容器内 /app/serverdata:
| 服务 | 宿主机目录 | 容器内 |
|---|---|---|
| opc-server | ../serverdata(server-core/serverdata) |
/app/serverdata |
| opc-server 上传 | ../uploads(server-core/uploads) |
/app/uploads |
| opc-im | ../../im-service/serverdata |
/app/serverdata |
| opc-compute | ../../compute/serverdata |
/app/serverdata |
| MySQL | serverdata/mysql-data |
/var/lib/mysql |
| Redis | serverdata/redis-data |
/data |
| EMQX | serverdata/emqx-data、emqx-log |
/opt/emqx/data、/opt/emqx/log |
serverdata/seed/、serverdata/prompts/等模板直接在宿主机(git 管理),修改后重启服务即生效; 备份覆盖serverdata/(含 keys/、uploads/、data/)与server-core/uploads/。
常见问题
连不上 MySQL / Redis / MQTT?
先确认基础设施已启动(docker ps | grep opc-);业务容器与基础设施必须在同一网络
(docker network create opc-network 后分别 up,勿用默认网络)。
升级某个服务?
cd compute && docker build -t opc-compute:latest .
cd ../serverrun && docker compose up -d opc-compute
桌面端自动更新不生效?
确认 DESKTOP_UPDATER_PUBKEY 与 agent-desktop/mykey/tauri-signer.key 公钥一致,
PUBLIC_BASE_URL 公网可访问;更新包经 opc-server /uploads 分发。
从旧的"三服务合一镜像"迁移?
合一方案(旧 deploy/Dockerfile/entrypoint.sh)已废弃。注意:.env 中服务间地址改为
服务名(模板已默认);IM_HOST 由 127.0.0.1 改为 0.0.0.0;旧 deploy/data/server-core
数据可复制到 serverdata/(结构一致);首次启动前执行数据库迁移。
数据库迁移说明
镜像容器启动仅运行单进程(uvicorn),不在启动脚本内跑迁移;
alembic upgrade head 与 compute migrate.py/seed.py 按上文「快速开始」显式执行(幂等)。