跳转到主内容
极星编程网:以代码为星,赴技术山海!

Webman部署到Linux服务器流程_Webman生产环境上线配置【指南】

Webman在Linux生产环境能稳定运行,必须同时满足五个硬性条件:PHP 8.0+、pcntl/posix/event真启用(需php --ri验证未被disable_functions屏蔽)、debug关闭、runtime目录权限与systemd用户严格一致、Nginx反代透传Connection/Upgrade头且proxy_pass不带尾部斜杠。 Webman 能不能在 Linux 生产环境跑起来,不取决于你写了多少路由,而取决于五个硬性条件是否全部满足:PHP 8.0+、
pcntl
/
posix
/
event
真启用、
debug
关闭、
runtime/
目录权限匹配 systemd 用户、Nginx
proxy_pass
配置里没漏掉
Connection
和
Upgrade
头。缺一个,服务就可能“启动成功但实际不可用”。 检查 pcntl/posix/event 是否真可用,不是只看 php -m 很多部署失败卡在这一步:执行
php -m | grep -E "pcntl|posix|event"
看起来都加载了,但
php start.php start -d
一运行就退出,日志也没报错。 必须验证扩展是否被
disable_functions
屏蔽:运行
php --ri pcntl
,如果输出里有
Directive => Local Value
行,才算真激活;若只有模块名,大概率是
pcntl_fork
或
posix_kill
被禁用了
event
不是可选:Ubuntu/Debian 需额外装
php-event
包;CentOS/RHEL 得用
pecl install event
编译,且系统级
libevent
库必须已安装(
ldconfig -p | grep event
可查) 别信宝塔面板 PHP 设置页的“已启用”勾选框——进去手动翻
php.ini
,确认
disable_functions
里没写
pcntl_fork,pcntl_waitpid,posix_kill
Nginx proxy_pass 必须透传真实 IP 和 WebSocket 头 只写
proxy_pass http://127.0.0.1:8787
是最常见错误配置。它会导致两个后果:
$request->ip()
拿到全是
127.0.0.1
,所有基于 IP 的限流/风控失效;WebSocket 连接建立后几秒就断开,因为 Upgrade 请求被静默降级。 真实 IP 传递必须加这三行:
proxy_set_header X-Real-IP $remote_addr
、
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
、
proxy_set_header X-Forwarded-Proto $scheme
WebSocket 支持必须加这三行:
proxy_http_version 1.1
、
proxy_set_header Connection "upgrade"
、
proxy_set_header Upgrade $http_upgrade
proxy_pass
后面不能带斜杠:
http://127.0.0.1:8787/
会把路径前缀吃掉,比如你 route 定义的是
/api/v1
,实际收到的是
//api/v1
systemd 服务配置必须和 runtime/ 目录归属严格一致 服务能启动、也能 curl 通,但第二天发现日志不写了、session 文件消失、缓存不命中——90% 是因为 systemd 启动进程的用户和
runtime/
所有者不一致。Linux 权限机制不会报错,只会默默拒绝写入。 Docker Desktop(linux) 当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。 下载 Ubuntu/Debian 下,设
User=www-data
,同时执行:
sudo chown -R www-data:www-data runtime/
CentOS/RHEL 下,设
User=nginx
,对应执行:
sudo chown -R nginx:nginx runtime/
务必检查
WorkingDirectory
指向项目根目录(如
/var/www/webman
),否则
start.php
读不到 config 别漏掉
Restart=always
和
RestartSec=3
,否则 worker 崩溃后不会自动拉起 启动后必须三步验证,不能只看命令返回 success
php start.php start -d
执行完就关终端?这是最危险的操作。Webman 启动是异步 fork 多进程,主进程退出不代表 worker 起来了。 查进程:
ps aux | grep webman
,应看到至少两个进程:
php start.php start
(master)和若干
worker
子进程 查端口:
ss -tlnp | grep :8787
(或你自定义的端口),确认监听地址是
0.0.0.0:8787
而非
127.0.0.1:8787
(后者 Nginx 无法反代) 查日志:
tail -f runtime/log/202605/xxxx.log
,重点看有没有
Worker started
或
Server started
字样;如果 log 目录为空,先检查
runtime/
权限 最容易被忽略的点是
disable_functions
和
proxy_pass
尾部斜杠——它们不报错,但让整个服务处于“半瘫痪”状态。上线前拿一台测试机,按这四步走一遍,比上线后再救火快十倍。

相关文章