Cara Menggunakan Laravel Reverb Dengan Apache

Blair Jersyer Free Resources Jun 20, 2024

Laravel Reverb adalah paket untuk Laravel, kerangka aplikasi web PHP, yang memfasilitasi komunikasi berbasis peristiwa secara real-time. Biasanya menggunakan WebSockets untuk menyediakan pembaruan dan interaksi waktu nyata dalam aplikasi web. Ini berguna untuk aplikasi yang memerlukan pembaruan data instan, seperti aplikasi chat, notifikasi langsung, dan dasbor real-time.

Pada dokumentasi Laravel, terdapat instruksi bagaimana menggunakannya pada lingkungan pengujian dan produksi menggunakan Nginx sebagai server. Namun, tidak ada instruksi yang jelas tentang cara menjalankannya di Apache2. Sebelum mendalami cara membuatnya bekerja di Apache, kita perlu memahami terlebih dahulu cara kerja Laravel Reverb.

Prinsip bekerja

Meskipun Anda mungkin berpikir Laravel Reverb menangani komunikasi bolak-balik melalui Websocket, mempelajari konfigurasinya akan menjelaskan bahwa komunikasi HTTP/HTTPS juga diperlukan. Berdasarkan pengamatan kami, Laravel Reverb membantu frontend untuk menerima kejadian real-time yang dikirimkan di backend (Laravel). Tidak ada panduan yang jelas tentang bagaimana dari frontend Anda dapat menggunakan saluran yang dibuka untuk mengirim pesan ke backend. Untuk melakukannya, Anda perlu mengirim permintaan HTTP ke backend. Logika yang sama berlaku untuk Laravel yang ingin mengirimkan event ke server WebSocket.

Pertimbangkan skenario situs web eCommerce ini di mana pengguna menambahkan produk ke kartu dan kami ingin ikon keranjang menambah jumlah item di keranjang.

Buat Situs Web Luar Biasa

Dengan Elementor pembuat halaman gratis terbaik

Mulai sekarang
  • Langkah pertama adalah terhubung ke server WebSocket menggunakan Laravel Echo (lihat siaran di laravel untuk detail lebih lanjut) dan mendengarkan saluran tertentu.
  • Dari backend, kami akan mengirimkan peristiwa ketika produk keranjang bertambah
  • Laravel akan memicu permintaan POST ke server WebSocket, yang sebagai imbalannya akan mengirimkan pesan ke front end Anda yang terhubung ke suatu saluran.

Berdasarkan skenario ini, mengonfigurasi WebSocket saja tidak cukup untuk membuatnya berfungsi, karena kita juga perlu mengaktifkan dukungan untuk permintaan HTTP.

Mengonfigurasi WebSocket

Laravel Reverb memanfaatkan Node.js untuk menangani komunikasi WebSocket. Selama proses instalasi Laravel Reverb , Anda akan melihat node js terlibat. Dengan membaca dokumentasi Laravel, Anda akan lebih memahami kebutuhan konfigurasi dasar untuk konfigurasi awal Laravel reverb.

Dengan menggunakan:

php artisan install:broadcasting

Anda akan menambahkan pengaturan default ke file .env Anda. Misalnya, : REVERB_APP_ID, REVERB_APP_KEY, dan REVERB_APP_SECRET Anda akan dikonfigurasi dengan nilai khusus default. Bagian yang perlu Anda konfigurasi adalah lokasi server WebSocket dan cara Laravel berkomunikasi dengannya.

Menerapkan WebSocket Pada Subdomain

Idealnya, Anda harus membuat subdomain. Meskipun benar bahwa Anda masih dapat menghosting semuanya di domain yang sama, Anda mungkin akan mendapatkan konfigurasi Apache yang membengkak. Namun, memisahkan beberapa hal akan membantu Anda mengetahui dengan cepat di mana letak masalahnya (menurut saya, Anda dapat melakukannya sesuka Anda).

Pertama-tama mari pastikan file .env kita siap untuk mencapai apa yang ingin kita capai:

  • REVERB_SERVER_HOST: 127.0.0.1
  • REVERB_SERVER_PORT: 8080
  • REVERB_HOST: ws.codewatchers.com
  • REVERB_PORT: 443
  • REVERB_SCHEME: https

Kami akan memutuskan untuk membuat subdomain bernama "ws.codewatchers.com" tempat kami akan menyebarkan server WebSocket kami. Dalam situasi Anda, ubah ws.codewatchers.com ke domain yang Anda sukai.

<VirtualHost *:443>
        ServerName ws.codewatchers.com
        ServerAlias ws.codewatchers.com

        ErrorLog ${APACHE_LOG_DIR}/ws.codewatchers.com-error.log
        CustomLog ${APACHE_LOG_DIR}/ws.codewatchers.com-access.log combined

        SSLEngine on
        SSLProxyEngine on
        SSLCertificateFile /path/to/certificate/local.crt
        SSLCertificateKeyFile /path/to/certificate/local.key

        ProxyPass /app "ws://127.0.0.1:8080/app"
        ProxyPassReverse /app "ws://127.0.0.1:8080/app"
</VirtualHost>

Perhatikan bahwa kami menggunakan SSL di sini, jadi Anda mungkin perlu menerbitkan sertifikat untuk subdomain Anda. Anda dapat menggunakan Certbot untuk itu (Bing Copilot akan membantu Anda untuk itu).

Menambahkan Dukungan Untuk HTTP/S

Seperti disebutkan di atas, server Laravel Reverb juga harus mendukung permintaan HTTP reguler. Untuk itu, kami telah meneruskan melalui proxy semua permintaan yang memiliki /app ke "ws://127.0.0.1:8080/app". Ini adalah segmen URL yang digunakan untuk soket. Selain itu, Laravel menggunakan /apps untuk mengirimkan permintaan POST, jadi kami akan menambahkan konfigurasi baru ke konfigurasi Apache yang kami miliki di atas:

ProxyPass / "http://127.0.0.1:8080/"
ProxyPassReverse / "http://127.0.0.1:8080"

Di sini, kami ingin permintaan lain yang tidak memiliki "/app" (secara ketat) diteruskan melalui permintaan HTTP biasa.

Setelah Anda selesai melakukannya, jangan lupa memuat ulang konfigurasi Apache menggunakan ini:

sudo service apache2 reload

Konfigurasi Supervisor

Supervisor adalah bagian penting dari hal ini, karena kami akan menginstruksikannya untuk mengeksekusi server reverb untuk kami. Bagian baiknya di sini adalah ia akan memulai ulang setiap kali gagal dijalankan. oleh karena itu kami yakin WebSocket akan selalu (atau hampir) berjalan. Laravel memiliki bagian detail singkat untuk Supervisor , namun kita akan membahasnya lebih dalam dan memberikan contoh:

[program:laravel-reverb]
command=php artisan reverb:start
directory=/path/to/your/laravel/project
autostart=true
autorestart=true
stderr_logfile=/path/to/desired/logfile.log
stdout_logfile=/path/to/desired/logfile-out.log
user=ubuntu

Kami berasumsi bahwa Anda menjalankannya di Ubuntu sebagai pengguna " ubuntu ". Anda akan menyesuaikan parameter tersebut sesuai keinginan.

Antrian Dan Penjadwalan Tugas

Jika Anda memiliki antrean yang dieksekusi secara asinkron (database atau redis), Anda perlu memastikan antrean tersebut dikonfigurasi dan berjalan dengan baik. Faktanya, acara yang disiarkan dieksekusi sebagai pekerjaan.

Anda mungkin perlu merujuk ke dokumentasi Laravel untuk mengonfigurasi Penjadwalan Tugas . Secara opsional, Anda akan menginstal Laravel Telescope , untuk memantau pekerjaan Anda dan memeriksa bagaimana hal itu dipicu.

Anda juga dapat menggunakan konsol browser untuk memeriksa cara kerja WebSocket Anda.

Kami harap tutorial ini bermanfaat bagi Anda, jika Anda mengalami masalah saat membaca ini, beri tahu kami.

Divi WordPress Theme