单台服务器可部署多个hyperf容器,需端口隔离(如9501/9502/9503)、配置与runtime目录独立挂载、通过docker-compose统一网络编排,并设置mem_limit和cpus限制资源。

单台服务器上部署多个 Hyperf 服务容器是常见且可行的方案,关键在于端口隔离、配置独立、资源可控和网络互通。不需要额外集群工具,用 Docker Compose 即可清晰管理。
端口与服务隔离
每个 Hyperf 容器必须使用不同监听端口,避免冲突:
- 服务 A:映射宿主机 9501:9501,容器内 config/autoload/server.php 中 server.port = 9501
- 服务 B:映射宿主机 9502:9502,server.port = 9502
- 服务 C(如 WebSocket):可额外暴露 9503:9503,并在 config/autoload/websocket-server.php 中指定对应端口
配置与数据分离
多个服务共存时,不能共享配置或运行时目录:
- 每个服务应有独立目录(如 ./service-a、./service-b),各自包含完整 config/、runtime/、.env
- 通过 volumes 挂载时按服务区分路径:
./service-a/config:/app/config:ro,不交叉挂载 - runtime 目录需写权限,建议挂载为
./service-a/runtime:/app/runtime,避免多容器写入冲突
Docker Compose 编排示例
在一个 docker-compose.yml 中定义多个服务,共享自定义网络,便于内部调用:
- 为每个服务设置唯一
container_name(如 hyperf-api、hyperf-admin) - 用
environment区分环境变量(APP_NAME、DB_DATABASE、REDIS_PREFIX 等) - 通过
networks统一接入 hyperf-net,服务间可用容器名直连(如curl http://hyperf-admin:9502/health) - 添加
restart: unless-stopped防止单点故障中断
资源限制与监控
防止某个服务耗尽系统资源影响其他服务:
- 在 service 下设置
mem_limit: "512m"和cpus: "0.5"(按实际调整) - 启用
logging统一收集日志,例如对接本地json-file或远程 ELK - 可通过
docker stats实时查看各容器 CPU、内存占用











