Se gestisci un server con Plesk, prima o poi ti capita. Il sito arranca, apri il file del pool PHP-FPM, alzi pm.max_children, ricarichi il servizio e tutto torna a volare. Passano due settimane, arriva un aggiornamento o qualcuno salva le impostazioni PHP dal pannello, e la tua modifica non c’è più. Nessun errore, nessun avviso. Semplicemente sparita.
Ci sono cascato anch’io sui server che gestisco. La cosa che mi ha fatto più arrabbiare è che non è un bug: Plesk funziona esattamente così. In questo articolo ti spiego perché succede e qual è il posto giusto per la configurazione PHP-FPM su Plesk, così non la perdi più.
Perché Plesk sovrascrive la configurazione PHP-FPM
Il punto è questo: per Plesk i file di configurazione non sono roba tua. Sono un output. Ogni dominio ha il suo pool PHP-FPM e il file .conf di quel pool viene generato da Plesk partendo da un template e dai dati salvati nel suo database. Quando qualcosa cambia, Plesk non modifica il file. Lo butta e lo riscrive da zero.
A seconda della versione di PHP che usi, i pool generati stanno qui:
# PHP installato da Plesk
/opt/plesk/php/8.3/etc/php-fpm.d/example.com.conf
# PHP del sistema operativo (Ubuntu/Debian)
/etc/php/8.3/fpm/pool.d/example.com.conf
Le occasioni in cui questi file vengono rigenerati sono più di quelle che pensi. Cambi versione PHP al dominio, salvi le impostazioni PHP dal pannello, lanci plesk repair web, installi un aggiornamento di Plesk. Ognuna di queste azioni riscrive il pool, quindi qualsiasi modifica fatta a mano lì dentro ha i giorni contati.
E non vale solo per PHP. La stessa logica si applica a tanti altri file gestiti dal pannello, per esempio il jail.local di Fail2Ban: se lo tocchi a mano, prima o poi Plesk se lo riprende.
Il posto giusto: il file conf/php.ini del dominio
La soluzione esiste ed è pure documentata, solo che non te la mettono in prima pagina. Plesk legge un file php.ini personalizzato per ogni dominio, in questo percorso:
/var/www/vhosts/system/example.com/conf/php.ini
Occhio a non confonderlo con /var/www/vhosts/system/example.com/etc/php.ini. Quello in etc/ lo genera Plesk e fa la stessa fine dei pool. Quello in conf/ invece di solito non esiste: lo crei tu, e Plesk lo usa come fonte ogni volta che rigenera la configurazione.
Dentro ci puoi mettere due cose. Le classiche direttive PHP come memory_limit o upload_max_filesize e, sotto la sezione [php-fpm-pool-settings], le impostazioni del pool PHP-FPM vere e proprie.
Come configurare PHP-FPM su Plesk passo per passo
Entra in SSH come root e crea il file, oppure aprilo se c’è già:
nano /var/www/vhosts/system/example.com/conf/php.ini
Poi aggiungi la sezione del pool con i valori che ti servono:
[php-fpm-pool-settings]
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
I numeri sono un esempio, non copiarli a occhi chiusi. Soprattutto pm.max_children dipende dalla RAM: ogni processo PHP si porta via la sua fetta, e se esageri il server inizia a swappare e va peggio di prima. Il mio calcolo spannometrico è semplice. Guardo quanto pesa in media un processo con top o ps, decido quanta RAM voglio dedicare a quel sito e divido. Se vuoi approfondire cosa fa ogni direttiva, la documentazione ufficiale di PHP-FPM è fatta bene.
Salvato il file, di’ a Plesk di rileggere le impostazioni e rigenerare i pool:
/usr/local/psa/bin/php_settings -u
Di solito basta questo. Se vuoi stare tranquillo, ricarica anche il servizio PHP-FPM della versione che usi, per esempio systemctl reload plesk-php83-fpm se il dominio gira sul PHP 8.3 di Plesk.
Verifica che la modifica sopravviva davvero
Fidarsi è bene, controllare è meglio. Prima guarda se i valori sono finiti nel pool generato:
grep "pm\." /opt/plesk/php/8.3/etc/php-fpm.d/example.com.conf
Se vedi i tuoi numeri, sei a buon punto. La prova del nove però è un’altra: fai rigenerare tutto a Plesk, per esempio salvando le impostazioni PHP del dominio dal pannello oppure con plesk repair web, e ricontrolla. Se il file viene riscritto e i valori sono ancora lì, hai vinto. Il repair magari non lanciarlo in orario di punta su un server di produzione, perché ricarica i servizi web.
E il campo delle direttive aggiuntive nel pannello?
Se preferisci la GUI, in Domains > example.com > PHP Settings c’è il campo Additional configuration directives. Lì puoi incollare la stessa sezione [php-fpm-pool-settings] e funziona.
C’è però un tranello. Se il dominio è legato a un piano di servizio, quando la sottoscrizione viene sincronizzata con il piano quelle direttive possono sparire. Il supporto Plesk lo considera un comportamento previsto, quindi non aspettarti una fix. Per questo io preferisco il file in conf/: sta sul filesystem, puoi farne un backup o metterlo sotto versionamento, e lo ritrovi dove l’hai lasciato.
In breve
Da quando gestisco server Plesk mi porto dietro una regola: se un file l’ha scritto Plesk, non è tuo. Per PHP-FPM su Plesk il posto giusto è /var/www/vhosts/system/<dominio>/conf/php.ini, sotto [php-fpm-pool-settings], seguito da php_settings -u. Sono due minuti di lavoro e ti evitano di inseguire una configurazione che sparisce ogni volta che il pannello decide di rimettere ordine.
Se ti interessano altri problemi da server come questo, li raccolgo tutti nella categoria Server & Self-hosting.
Lascia un commento