初试webman 报错 Workerman[start.php] start in DAEMON mode

我们的服务器环境almaLinux php 8.1 Workerman 依赖 pcntl 和 posix 扩展,确保已安装并启用:

php -m | grep -E 'pcntl|posix'

运行结果

pcntl
posix

让我们开始安装项目

composer create-project workerman/webman:~2.0

把项目安装好然后运行程序

php start.php start -d

然后报错了

Workerman[start.php] start in DAEMON mode

直接运行(非守护模式) 去掉 -d 参数直接启动,观察终端输出的错误:

Workerman[start.php] start in DEBUG mode
RuntimeException: stream_socket_server(): Unable to connect to tcp://0.0.0.0:8787 (Address already in use) in /var/www/html/workerman/webman/vendor/workerman/workerman/src/Worker.php:2470
Stack trace:
#0 [internal function]: Workerman\Worker::Workerman\{closure}()
#1 /var/www/html/workerman/webman/vendor/workerman/workerman/src/Worker.php(2472): stream_socket_server()
#2 /var/www/html/workerman/webman/vendor/workerman/workerman/src/Worker.php(585): Workerman\Worker::checkPortAvailable()
#3 /var/www/html/workerman/webman/vendor/workerman/webman-framework/src/support/App.php(147): Workerman\Worker::runAll()
#4 /var/www/html/workerman/webman/start.php(5): support\App::run()
#5 {main}

错误原因 tcp://0.0.0.0:8787 端口已被其他进程占用,导致 Webman/Workerman 无法监听该端口。因为昨天尝试过了webman/admin . 查找占用端口的进程

lsof -i :8787
# 或
netstat -tulnp | grep :8787

返回结果

COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
php     2531411 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531412 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531413 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531414 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531415 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531418 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531421 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531422 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)
php     2531426 root    6u  IPv4 11035990      0t0  TCP *:msgsrvr (LISTEN)

我们需要终止所有相关进程:

sudo kill $(sudo lsof -t -i :msgsrvr)

然后确认服务停止:

sudo lsof -i :msgsrvr

然后再启动程序

php start.php start

终于返回了正确结果

Workerman[start.php] restart
Workerman[start.php] is stopping ...
Workerman[start.php] stop success
-------------------------------------------- WORKERMAN ---------------------------------------------
Workerman/5.1.0         PHP/8.1.32 (Jit off)          Linux/5.14.0-503.31.1.el9_5.x86_64
--------------------------------------------- WORKERS ----------------------------------------------
event-loop  proto       user        worker      listen                 count       state            
select      tcp         root        webman      http://0.0.0.0:8787    8            [OK]            
select      tcp         root        monitor     none                   1            [OK]            
----------------------------------------------------------------------------------------------------
Press Ctrl+C to stop. Start success.

但是通过域名访问,提示无法连接到服务器 然后我们需要确认 Webman 服务状态 确保 Webman 正在运行并监听正确的端口:

ps aux | grep webman
# 或
systemctl status webman  # 如果使用systemd服务管理

然后我们看到结果正常

root     2595354  0.0  2.0 246916 36272 pts/0    S+   08:47   0:00 WorkerMan: master process  start_file=/var/www/html/workerman/webman/start.php
root     2595356  0.0  0.9 246916 17244 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595357  0.0  0.9 246916 17244 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595358  0.0  0.9 246916 17244 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595359  0.0  0.9 246916 17244 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595363  0.0  1.0 246916 17372 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595364  0.0  0.9 246916 17244 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595368  0.0  1.0 246916 17372 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2595369  0.0  0.8 246916 14940 pts/0    S+   08:47   0:00 WorkerMan: worker process  webman http://0.0.0.0:8787
root     2632516  0.0  0.1   3360  1920 pts/2    S+   08:55   0:00 grep --color=auto webman

所以有可能是nginx反向代理出了问题 修改 work.gyqtt.cn 的 Nginx 配置,将请求代理到 Webman 的 8787 端口:

server {
    server_name work.gyqtt.cn;
    listen 443 ssl;
    # ... SSL 配置保持不变 ...

    location / {
        proxy_pass http://127.0.0.1:8787;
        proxy_set_header Host $host;
        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;
    }

    # 移除原有的 PHP 处理块,除非需要同时处理其他 PHP 文件
}

然后我们需要重启nginx

sudo nginx -s reload
或者
systemctl restart nginx 

然后通过域名访问 使用 Nginx 反向代理通过 HTTPS 访问,无需暴露 8787 端口。 https://work.gyqtt.cn 这里因为我们没有做任何修改进入网站会有提示 您的连接不是私密连接 攻击者可能会试图从 work.gyqtt.cn 窃取您的信息(例如:密码、消息或信用卡信息)。详细了解此警告 net::ERR_CERT_COMMON_NAME_INVALID

我们选择继续前往,然后就可以看到成功了

luffy博客
Please login to comment
  • latest comments
  • Total 0 comments