Dacă ai instalat Flarum și ai observat că utilizatorii noi așteaptă zeci de secunde după ce dau click pe înregistrare, sau că notificările prin email pleacă extrem de greu, problema nu este neapărat la serverul SMTP.
Implicit, Flarum rulează toate sarcinile grele (trimiterea de emailuri, notificări push, sincronizări) în mod sincron. Asta înseamnă că vizitatorul tău așteaptă ca serverul să trimită fizic emailul înainte ca pagina să i se încarce în browser.
Problema: De ce se blochează Flarum la acțiuni simple
Când cineva postează într-un topic cu mulți abonați, Flarum trebuie să trimită zeci de emailuri. Dacă driverul de queue (coadă) este setat pe sync, PHP-ul va încerca să trimită acele mailuri unul câte unul în timp ce utilizatorul se uită la o pagină care se încarcă la nesfârșit. Dacă SMTP-ul dă timeout, utilizatorul primește o eroare 500, deși postarea a fost salvată în baza de date.
Soluția este să delegăm aceste procese către o coadă de așteptare. Flarum va salva acțiunea în baza de date și va afișa pagina instant utilizatorului, iar un proces de fundal se va ocupa de trimiterea mailurilor în liniște.
Cum muți cozile pe baza de date (fără Redis)

Dacă ești pe un VPS, Redis este sfânt. Dar dacă folosești un hosting shared clasic (cPanel), nu ai acces la Redis. Din fericire, putem folosi baza de date a forumului pentru asta.
Deschide fișierul config.php din rădăcina Flarum și caută array-ul de configurare. Trebuie să adaugi sau să modifici cheia queue ca să arate așa:
'queue' => [
'driver' => 'database',
'table' => 'queue_jobs',
],
Dacă folosești o versiune recentă de Flarum, tabelul este deja pregătit. În caz contrar, rulează o migrare din terminal:
php flarum migrate
Configurarea Cron-ului (Pasul critic)
După ce ai setat driverul pe database, Flarum nu mai trimite mailurile instant. Doar le salvează în tabelul queue_jobs. Cineva trebuie să vină din spate și să le execute.
Pe un VPS am folosi Supervisor ca să ținem pornit php flarum queue:work la nesfârșit. Pe shared hosting nu putem face asta. Soluția este un Cron Job configurat din cPanel sau direct în crontab.
Cea mai stabilă metodă pe shared hosting ca să nu consumi resurse non-stop și să nu te blocheze providerul este să pui în cron:
* * * * * /usr/local/bin/php /home/utilizator/public_html/flarum queue:work --stop-when-empty >> /dev/null 2>&1
Ajustează calea către executabilul PHP și calea folderului unde ai Flarum instalat.
Parametrul --stop-when-empty îi spune PHP-ului să ruleze, să curețe tot ce e în așteptare în coadă, iar când coada e goală, procesul se închide singur. Cronul va reporni procesul minutul următor.
Cum verifici dacă totul funcționează corect

După ce ai salvat configurările, înregistrează un cont nou de test pe forum:
- Pagina de finalizare ar trebui să se încarce instant, fără acea secundă de agățare.
- Intră în baza de date în tabelul
queue_jobs. Dacă vezi rânduri adăugate acolo care dispar în mai puțin de un minut, înseamnă că cronul își face treaba perfect.
Voi ce folosiți pentru cozile de așteptare pe forumurile voastre? Ați rămas pe baza de date sau ați făcut pasul spre Redis pe un VPS dedicat?