Webman在宝塔面板上不可按传统PHP网站部署,必须禁用pcntl_fork等函数、启用pcntl/posix扩展、使用编译安装PHP、显式绑定0.0.0.0端口并带-d参数启动,推荐进程守护或反向代理方式。

Webman 在宝塔面板上不能当普通 PHP 网站部署——它不走 PHP-FPM,也不依赖 .htaccess 或 Nginx 的 fastcgi_pass,强行套用传统方式只会卡在 502、进程秒退或监听失败。
PHP 版本与扩展必须手动调校
宝塔默认的“极速安装”PHP 会缺失 pcntl、posix、sysvshm 等核心扩展,而 Webman 启动时直接报错:Call to undefined function pcntl_fork()。
- 进【软件商店】→ 找到目标 PHP(推荐
PHP-8.2)→ 必须勾选【编译安装】,不要点“极速安装” - 安装完进该 PHP 的【设置】→ 【禁用函数】列表里,删掉
pcntl_fork、pcntl_wait、posix_kill、proc_open(这些不是安全风险,而是 Webman 运行必需) - 【安装扩展】页中确认已启用:
fileinfo、openssl、pdo_mysql、mbstring、zip;redis和swoole若项目用到,需手动编译,宝塔“一键安装”不可靠
启动命令必须带 -d 且监听地址要显式绑定
Webman 默认只监听 127.0.0.1:8080,若用进程守护或 Supervisor 部署,外部无法访问;若没加 -d,进程会在终端退出后立即终止。
-
start.php中检查$server->listen('0.0.0.0:8080'),不能写成'127.0.0.1:8080'(否则反向代理连不上) - 所有启动命令必须含
-d:例如php start.php start -d,否则只是前台运行,关掉 SSH 就停 - 若改过端口(比如
8090),进程守护或反向代理的目标 URL、监听端口必须同步更新,不一致会导致 502 或连接被拒绝
三种部署方式选哪个?看你的实际需求
不是越复杂越好,也不是越简单越稳——关键看服务暴露方式和运维粒度。
立即学习“PHP免费学习笔记(深入)”;
- 进程守护管理器:适合纯 API 或 WebSocket 服务,直接暴露端口。优点是轻量、启动快;缺点是无日志轮转、无资源限制、崩溃后仅重启,不支持多实例
- 反向代理 + Nginx:适合带域名、HTTPS、静态资源托管的 Web 应用。Nginx 负责 SSL 终止、缓存、限流,Webman 只管业务逻辑。注意:站点 PHP 版本可随便选(甚至不启用),因为 Webman 不走 PHP-FPM
- Supervisor 插件:适合生产级高可用场景,比如要跑 4 个 Worker 实例、自动切日志、内存超限杀进程。但宝塔默认不带,需额外安装第三方插件,Windows 面板暂不支持
权限和路径错误最常导致“启动成功但无响应”
宝塔用 www 用户运行进程,但上传代码后目录属主可能是 root,导致 Webman 加载配置失败、无法写日志、甚至静默退出。
- 确保项目根目录(如
/www/wwwroot/mywebman)及所有子目录属主为www:www:chown -R www:www /www/wwwroot/mywebman - 检查
start.php和config/下配置文件是否可读:ls -l config/app.php,权限建议644 - 别把项目放错位置:Webman 必须放在以
/www/wwwroot/开头的路径下,不能是/home/www/或/root/webman,否则宝塔进程守护根本找不到它 - 日志路径默认在
runtime/log/,如果该目录不可写,Webman 不报错也不记录,只能通过ps aux | grep webman查进程是否存在来间接判断
真正卡住人的从来不是“怎么配”,而是“配完了以为对了,其实某处权限/路径/函数禁用没生效”。上线前务必用 php start.php status 看状态,用 curl http://127.0.0.1:8080 本地测通,再从外网 curl 域名验证反向代理链路是否完整。



















