1 13/04/2026 10 min

Stack consigliato per Piwigo su Ubuntu 22.04 LTS

Su Ubuntu 22.04 LTS la combinazione più lineare per Piwigo resta Apache + MariaDB + PHP 8.1. Funziona bene, è facile da mantenere e si integra senza forzature con il classico flusso LAMP. Se hai già un reverse proxy o un pannello hosting, la logica non cambia: Piwigo è un’app PHP con database MySQL-compatible, quindi la parte davvero importante è mettere a posto permessi, rewrite, estensioni PHP e storage delle immagini.

L’errore più comune è trattarlo come un CMS leggero e basta. In realtà la galleria cresce nel tempo: carichi foto, miniature, metadati, plugin e cache. Se la base iniziale è fragile, il problema non emerge subito, ma quando il sito contiene già migliaia di file e il database ha iniziato a lavorare seriamente.

Prerequisiti e scelta del layout

Prima di installare, conviene decidere dove mettere i contenuti caricati dagli utenti. La directory `galleries/` e il resto dei dati di Piwigo non dovrebbero essere improvvisati dentro il document root senza una strategia di backup. In uno scenario semplice puoi tenere tutto sotto `/var/www/piwigo`, ma se vuoi separare codice e dati, è meglio predisporre un volume o una directory dedicata per gli upload e per la cache applicativa.

Quello che ti serve è questo:

  • Ubuntu 22.04 LTS aggiornato.
  • Apache 2.4 con `mod_rewrite` attivo.
  • MariaDB 10.6 o equivalente MySQL-compatible.
  • PHP 8.1 con estensioni richieste da Piwigo.
  • Un nome host valido e, se esposto su Internet, un certificato TLS.

Se il server è già in produzione e ospita altro, valuta subito il blast radius: installare Apache o cambiare PHP su una macchina condivisa può impattare virtual host esistenti. In quel caso è preferibile usare un nuovo vhost isolato e verificare compatibilità prima del cutover.

Installazione dei pacchetti base

Parti aggiornando l’indice pacchetti e installando web server, database e PHP con le estensioni più utili per Piwigo. Le estensioni esatte possono variare in base ai plugin che userai, ma questo set copre il caso standard.

sudo apt update
sudo apt install -y apache2 mariadb-server unzip curl \
  php php-cli php-common libapache2-mod-php \
  php-mysql php-gd php-xml php-mbstring php-curl php-zip php-intl

Dopo l’installazione, verifica che i servizi siano vivi. Il controllo rapido evita di arrivare al browser con un problema già presente in background.

systemctl status apache2 --no-pager
systemctl status mariadb --no-pager
php -v

Se `apache2` non parte, il primo posto da guardare è `journalctl -u apache2 -xe`. Se MariaDB non sale, controlla anche spazio disco e permessi di `/var/lib/mysql`. Non partire subito con Piwigo: prima va chiusa la base piattaforma.

Creazione del database e dell’utente dedicato

Per il database usa un utente separato, con privilegi limitati al solo database dell’applicazione. Evita account riutilizzati o privilegi globali: in caso di plugin difettoso o upload compromesso, il danno resta confinato.

sudo mysql
CREATE DATABASE piwigo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'piwigo_user'@'localhost' IDENTIFIED BY 'SOSTITUISCI_CON_PASSWORD_FORTE';
GRANT ALL PRIVILEGES ON piwigo_db.* TO 'piwigo_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Qui c’è un punto importante: non lasciare password in chiaro in note operative o script condivisi. Se devi automatizzare, usa un vault o un file di configurazione con permessi stretti. Una credenziale letta da log o history di shell è un errore banale ma molto costoso da correggere dopo.

Download e posizionamento dei file di Piwigo

Scarica l’ultima release stabile dal sito ufficiale o dal repository di distribuzione che preferisci. In produzione ha senso preferire un archivio verificabile e una release note chiara, non un mirror casuale. Qui sotto trovi un flusso classico con archivio ZIP.

cd /tmp
curl -LO https://piwigo.org/download/dlcounter.php?code=latest
unzip latest
sudo mkdir -p /var/www/piwigo
sudo rsync -a piwigo/ /var/www/piwigo/

Se il nome dell’archivio cambia, adegua il comando in base al file scaricato. Il punto non è il nome, ma il criterio: estrai in una directory temporanea, poi copia nel path finale con un trasferimento pulito. Così riduci il rischio di lasciare file parziali in produzione.

Imposta subito ownership e permessi coerenti. Apache deve leggere l’applicazione, ma non tutto deve essere scrivibile dal web server. La regola pratica è semplice: il codice resta leggibile, solo le directory che Piwigo deve modificare in runtime vengono rese scrivibili.

sudo chown -R www-data:www-data /var/www/piwigo
sudo find /var/www/piwigo -type d -exec chmod 755 {} \;
sudo find /var/www/piwigo -type f -exec chmod 644 {} \;

Se vuoi un’impostazione più rigorosa, puoi separare il codice dall’area di upload e limitare i permessi solo alle directory necessarie. È una scelta migliore quando il server ospita anche altri siti o quando prevedi più amministratori con accesso shell.

Virtual host Apache e rewrite

Ora crea il virtual host. Piwigo funziona bene con una configurazione standard, ma il rewrite deve essere attivo se vuoi URL puliti e una navigazione corretta. Senza `mod_rewrite`, alcune funzioni di routing o permalink possono comportarsi in modo incompleto.

sudo a2enmod rewrite headers expires
sudo nano /etc/apache2/sites-available/piwigo.conf

Dentro il file inserisci una base solida, adattando `ServerName` al tuo dominio.

<VirtualHost *:80>
    ServerName gallery.example.com
    DocumentRoot /var/www/piwigo

    <Directory /var/www/piwigo>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/piwigo_error.log
    CustomLog ${APACHE_LOG_DIR}/piwigo_access.log combined
</VirtualHost>

Attiva il sito e ricarica Apache.

sudo a2ensite piwigo.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Se `configtest` fallisce, non andare avanti. È il punto in cui correggere un errore di sintassi costa pochissimo. Dopo il reload, un `curl -I http://gallery.example.com` deve restituire almeno un `200`, `301` o `302` coerente con la tua policy di redirect.

Configurazione PHP per carichi reali

Piwigo non richiede tuning estremo, ma alcune direttive PHP contano parecchio quando inizi a gestire upload pesanti o elaborazione immagini. I due punti più frequenti sono il limite di upload e il tempo massimo di esecuzione. Se lasci i default troppo stretti, il problema si manifesta come upload troncati o timeout durante la generazione delle miniature.

Modifica il file PHP usato da Apache, per esempio `/etc/php/8.1/apache2/php.ini`, e controlla almeno questi valori:

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
max_input_time = 120

Dopo la modifica, ricarica Apache e verifica il valore effettivo con un file `phpinfo()` temporaneo oppure con CLI, sapendo però che il CLI può differire dal modulo Apache se hai configurazioni separate.

sudo systemctl reload apache2
php -i | grep -E 'upload_max_filesize|post_max_size|memory_limit|max_execution_time'

Se vuoi evitare errori operativi, elimina il file di test subito dopo la verifica. Lasciare `phpinfo()` pubblicamente raggiungibile è inutile e aumenta la superficie informativa esposta.

Installazione guidata via web

A questo punto apri il dominio nel browser. Piwigo presenta un wizard abbastanza lineare: lingua, verifica prerequisiti, parametri database, creazione dell’account amministrativo e scrittura della configurazione. Qui la parte da non sottovalutare è la verifica iniziale: se manca un’estensione PHP o la directory non è scrivibile, il problema va risolto prima di proseguire.

Nel form di installazione inserisci:

  • Database: `piwigo_db`.
  • Utente: `piwigo_user`.
  • Password: quella impostata nel passaggio precedente.
  • Host database: `localhost`.

Dopo il completamento, controlla che il file di configurazione sia stato scritto correttamente e che l’accesso all’area admin funzioni. Se il wizard fallisce a metà, guarda i log Apache e il log PHP-FPM se stai usando quella variante. Nel setup classico con mod_php, il punto di partenza resta `error.log` del virtual host.

Rafforzamento minimo dopo il primo avvio

Una volta online, fai subito tre cose: TLS, backup e controllo degli aggiornamenti. È il minimo sindacale per non lasciare un’installazione appena nata in uno stato già vecchio.

Per TLS, se usi Let’s Encrypt, il percorso più rapido su Ubuntu è `certbot` con plugin Apache. Dopo l’emissione, verifica che il redirect HTTP→HTTPS sia coerente e che il certificato venga rinnovato automaticamente.

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d gallery.example.com

Per il backup, salva almeno database e directory dei contenuti caricati. Se fai solo dump SQL, perdi le immagini; se fai solo file, perdi la struttura e i metadati. La coppia corretta è sempre file + dump.

mysqldump -u piwigo_user -p piwigo_db > /root/backup/piwigo_db.sql
rsync -a /var/www/piwigo/ /root/backup/piwigo-files/

Se il sito è esposto pubblicamente, imposta anche una politica minima di hardening: password amministrativa forte, disabilitazione di account inutilizzati, plugin installati solo da fonte affidabile e aggiornamenti periodici. In una galleria fotografica il rischio non è solo l’accesso non autorizzato, ma anche l’abuso del caricamento file se i controlli sono deboli.

Verifica funzionale e controlli rapidi

Dopo l’installazione, esegui una verifica essenziale ma concreta. Non limitarti alla homepage: prova login, upload di una foto di test, generazione miniatura e navigazione album. Se una di queste azioni fallisce, il problema è quasi sempre una combinazione di permessi, estensioni PHP mancanti o limiti di upload troppo bassi.

curl -I https://gallery.example.com
sudo tail -n 50 /var/log/apache2/piwigo_error.log
sudo tail -n 50 /var/log/apache2/piwigo_access.log

Per il database, un controllo rapido è verificare che le tabelle siano state create e che il charset sia coerente con `utf8mb4`. È una scelta importante perché evita problemi con emoji, caratteri accentati particolari e contenuti multilingua.

sudo mysql -u piwigo_user -p -e "USE piwigo_db; SHOW TABLES;"

Se il sito mostra pagina bianca, prima di toccare il codice guarda errori PHP e memoria esaurita. Se invece vedi 403/404 dopo l’installazione, il problema è spesso nel `DocumentRoot`, nei permessi o nel rewrite non attivo. Se l’upload fallisce, controlla i limiti PHP e la scrivibilità delle directory usate da Piwigo.

Problemi tipici e come chiuderli senza perdere tempo

Il caso più frequente è il mismatch tra ciò che l’installer si aspetta e ciò che il sistema offre davvero. Piwigo può sembrare “installato”, ma poi il caricamento immagini fallisce perché `gd` non è presente o perché `memory_limit` è troppo basso. In questi casi la soluzione non è riavviare a caso: è verificare il requisito mancante e correggerlo in modo puntuale.

Se il problema è il database, i sintomi tipici sono errori di connessione, schermata di setup che torna indietro o messaggi di access denied. La verifica minimale è questa: login MySQL con lo stesso utente usato dall’app, esecuzione di una query semplice, controllo dei privilegi sul solo database dell’applicazione.

mysql -u piwigo_user -p -h localhost piwigo_db -e "SELECT 1;"

Se il problema è Apache, la diagnostica passa da `apache2ctl configtest`, log del virtual host e verifica del modulo rewrite. Se il problema è spazio disco, lo vedi subito con `df -h` e `du -sh` sulla directory dei dati. Questi controlli semplici risolvono più installazioni di qualsiasi debug lungo e teorico.

df -h
sudo du -sh /var/www/piwigo

Quando conviene separare codice, dati e upload

Su un’installazione piccola puoi tenere tutto insieme, ma appena la galleria cresce conviene separare il codice applicativo dai contenuti. Il vantaggio è pratico: aggiornare Piwigo diventa più sicuro, i backup sono più leggibili e il restore è meno ambiguo. Se usi un mount dedicato per gli upload, riduci anche il rischio di saturare il filesystem del sistema operativo con immagini e miniature.

La regola da tenere a mente è semplice: il codice cambia con gli aggiornamenti, i dati cambiano con l’uso quotidiano. Trattarli come due cose diverse ti semplifica la vita quando devi fare manutenzione, migrazione o recovery.

Chiusura operativa

Installare Piwigo su Ubuntu 22.04 LTS non è complicato, ma la differenza tra un’installazione “funziona oggi” e una piattaforma gestibile nel tempo sta nei dettagli: permessi corretti, estensioni PHP complete, database con privilegi minimi, TLS, backup e controlli rapidi dopo il deploy. Se imposti bene la base, Piwigo resta una soluzione pulita e prevedibile anche quando la libreria fotografica cresce parecchio.