Laravel uygulamalarında real-time WebSocket iletişimi, Laravel Reverb sayesinde her zamankinden daha kolay hale geldi. Reverb, Laravel’in yayın sistemiyle kesintisiz bir şekilde entegre olan bir birinci taraf WebSocket sunucusudur. Bu kılavuzda, Reverb’ü üretim ortamında Nginx arkasında çalıştırmak için gereken her şeyi detaylandıracağım; ayrıca saatlerce hata ayıklama yapmama neden olan noktaları da ele alacağım.
<p>Ne Yapıyoruz<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>Browser (wss://yourdomain.com/app/...)
↓
Nginx :443 ← SSL sonlandırmayı yönetir
↓Reverb :8080 ← sadece iç port, Supervisor tarafından yönetilir
<p>Nginx, tüm kamu trafiğini (HTTP/HTTPS) yönetir ve Reverb, internetle doğrudan ifşa edilmeden, iç port üzerinde çalışır.</p>
<p>Ön Koşullar</p>
<p>Laravel 10+ uygulamanız Nginx üzerinde çalışıyor olmalı.<br/>PHP 8.2+ sürümü.<br/>Node.js & npm.<br/>SSL sertifikası (Let's Encrypt önerilir).<br/>Supervisor kurulu (sudo apt-get install supervisor -y).</p>
<p>Adım 1: Laravel Reverb Kurulumu<br/><code>php artisan install:broadcasting</code></p>
<p>Tüm istemcilere "yes" cevabını verin. Bu, Reverb PHP paketini yanı sıra Laravel Echo ve pusher-js'yi de frontend'e kurar.</p>
<p>Adım 2: .env Dosyanızı Yapılandırın<br/>Burada çoğu kişinin hata yaptığı yer. Önemli olan şu ayarlar:<br/>HTTPS (alan adı ile üretim için)</p>
<p>`BROADCAST_CONNECTION=reverb<br/>QUEUE_CONNECTION=sync</p>
<p>REVERB_APP_ID=your-app-id<br/>REVERB_APP_KEY=your-app-key<br/>REVERB_APP_SECRET=your-app-secret<br/>REVERB_HOST="yourdomain.com"<br/>REVERB_PORT=443<br/>REVERB_SCHEME=https</p>
<p>REVERB_SERVER_HOST=127.0.0.1<br/>REVERB_SERVER_PORT=8080</p>
<p>VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"<br/>VITE_REVERB_HOST="${REVERB_HOST}"<br/>VITE_REVERB_PORT="${REVERB_PORT}"<br/>VITE_REVERB_SCHEME="${REVERB_SCHEME}"`</p>
<p>HTTP (geliştirme / IP tabanlı sunucu için)<br/>`BROADCAST_CONNECTION=reverb<br/>QUEUE_CONNECTION=sync</p>
<p>REVERB_APP_ID=your-app-id<br/>REVERB_APP_KEY=your-app-key<br/>REVERB_APP_SECRET=your-app-secret<br/>REVERB_HOST="your-server-ip"<br/>REVERB_PORT=80<br/>REVERB_SCHEME=http</p>
<p>REVERB_SERVER_HOST=127.0.0.1<br/>REVERB_SERVER_PORT=8080</p>
<p>VITE_REVERB_APP_KEY="${REVERB_APP_KEY}"<br/>VITE_REVERB_HOST="${REVERB_HOST}"<br/>VITE_REVERB_PORT="${REVERB_PORT}"<br/>VITE_REVERB_SCHEME="${REVERB_SCHEME}"`</p>
<p>⚠️ Yaygın hata: QUEUE_CONNECTION=sync ayarını unutmamalısınız. Bunu yapmadığınız takdirde, yayın etkinlikleri ateşlenmeyebilir.</p>
<p>Adım 3: Nginx'i Yapılandırın<br/>Aşağıdaki WebSocket proxy bloklarını Nginx sunucu bloğunuza, `server {<br/>listen 443 ssl;<br/>server_name yourdomain.com;<br/>root /var/www/your-app/public;` kısmından önce ekleyin.</p>
<div class="highlight js-code-highlight">
<pre class="highlight plaintext"><code>ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
Reverb için WebSocket proxy
location /app {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “Upgrade”;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass http://127.0.0.1:8080;
}
location /apps {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “Upgrade”;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass http://127.0.0.1:8080;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /.ht {
deny all;
}


