ホームページ > バックエンド開発 > PHPチュートリアル > Apacheを使用したLaravelでのリバーブの構成

Apacheを使用したLaravelでのリバーブの構成

Mary-Kate Olsen
リリース: 2024-12-19 07:33:10
オリジナル
209 人が閲覧しました

Configuring Reverb in Laravel with Apache

Reverb は、Laravel でのリアルタイムイベントブロードキャスト用の Pusher の実用的な代替手段です。このガイドでは、Flexible SSL を使用して Cloudflare の背後でホストされているライブ本番システム用に Laravel 11 で Reverb を構成することに焦点を当てています。

前提条件

セットアップに入る前に、次のものが揃っていることを確認してください:

  1. Laravel 11 がインストールされました: Composer を使用して新しい Laravel 11 アプリケーションをセットアップできます。
  2. Apache Web サーバー: Apache がインストールされ、実行されていることを確認します。
  3. Cloudflare アカウント: アプリケーションは、Flexible SSL を有効にして Cloudflare の背後で設定する必要があります。

リバーブをインストールする

始めるには、Laravel プロジェクトに Reverb をインストールする必要があります。次の Composer コマンドを実行します:

composer require laravel/reverb
ログイン後にコピー

インストール後、構成ファイルを公開します:

php artisan vendor:publish --provider="Laravel\Reverb\ReverbServiceProvider"
ログイン後にコピー

これにより、リバーブの設定を調整できる config/reverb.php ファイルが作成されます。

リバーブ構成例

以下はリバーブの設定例です:

<?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設定

次の環境変数が .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 
ログイン後にコピー

イベントの作成

次のアーティザン コマンドを使用して、新しいイベント クラスを生成します。

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';
    }
}
ログイン後にコピー

Laravelブレードの例

リバーブ機能をテストするための簡単な Blade テンプレートを作成します (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の構成

次のコマンドを実行して、必要な 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>
ログイン後にコピー

サービスの実行

サービスを開始するには、イベント ワーカーと Rebel サーバーを起動する必要があります。
次のコマンドを実行してイベント ワーカーを開始します:

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 通信が確保され、WebSocket 接続が正しく機能しなくなる可能性がある SSL/TLS の不一致の問題が回避されます。

以上がApacheを使用したLaravelでのリバーブの構成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート