Dacă ai instalat un forum Flarum și ai observat că uneori, când un utilizator apasă pe „Postează” sau își creează un cont, pagina se învârte în gol timp de 5-10 secunde, problema nu este de la resursele VPS-ului. Cel puțin, nu direct.
În mod implicit, Flarum procesează notificările și trimiterea de emailuri direct în timpul conexiunii HTTP. Asta înseamnă că dacă serverul de mail (SMTP) are o mică latență, utilizatorul tău va aștepta până când mail-ul este trimis fizic înainte de a vedea pagina încărcată.
Soluția este simplă: mutarea acestor sarcini în fundal (cozi de așteptare/queue).
Pasul 1: Activarea cozii în baza de date
Dacă folosești o bază de date clasică (MariaDB/MySQL) și nu vrei să te complici din prima cu Redis, poți folosi driverul de bază de date integrat în Flarum.
Mai întâi, verifică dacă ai extensia de cozi activată (este integrată implicit în Flarum). Apoi, trebuie să îi spunem sistemului să nu mai ruleze cozile „sync” (sincron), ci să le stocheze în baza de date.
Deschide fișierul config.php din rădăcina instalării Flarum și adaugă sau modifică cheia queue:
'queue' => [
'driver' => 'database',
'table' => 'queue_jobs',
'queue' => 'default',
'retry_after' => 90,
],
Din acest moment, Flarum nu mai trimite mailurile instant. Le va scrie în tabela queue_jobs. Dar pentru ca ele să fie trimise efectiv, avem nevoie de un proces care să ruleze permanent pe server și să citească acea tabelă.
Pasul 2: Configurarea unui serviciu systemd pe Linux
Nu folosi un simplu cron pentru asta. Cron-ul rulează o dată pe minut, ceea ce înseamnă că notificările vor avea întârzieri mari. Cea mai stabilă metodă este să rulezi un proces daemon prin systemd care să asculte în permanență.
Creează un fișier de configurare pentru serviciu:
sudo nano /etc/systemd/system/flarum-queue.service
Adaugă următorul text, adaptând calea către instalarea ta Flarum și utilizatorul sistemului (de obicei www-data pe Ubuntu):
[Unit]
Description=Flarum Queue Worker
After=network.target
[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/flarum/flarum queue:work --daemon --tries=3
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=flarum-queue
[Install]
WantedBy=multi-user.target
Salvează fișierul și rulează următoarele comenzi pentru a activa și porni serviciul:
sudo systemctl daemon-reload
sudo systemctl enable flarum-queue.service
sudo systemctl start flarum-queue.service
Cum verifici dacă funcționează?
Rulează comanda de status ca să te asiguri că procesul este activ și nu a crăpat din cauza permisiunilor:
sudo systemctl status flarum-queue.service
Ar trebui să vezi statusul active (running). Acum, când un utilizator va posta sau se va înregistra, acțiunea va fi instantanee, iar trimiterea emailului se va face în fundal, în mai puțin de o secundă.
Voi cum gestionați cozile pe forumurile voastre? Ați rămas pe varianta clasică cu baza de date sau ați trecut la Redis pentru performanțe mai bune pe server?