使用 Docker + Portainer 快速一键部署 Webman 集群

星瑶大大_8994

星瑶大大_8994

2026-06-13

471人浏览

原创

Webman集群不能仅靠Portainer点选部署,必须显式安装pcntl/posix扩展、挂载runtime目录、配置init:true和restart:unless-stopped,并禁用内置多进程改用横向扩容,通过Redis共享状态。

使用 docker + portainer 快速一键部署 webman 集群

不能直接用 Portainer 点几下就跑起 Webman 集群——Webman 的集群依赖 pcntl/posix 扩展、runtime 目录挂载、信号处理和横向扩缩容设计,Portainer 只管容器生命周期,不管这些底层约束。

Webman 容器镜像必须显式编译 pcntl 和 posix

官方 docker-compose.yml 默认用的 PHP 基础镜像(比如 php:8.2-cli)不带 pcntl 和 posix 扩展,而 Webman 启动时会调用 pcntl_fork() 和 posix_kill(),缺一不可。

  • 在 Dockerfile 里必须写 RUN docker-php-ext-install pcntl posix,不能只写 pcntl
  • Alpine 镜像需提前装 gcc 和 make,否则编译失败:RUN apk add --no-cache gcc make
  • 验证方式:进容器执行 php -m | grep -E "pcntl|posix",两行都得有输出
  • 别用 fpm 镜像——Webman 是 CLI 常驻进程,fpm 模式收不到 SIGTERM,热重载静默失效

docker-compose.yml 缺这三项,Portainer 部署等于裸奔

Portainer 导入或部署服务时,如果原始 docker-compose.yml 没补全这三项,容器重启后日志丢失、缓存重建、健康检查失败、平滑退出失效。

  • restart: unless-stopped:宿主机重启后自动拉起容器,否则服务消失
  • volumes: ["./runtime:/app/runtime"]:强制挂载,否则 runtime/log 和 runtime/cache 全丢,路由缓存每次启动都重建
  • init: true:启用容器 init 进程,确保 SIGTERM 能传给 PHP 主进程,实现优雅退出
  • 端口映射必须写成 "8787:8787",别写 "8080:8787" 后忘了改 Nginx/Traefik 的 upstream;Webman 默认监听 0.0.0.0:8787,容器内地址不能改

Portainer 中部署 Webman 多实例要禁用内置多进程

Webman 默认启动带 --process=4 这类参数,在单机 Docker 里开多个 worker 进程,既浪费资源又难监控。容器环境应靠横向扩容,而非单容器内多进程。

Docker Compose Optimizer
Docker Compose Optimizer

优化 Docker Compose 配置,适用于开发和生产环境——审计服务、网络、卷、健康检查和资源管理。

下载
  • 启动命令必须改为 php start.php start -d,不加 --process 参数
  • 在 Portainer 创建服务时,通过 Replicas 设置副本数(如 3),而不是靠一个容器撑多个 worker
  • 每个实例必须共享 Redis(用于 session、锁、事件广播),否则状态不一致;Portainer 里需额外部署 Redis 服务并配置连接
  • 健康检查路径设为 /ping,Portainer 支持填 curl -f http://localhost:8787/ping,但注意容器网络模式要能通

Portainer 部署后必须手动验证三件事

点完“Deploy the stack”不代表集群就跑起来了。Webman 集群的脆弱点不在部署动作本身,而在运行时契约是否满足。

  • 进任一 Webman 容器,执行 ps aux | grep start.php,确认只有一个主进程,没有冗余 worker(说明多进程已关)
  • 访问任意实例的 :8787/ping,返回 {"code":0,"msg":"ok"};再停掉一个容器,观察负载是否自动切到其余实例(验证服务发现)
  • 往 runtime/log 写日志后重启容器,检查日志是否还在——若丢失,说明 volumes 挂载没生效或路径不对

最容易被忽略的是 runtime 目录的权限:Docker 默认以 root 启动,但 Webman 写日志要用 www-data 用户,需在 Dockerfile 里加 chown -R www-data:www-data /app/runtime,否则容器启动报错或日志写不进。

相关专题

更多
开发工具有哪些
开发工具有哪些

开发工具有:1、集成开发环境IDE;2、版本控制系统VCS;3、自动化构建工具;4、测试工具;5、代码分析工具。本专题为大家提供开发工具有哪些的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2926

5

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

765

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

6079

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

7157

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

2813

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

319

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

471

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

440

26

Go Docker与容器化部署教程合集
Go Docker与容器化部署教程合集

聚焦 Go 应用的容器化部署优势与实践,讲解 Go 静态编译特性(CGO_ENABLED=0)与 scratch / distroless 极小基础镜像构建、多阶段 Dockerfile 编写规范、交叉编译生成目标平台二进制、镜像安全扫描(Trivy)与漏洞修复、Docker Compose 本地编排开发环境、Kubernetes Deployment / Service / ConfigMap 部署 Go 服务、健康检查(Livene

2026.05.15

325

24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpMyAdmin 安装文档
phpMyAdmin 安装文档

共0课时 | 0人学习

Docker 官方文档
Docker 官方文档

共0课时 | 0人学习

宝塔 Docker 模块使用手册
宝塔 Docker 模块使用手册

共0课时 | 0人学习