Dacă ai observat că forumul tău Flarum îngheață timp de 2-3 secunde atunci când cineva își creează un cont, când dă click pe „Post Reply” sau când se trimite o notificare, nu te grăbi să dai vina pe baza de date sau pe hosting-ul slab. Problema este modul în care Flarum gestionează trimiterea de mailuri în mod implicit.
În mod nativ, Flarum rulează cozile de așteptare pe driverul sync. Asta înseamnă că atunci când un utilizator face o acțiune care declanșează un e-mail (cum ar fi o înregistrare sau o notificare de thread nou), serverul blochează execuția paginii web până când SMTP-ul răspunde și trimite e-mailul. Dacă SMTP-ul extern are o mică latență, utilizatorul va simți un lag enervant.
Soluția este să muți aceste sarcini în fundal folosind o coadă de baze de date (database queue).
Pasul 1: Configurarea cozii în baza de date
Pentru a-i spune lui Flarum să nu mai trimită mailurile pe loc, ci să le pună într-un tabel în baza de date și să le proceseze separat, trebuie să modifici fișierul config.php din folderul rădăcină al forumului.
Deschide config.php și adaugă (sau modifică) cheia queue în array-ul de configurare:
'queue' => [
'driver' => 'database',
'table' => 'queue_jobs',
'queue' => 'default',
'retry_after' => 90,
],
După ce ai salvat fișierul, Flarum va începe să scrie toate joburile de notificare în tabelul queue_jobs în loc să le trimită direct. Utilizatorii vor vedea că paginile se încarcă instant, dar mailurile nu vor pleca încă, deoarece avem nevoie de un worker care să le proceseze.
Pasul 2: Configurarea workerului pe server (VPS - systemd)

Dacă ai acces SSH la serverul tău VPS, cea mai stabilă metodă este să folosești un serviciu systemd care să ruleze în fundal și să monitorizeze coada.
Creează un fișier de serviciu nou în /etc/systemd/system/flarum-queue.service:
[Unit]
Description=Flarum Queue Worker
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/flarum
ExecStart=/usr/bin/php flarum queue:work
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Notă: Modifică User în funcție de utilizatorul web (poate fi nginx sau www-data) și /var/www/flarum cu calea reală către folderul tău Flarum.
Rulează următoarele comenzi ca să activezi și să pornești serviciul:
sudo systemctl daemon-reload
sudo systemctl enable flarum-queue.service
sudo systemctl start flarum-queue.service
Poți verifica dacă funcționează corect folosind:
sudo systemctl status flarum-queue.service
Pasul 3: Alternativa pentru Shared Hosting (Cron Job)
Dacă rulezi Flarum pe un hosting partajat și nu ai acces la systemd, nu poți lăsa un daemon să ruleze continuu. Va trebui să folosești un Cron Job setat din cPanel.
Adaugă un Cron Job care să ruleze în fiecare minut:
* * * * * cd /calea/catre/flarum && php flarum queue:work --stop-when-empty >/dev/null 2>&1
Parametrul --stop-when-empty îi spune scriptului să proceseze toate mailurile aflate în coadă și apoi să se închidă singur, evitând astfel consumul inutil de resurse pe hosting-ul shared.
Cum verifici dacă totul este în regulă

- Creează un cont de test pe forum. Înregistrarea ar trebui să se facă instantaneu, fără acele secunde de așteptare.
- Verifică dacă ai primit mailul de activare.
- Dacă mailul nu ajunge, verifică tabelul
queue_jobs din baza de date. Dacă tabelul se umple de rânduri și nu scade, înseamnă că workerul (systemd sau cron-ul) nu rulează sau are o eroare de permisiuni.
Voi cum gestionați cozile în Flarum? Ați rămas pe baza de date sau ați trecut la Redis pentru comunități mai mari?