【问题标题】:Laravel Websocket won't Connect on production using supervisor on centos 7Laravel Websocket 不会在 centos 7 上使用主管连接生产
【发布时间】:2021-12-24 11:15:41
【问题描述】:

我不熟悉在 CentOS 服务器上处理主管之类的事情,我寻求帮助以解决此问题。


我遇到了Laravel websockets (beyondco) 的问题。 在 localhost 中,一切正常,但在生产中,我开始为 centos 7 安装主管包,并按照文档中的步骤逐步进行。

安装主管包后,我将进入目录 /etc/supervisord.d 并创建 websockets.conf 并使用以下内容 vim 文件:


websockets.conf(我猜这个文件配置错误)

[program:websockets] 
command=/usr/bin/php/home/cpanel_real_user_name/artisan websockets:serve --host 0.0.0.0.0(cpanel-real -ip_address) --port 6001
numprocs=1 autostart=true
autorestart=true
user=root

然后我通过运行命令systemctl status supervisor检查supervisor的状态,结果是

    Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-11-12 20:38:56 EET; 29min ago
     Docs: http://supervisord.org
 Main PID: 18122 (supervisord)
   CGroup: /system.slice/supervisord.service
           └─18122 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf

但是当我尝试运行 supervisorctl start websockets 时,它会返回 websockets: ERROR (no such process)

supervisord.conf

[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file) 
;chmod=0700                 ; sockef file mode (default 0700) 
;chown=nobody:nogroup       ; socket file uid:gid owner 
;username=user              ; (default is no username (open server)) 
;password=123               ; (default is no password (open server)) 

;[inet_http_server]         ; inet (TCP) server disabled by default 
;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface) 
;username=user              ; (default is no username (open server)) 
;password=123               ; (default is no password (open server)) 

[supervisord] 
logfile=/var/log/supervisor/supervisord.log  ; (main log file;default $CWD/supervisord.log) 
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB) 
logfile_backups=10          ; (num of main logfile rotation backups;default 10) 
loglevel=info               ; (log level;default info; others: debug,warn,trace) 
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) 
nodaemon=false              ; (start in foreground if true;default false) 
minfds=1024                 ; (min. avail startup file descriptors;default 1024) 
minprocs=200                ; (min. avail process descriptors;default 200) 
;umask=022                  ; (process file creation umask;default 022) 
;user=chrism                 ; (default is current user, required if root) 
;identifier=supervisor       ; (supervisord identifier, default is 'supervisor') 
;directory=/tmp              ; (default is not to cd during start) 
;nocleanup=true              ; (don't clean up tempfiles at start;default false) 
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP) 
;environment=KEY=value       ; (key value pairs to add to environment) 
;strip_ansi=false            ; (strip ansi escape codes in logs; def. false) 

; the below section must remain in the config file for RPC 
; (supervisorctl/web interface) to work, additional interfaces may be 
; added by defining them in separate rpcinterface: sections 
[rpcinterface:supervisor] 
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface 

[supervisorctl] 
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket 
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket 
;username=chris              ; should be same as http_username if set 
;password=123                ; should be same as http_password if set 
;prompt=mysupervisor         ; cmd line prompt (default "supervisor") 
;history_file=~/.sc_history  ; use readline history if available 

; The below sample program section shows all possible program subsection values, 
; create one or more 'real' program: sections to be able to control them under 
; supervisor. 

;[program:theprogramname] 
;command=/bin/cat              ; the program (relative uses PATH, can take args) 
;process_name=%(program_name)s ; process_name expr (default %(program_name)s) 
;numprocs=1                    ; number of processes copies to start (def 1) 
;directory=/tmp                ; directory to cwd to before exec (def no cwd) 
;umask=022                     ; umask for process (default None) 
;priority=999                  ; the relative start priority (default 999) 
;autostart=true                ; start at supervisord start (default: true) 
;autorestart=true              ; retstart at unexpected quit (default: true) 
;startsecs=10                  ; number of secs prog must stay running (def. 1) 
;startretries=3                ; max # of serial start failures (default 3) 
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2) 
;stopsignal=QUIT               ; signal used to kill process (default TERM) 
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10) 
;user=chrism                   ; setuid to this UNIX account to run the program 
;redirect_stderr=true          ; redirect proc stderr to stdout (default false) 
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO 
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB) 
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10) 
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0) 
;stdout_events_enabled=false   ; emit events on stdout writes (default false) 
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO 
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB) 
;stderr_logfile_backups=10     ; # of stderr logfile backups (default 10) 
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0) 
;stderr_events_enabled=false   ; emit events on stderr writes (default false) 
;environment=A=1,B=2           ; process environment additions (def no adds) 
;serverurl=AUTO                ; override serverurl computation (childutils) 

; The below sample eventlistener section shows all possible 
; eventlistener subsection values, create one or more 'real' 
; eventlistener: sections to be able to handle event notifications 
; sent by supervisor.

;[eventlistener:theeventlistenername] 
;command=/bin/eventlistener    ; the program (relative uses PATH, can take args) 
;process_name=%(program_name)s ; process_name expr (default %(program_name)s) 
;numprocs=1                    ; number of processes copies to start (def 1) 
;events=EVENT                  ; event notif. types to subscribe to (req'd) 
;buffer_size=10                ; event buffer queue size (default 10) 
;directory=/tmp                ; directory to cwd to before exec (def no cwd) 
;umask=022                     ; umask for process (default None) 
;priority=-1                   ; the relative start priority (default -1) 
;autostart=true                ; start at supervisord start (default: true) 
;autorestart=unexpected        ; restart at unexpected quit (default: unexpected) 
;startsecs=10                  ; number of secs prog must stay running (def. 1)
;startretries=3                ; max # of serial start failures (default 3) 
;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2) 
;stopsignal=QUIT               ; signal used to kill process (default TERM) 
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10) 
;user=chrism                   ; setuid to this UNIX account to run the program 
;redirect_stderr=true          ; redirect proc stderr to stdout (default false) 
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO 
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB) 
;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10) 
;stdout_events_enabled=false   ; emit events on stdout writes (default false) 
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO 
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB) 
;stderr_logfile_backups        ; # of stderr logfile backups (default 10) 
;stderr_events_enabled=false   ; emit events on stderr writes (default false) 
;environment=A=1,B=2           ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)

; The below sample group section shows all possible group values, 
; create one or more 'real' group: sections to create "heterogeneous" 
; process groups.

;[group:thegroupname] 
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions 
;priority=999                  ; the relative start priority (default 999) 

; The [include] section can just contain the "files" setting.  This 
; setting can list multiple files (separated by whitespace or 
; newlines).  It can also contain wildcards.  The filenames are 
; interpreted as relative to this file.  Included files *cannot* 
; include files themselves. 

[include] 
files = supervisord.d/*.ini (am try to change it to *.conf)

Laravel 网络套接字配置

/config/广播

'connections' => [
    'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'useTLS' => true,
            'host' => 'real_cpanel_ip_adrress',
            'port' => 6001,
            'scheme' => 'https'
        ],
    ],

resources/js/bootstrap.js

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');
 
window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    wsHost: window.location.hostname,
    wsPort: 6001,
    forceTLS: true,
    disableStats: true,
});

很抱歉这篇长文,但我没有关于主管的背景,我遵循文档但没有得到成功的结果,所以我分享所有信息,以便在仍有缺失的情况下捕获。

【问题讨论】:

    标签: php laravel websocket supervisord pusher-js


    【解决方案1】:

    注意我投票结束这个问题是一个错字,bcs就是这样。但还有其他细节不适合发表评论。

    在您的websockets.conf 中,此行有错字:

    command=/usr/bin/php/home/cpanel_real_user_name/artisan websockets:serve --host 0.0.0.0.0(cpanel-real -ip_address) --port 6001
    

    artisan 是一个 PHP 文件,位于 Laravel 项目的根目录中。您可以通过调用php artisan 来运行它。所以我们可以看到你的 websockets 命令缺少一个空格:

    command=/usr/bin/php /home/cpanel_real_user_name/artisan websockets: ...
    #                   ^ missing space!
    

    你可以在the Laravel documentation about supervisord configuration看到这个。

    我也注意到这一行:

    numprocs=1 autostart=true
    

    真的是一行2个参数。我不知道主管是否支持这一点,但是当很明显每行需要 1 个参数时,为什么还要冒险:

    numprocs=1
    autostart=true
    

    最后,请注意,当您更改配置时,主管要求您re-read and update(我想硬服务关闭/重启也应该起作用):

    supervisorctl reread
    supervisorctl update
    

    【讨论】:

    • 感谢帮助它现在工作正常,注意复制代码时有重复的行,主要问题是您引用的缺少空间 websockets.conf 文件
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-05-26
    相关资源
    最近更新 更多