Reverb는 Laravel의 실시간 이벤트 방송을 위한 Pusher의 실용적인 대안입니다. 이 가이드는 유연한 SSL을 사용하여 Cloudflare 뒤에서 호스팅되는 라이브 프로덕션 시스템을 위해 Laravel 11에서 Reverb를 구성하는 데 중점을 둡니다.
설정을 시작하기 전에 다음 사항을 확인하세요.
시작하려면 Laravel 프로젝트에 Reverb를 설치해야 합니다. 다음 Composer 명령을 실행하세요:
composer require laravel/reverb
설치 후 구성 파일을 게시하세요.
php artisan vendor:publish --provider="Laravel\Reverb\ReverbServiceProvider"
Reverb 설정을 조정할 수 있는 config/reverb.php 파일이 생성됩니다.
다음은 Reverb 구성의 예입니다.
<?php return [ 'default' => env('REVERB_SERVER', 'reverb'), 'servers' => [ 'reverb' => [ 'host' => env('REVERB_HOST', '0.0.0.0'), 'port' => env('REVERB_PORT', 6001), 'hostname' => env('REVERB_HOST'), 'options' => [ 'tls' => [], ], 'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000), 'scaling' => [ 'enabled' => env('REVERB_SCALING_ENABLED', false), 'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'), 'server' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'port' => env('REDIS_PORT', '6379'), 'username' => env('REDIS_USERNAME'), 'password' => env('REDIS_PASSWORD'), 'database' => env('REDIS_DB', '0'), ], ], 'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15), 'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15), ], ], 'apps' => [ 'provider' => 'config', 'apps' => [ [ 'key' => env('REVERB_APP_KEY'), 'secret' => env('REVERB_APP_SECRET'), 'app_id' => env('REVERB_APP_ID'), 'options' => [ 'host' => env('REVERB_HOST'), 'port' => env('REVERB_PORT', 443), 'scheme' => env('REVERB_SCHEME', 'https'), 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', ], 'allowed_origins' => ['*'], 'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60), 'activity_timeout' => env('REVERB_APP_ACTIVITY_TIMEOUT', 30), 'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000), ], ], ], ];
다음 환경 변수가 .env 파일에 올바르게 구성되어 있는지 확인하세요.
BROADCAST_CONNECTION=reverb QUEUE_CONNECTION=database REVERB_HOST=127.0.0.1 REVERB_PORT=6001 REVERB_APP_ID=<app-key> REVERB_APP_KEY=<app-key> REVERB_APP_SECRET=<app-secret> REVERB_SCHEME=http VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" VITE_REVERB_HOST="example.com" VITE_REVERB_PORT=443 VITE_REVERB_SCHEME=https
새 이벤트 클래스를 생성하려면 다음 Artisan 명령을 사용하세요.
php artisan make:event MessageSent
다음은 MessageSent 이벤트 구현의 예입니다.
<?php namespace App\Events; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\Channel; class MessageSent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $message; public function __construct($message) { $this->message = $message; } public function broadcastOn(): Channel { return new Channel('chat-channel'); } public function broadcastAs(): string { return 'message-sent'; } }
Reverb 기능을 테스트하기 위한 간단한 블레이드 템플릿 만들기(welcome.blade.php):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>Laravel Reverb WebSocket Test</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/pusher/8.3.0/pusher.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/laravel-echo/1.17.1/echo.iife.min.js"></script> </head> <body> <h1>Laravel Reverb WebSocket Test</h1> <p>Open the console to see WebSocket messages.</p> <button> <h2> Defining Routes </h2> <p>Below is the code to define the required routes:<br> </p> <pre class="brush:php;toolbar:false"><?php use Illuminate\Support\Facades\Route; use App\Events\MessageSent; Route::post('/send-message', function (\Illuminate\Http\Request $request) { event(new MessageSent($request->input('message'))); return response()->json(['success' => true]); }); Route::get('/', function () { return view('welcome'); });
필요한 Apache 모듈을 활성화하려면 다음 명령을 실행하세요.
sudo a2enmod proxy sudo a2enmod proxy_wstunnel sudo a2enmod rewrite
아래는 Apache VirtualHost 설정에 대한 구성 예입니다.
<VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com DocumentRoot /var/www/example.com/public ProxyPreserveHost On ProxyRequests Off ProxyPass /app ws://127.0.0.1:6001/app ProxyPassReverse /app ws://127.0.0.1:6001/app SetEnvIf X-Forwarded-Proto https HTTPS=on ErrorLog /var/www/logs/example.com_error.log CustomLog /var/www/logs/example.com_access.log combined </VirtualHost> <Directory /var/www/example.com> Options -Indexes +FollowSymLinks -MultiViews AllowOverride All Require all granted </Directory>
서비스를 시작하려면 이벤트 워커와 반란군 서버를 실행해야 합니다.
이벤트 작업자를 시작하려면 다음 명령을 실행하십시오.
php artisan queue:work
지정된 포트와 호스트에서 Rebel 서버를 시작하려면 아래 명령을 사용하십시오.
php artisan reverb:start --port=6001 --host=0.0.0.0
Laravel Echo 및 Pusher에 CDN을 사용하지 않는 경우 실시간 이벤트 브로드캐스팅을 애플리케이션에 통합하려면 필수 npm 라이브러리(pusher-js 및 laravel-echo)를 설치해야 합니다. 이 설정에는 프로젝트 내의 라이브러리를 관리하고 번들링하기 위한 프런트엔드 빌드 프로세스가 필요합니다.
전체 SSL을 사용하여 Cloudflare 뒤에서 호스팅되는 애플리케이션의 경우 적절하게 정의된 SSL 인증서를 사용하여 별도의 VirtualHost를 구성해야 합니다. 이렇게 하면 안전한 WebSocket 통신이 보장되고 SSL/TLS 불일치 문제를 방지하여 WebSocket 연결이 올바르게 작동하지 못하게 할 수 있습니다.
위 내용은 Apache를 사용하여 Laravel에서 Reverb 구성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!