Kako uporabljati Laravel Reverb z Apache

Blair Jersyer Free Resources Jun 20, 2024

Laravel Reverb je paket za Laravel, ogrodje spletne aplikacije PHP, ki omogoča komunikacijo v realnem času, ki temelji na dogodkih. Običajno uporablja WebSockets za zagotavljanje posodobitev in interakcij v realnem času v spletnih aplikacijah. To je uporabno za aplikacije, ki zahtevajo takojšnje posodobitve podatkov, kot so aplikacije za klepet, obvestila v živo in nadzorne plošče v realnem času.

V dokumentaciji Laravel so navodila za uporabo v testnem okolju in v produkciji z uporabo Nginxa kot strežnika. Vendar pa ni jasnih navodil, kako naj deluje na Apache2. Preden se poglobimo v to, kako naj deluje na Apacheju, moramo najprej razumeti, kako Laravel Reverb deluje.

Načelo delovanja

Čeprav morda mislite, da Laravel Reverb upravlja komunikacijo naprej in nazaj prek Websocketa, bo poglobitev v konfiguracijo pokazala, da obstaja tudi potreba po komunikaciji HTTP/HTTPS. Na podlagi našega opazovanja Laravel Reverb pomaga sprednjemu delu sprejemati dogodke v realnem času, poslane na ozadju (Laravel). Ni jasnega vodnika o tem, kako lahko iz čelnega dela uporabite odprt kanal za pošiljanje sporočil v zaledje. Če želite to narediti, morate v zaledje poslati zahtevo HTTP. Ista logika velja za Laravel, ki želi pošiljati dogodke na strežnik WebSocket.

Razmislite o tem scenariju spletnega mesta e-trgovine, kjer uporabnik dodaja izdelke na kartico in želimo, da ikona vozička poveča število artiklov v vozičku.

Ustvarite neverjetna spletna mesta

Z najboljšim brezplačnim graditeljem strani Elementor

Začni zdaj
  • Prvi korak bo povezovanje s strežnikom WebSocket z uporabo Laravel Echo (za dodatne podrobnosti glejte oddajanje na laravel ) in poslušanje določenega kanala.
  • Iz ozadja bomo poslali dogodek, ko se bo izdelek v košarici povečal
  • Laravel bo sprožil zahtevo POST strežniku WebSocket, ki bo v zameno poslal sporočilo vašemu sprednjemu delu, ki je povezan s kanalom.

Na podlagi tega scenarija samo konfiguriranje WebSocketa ni dovolj, da bi delovalo, saj moramo omogočiti tudi podporo za zahtevo HTTP.

Konfiguriranje WebSocket

Laravel Reverb uporablja Node.js za upravljanje komunikacije WebSocket. Med postopkom namestitve Laravel Reverb boste opazili, da je nekako vpleteno vozlišče js. Če preberete dokumentacijo Laravel, boste bolje razumeli osnovne konfiguracijske potrebe za začetno konfiguracijo Laravel reverb.

Z uporabo:

php artisan install:broadcasting

Datoteki .env boste dodali privzete nastavitve. Na primer, vaše: REVERB_APP_ID, REVERB_APP_KEY in REVERB_APP_SECRET bodo konfigurirane s privzetimi vrednostmi po meri. Del, ki ga boste morali konfigurirati, je lokacija strežnika WebSocket in kako Laravel komunicira z njim.

Namestitev WebSocket na poddomeni

V idealnem primeru boste morali ustvariti poddomeno. Čeprav je res, da lahko še vedno gostite vse na isti domeni, boste morda imeli napihnjeno konfiguracijo Apache. Vendar pa boste z razdelitvijo stvari hitro opazili, kje bi lahko bila težava (to je moje mnenje, lahko naredite, kar želite).

Najprej se prepričajmo, da je naša datoteka .env pripravljena za to, kar želimo doseči:

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

Odločili se bomo ustvariti poddomeno z imenom "ws.codewatchers.com", kjer bomo uvedli naš strežnik WebSocket. V vaši situaciji spremenite ws.codewatchers.com v domeno po vaših željah.

<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>

Upoštevajte, da tukaj uporabljamo SSL, zato boste morda morali imeti izdano potrdilo za svojo poddomeno. Za to lahko uporabite Certbot (pri tem vam bo pomagal Bing Copilot).

Dodajanje podpore za HTTP/S

Kot je navedeno zgoraj, mora strežnik Laravel Reverb podpirati tudi običajno zahtevo HTTP. Za to smo prek posrednika posredovali vse zahteve, ki imajo /app, na "ws://127.0.0.1:8080/app". To je segment URL-ja, ki se uporablja za vtičnice. Poleg tega Laravel uporablja /apps za pošiljanje zahtev POST, zato bomo konfiguraciji Apache, ki jo imamo zgoraj, dodali novo konfiguracijo:

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

Tukaj želimo, da se druge zahteve, ki nimajo "/app" (strogo), posredujejo prek običajnih zahtev HTTP.

Ko končate s tem, ne pozabite znova naložiti konfiguracije Apache s tem:

sudo service apache2 reload

Konfiguracija nadzornika

Nadzornik je pomemben del tega, saj mu bomo naročili, da namesto nas izvede strežnik za odmev. Dober del tukaj je, da ga bo znova zagnal vsakič, ko se ne izvede. zato smo prepričani, da bo WebSocket vedno (ali skoraj) deloval. Laravel ima kratek podroben razdelek za Supervisor , vendar se bomo poglobili in dali primer:

[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

Predpostavili bomo, da ga izvajate v Ubuntuju kot uporabnik " ubuntu ". Te parametre boste prilagodili po želji.

Čakalne vrste in razporejanje opravil

Če imate čakalne vrste, ki se izvajajo asinhrono (baza podatkov ali redis), se morate prepričati, da je dobro konfigurirana in deluje. Pravzaprav se dogodki, ki se predvajajo, izvajajo kot opravila.

Morda se boste morali obrniti na dokumentacijo Laravel za konfiguracijo razporejanja opravil . Po želji boste namestili Laravel Telescope , da boste spremljali svoja opravila in pregledovali, kako se sprožijo.

Uporabite lahko tudi konzolo brskalnika, da preverite, kako deluje vaš WebSocket.

Upamo, da vam je bila ta vadnica v pomoč. Če ste med branjem tega imeli kakršne koli težave, nam to sporočite.

Divi WordPress Theme