在CentOS上实现Laravel的热更新,通常需要使用Supervisor来管理Laravel的队列进程,并结合Laravel Echo Server来实现WebSocket通信。以下是详细的步骤:
首先,确保你已经安装了Supervisor。如果没有安装,可以使用以下命令进行安装:
sudo yum install epel-release
sudo yum install supervisor
创建一个新的Supervisor配置文件来管理Laravel队列进程。假设你的Laravel项目位于/var/www/html/laravel_project
,你可以创建一个名为laravel-worker.conf
的文件:
sudo vi /etc/supervisor/conf.d/laravel-worker.conf
在文件中添加以下内容:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravel_project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=your_user
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/html/laravel_project/storage/logs/worker.log
stopwaitsecs=3600
请将your_user
替换为你的实际用户名,并根据需要调整numprocs
参数以匹配你的服务器资源。
启动Supervisor并加载新的配置文件:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
接下来,安装Laravel Echo Server。你可以使用npm来安装它:
cd /var/www/html/laravel_project
npm install -g laravel-echo-server
创建一个配置文件laravel-echo-server.json
:
sudo vi /var/www/html/laravel_project/laravel-echo-server.json
在文件中添加以下内容:
{
"authHost": "http://your_app_domain.com",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "your_app_client_id",
"key": "your_app_client_key"
}
],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": null,
"port": "6001",
"protocol": "http",
"socketio": {},
"sslLocalCertificate": "",
"sslPassphrase": "",
"sslKey": "",
"sslCert": "",
"subscribers": {
"http": true,
"redis": true
},
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
}
请将your_app_domain.com
、your_app_client_id
和your_app_client_key
替换为你的实际值。
使用以下命令启动Laravel Echo Server:
laravel-echo-server start
在你的Laravel项目中,确保你已经安装了必要的依赖包,例如pusher/php-server
和laravel-echo
:
composer require pusher/php-server
npm install --save laravel-echo pusher-js
然后,更新你的.env
文件以配置广播驱动:
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=your_pusher_app_id
PUSHER_APP_KEY=your_pusher_app_key
PUSHER_APP_SECRET=your_pusher_app_secret
PUSHER_APP_CLUSTER=mt1
最后,在config/broadcasting.php
中配置Pusher:
'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,
],
],
现在,你应该能够使用Laravel Echo Server进行实时通信和热更新。你可以通过以下命令测试队列进程是否正常运行:
sudo supervisorctl status laravel-worker:*
如果一切配置正确,你应该能够看到队列进程正在运行,并且WebSocket连接也能够正常工作。
通过以上步骤,你可以在CentOS上实现Laravel的热更新。