Neos CMS su Debian 12: scelta dello stack
Per un’installazione pulita di Neos CMS su Debian 12 conviene partire da uno stack LEMP classico: Nginx come web server, PHP-FPM per l’esecuzione del codice e MariaDB come database. È una combinazione stabile, facilmente osservabile e semplice da mantenere nel tempo.
Neos non è un CMS “tradizionale” con file PHP esposti direttamente come WordPress: richiede una configurazione corretta del document root, del rewrite e di PHP, oltre a una base dati affidabile. La parte più importante, prima ancora dell’installazione, è preparare bene il sistema: versioni compatibili, estensioni PHP necessarie, permessi corretti e un virtual host senza ambiguità.
Questa procedura assume Debian 12 aggiornato, accesso root o sudo e un dominio già puntato verso il server. Se il server è dietro proxy o CDN, la logica non cambia, ma vanno rivisti anche header, TLS e trust del client.
Prerequisiti minimi
Prima di iniziare, verifica di avere:
- Debian 12 aggiornato
- Un nome host valido, ad esempio
cms.example.com - Accesso SSH con privilegi sudo
- Un database MariaDB dedicato
- PHP-FPM installato con le estensioni richieste da Neos
Se il server è in produzione, evita di installare tutto “a mano” senza un backup o uno snapshot. Anche una procedura semplice può impattare il sito se esiste già un virtual host in ascolto sulla stessa porta o se il document root è condiviso con altri servizi.
Assunzione operativa: uso Nginx, PHP-FPM e MariaDB. Se vuoi Apache o PostgreSQL, la logica cambia in alcuni punti e va adattata.
Aggiornamento base del sistema
Parti sempre da un sistema allineato. Su Debian 12 l’obiettivo è avere repository in ordine e pacchetti aggiornati prima di installare la stack applicativa.
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl git unzip ca-certificates gnupgSe il server è appena provisionato, controlla anche l’orario e la sincronizzazione NTP, perché certificati TLS e alcuni processi di build possono fallire con un clock fuori sync.
timedatectl statusAtteso: System clock synchronized: yes. Se è no, risolvi prima quel punto.
Installazione dei pacchetti necessari
Neos richiede PHP moderno e alcune estensioni comuni. Su Debian 12, la versione di PHP disponibile nei repository standard è adeguata per una base iniziale, a patto di installare le estensioni giuste.
sudo apt install -y nginx mariadb-server
php-fpm php-cli php-mysql php-xml php-curl php-gd php-mbstring php-zip php-intl php-bcmath php-soap php-opcacheSe usi una versione di Neos che richiede una release PHP specifica, verifica prima la compatibilità sul sito ufficiale del progetto o nella documentazione del pacchetto Composer. Non dare per scontato che “PHP 8.x” sia sempre sufficiente per tutte le major release.
Controlla che PHP-FPM sia attivo:
systemctl status php8.2-fpmAtteso: active (running). Il nome del servizio può variare leggermente in base alla versione installata.
Configurazione del database MariaDB
Neos usa un database per contenuti, configurazioni e metadati. La pratica corretta è creare un database dedicato e un utente con privilegi limitati solo su quel database.
sudo mysqlAll’interno della shell MariaDB:
CREATE DATABASE neos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'neosuser'@'localhost' IDENTIFIED BY 'password_forte_da_sostituire';
GRANT ALL PRIVILEGES ON neos.* TO 'neosuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;Non riutilizzare utenti generici come root o account già presenti su altri servizi. Se devi cambiare la password, fallo subito e tieni il segreto fuori da ticket, chat e file condivisi in chiaro.
Verifica che il database esista:
mysql -u neosuser -p -e "SHOW DATABASES;"Atteso: la lista deve includere neos.
Creazione dell’utente di sistema e directory applicativa
Per mantenere ordinati permessi e ownership, conviene creare una directory dedicata sotto /var/www e assegnarla a un utente di servizio coerente con il web server o con il deploy process.
sudo mkdir -p /var/www/neos
sudo chown -R www-data:www-data /var/www/neosSe preferisci separare i privilegi, puoi usare un utente dedicato al deploy e lasciare a www-data solo i permessi necessari in runtime. In ogni caso, evita scritture indiscriminate sulla root del progetto.
Scarica il progetto con Composer. Se Composer non è installato, aggiungilo prima:
sudo apt install -y composerPoi inizializza il progetto Neos con il metodo consigliato dal framework. In molti casi si usa il package distribution ufficiale come base del sito:
cd /var/www/neos
composer create-project --no-dev neos/neos-base-distribution .Se il comando fallisce, la prima verifica è la versione di PHP e la connettività verso Packagist e GitHub. I failure più comuni sono estensioni mancanti o limiti di memoria troppo bassi durante il download e l’installazione dei pacchetti.
Configurazione di PHP-FPM per Neos
Neos beneficia di una configurazione PHP coerente, con limiti adeguati a backend e importazione contenuti. I valori esatti dipendono dal carico, ma una base ragionevole per partire è questa:
sudo nano /etc/php/8.2/fpm/php.iniCerca e regola, con cautela, i parametri principali:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120
max_input_vars = 5000Dopo le modifiche, riavvia PHP-FPM:
sudo systemctl restart php8.2-fpmVerifica che non ci siano errori di sintassi o crash del worker:
journalctl -u php8.2-fpm -n 50 --no-pagerAtteso: nessun errore grave di pool o di configurazione. Se trovi errori su memory_limit o file di pool, correggi prima di proseguire.
Configurazione di Nginx
Neos deve essere servito dal directory pubblico del progetto, in genere /var/www/neos/Web o la directory pubblica prevista dalla versione installata. La parte critica è il rewrite: tutte le richieste non statiche devono passare dall’entry point del framework.
Crea un virtual host dedicato:
sudo nano /etc/nginx/sites-available/neos.confUsa una configurazione di base simile alla seguente, adattando dominio e socket PHP-FPM:
server {
listen 80;
server_name cms.example.com;
root /var/www/neos/Web;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
access_log off;
}
}Abilita il sito e testa la sintassi:
sudo ln -s /etc/nginx/sites-available/neos.conf /etc/nginx/sites-enabled/neos.conf
sudo nginx -t
sudo systemctl reload nginxSe nginx -t fallisce, non ricaricare il servizio. Il rollback è semplice: correggi il file o rimuovi il symlink in sites-enabled. Questo evita un downtime inutile.
Installazione tramite Composer e configurazione iniziale
Dopo aver creato la base del progetto, verifica che Composer abbia completato l’installazione senza errori e che la struttura delle directory sia coerente.
cd /var/www/neos
composer install --no-devIn alcune versioni di Neos, la configurazione iniziale può richiedere un wizard web o un comando CLI per generare la chiave di sito e completare il bootstrap. La procedura esatta dipende dalla release e dal package distribution utilizzato. Se la documentazione della versione installata prevede un comando specifico, eseguilo dal path del progetto con l’utente corretto.
Un controllo utile è vedere se i file di configurazione base sono presenti:
find /var/www/neos -maxdepth 2 -type f | headAtteso: presenza di file del progetto, directory Configuration e Web o struttura equivalente.
Permessi corretti
I problemi più fastidiosi su CMS PHP sono quasi sempre permessi o ownership sbagliati. Neos deve poter scrivere solo dove serve: cache, log, upload e configurazioni runtime previste dal framework.
In modo conservativo, assegna i file all’utente del web server e verifica che non ci siano directory world-writable:
sudo chown -R www-data:www-data /var/www/neos
sudo find /var/www/neos -type d -exec chmod 755 {}
;
sudo find /var/www/neos -type f -exec chmod 644 {}
;Se hai un workflow di deploy più avanzato, questa parte va adattata. L’obiettivo non è “aprire tutto”, ma mantenere il minimo privilegio necessario. Dopo l’installazione, controlla i log se compaiono errori di scrittura su cache o file temporanei.
Abilitare HTTPS con Let’s Encrypt
Su un’installazione pubblica, non lasciare il sito in HTTP puro. Con Nginx e Debian 12 puoi usare Certbot per ottenere un certificato Let’s Encrypt.
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d cms.example.comDopo il rilascio del certificato, verifica il rinnovo automatico:
systemctl status certbot.timerAtteso: timer attivo. In caso di proxy esterni o CDN, verifica anche che il certificato lato origin e lato edge non siano in conflitto. Se il frontend termina TLS altrove, il certificato su origin può essere comunque utile per il tratto interno o per test diretti.
Verifiche post-installazione
Prima di considerare chiusa l’installazione, fai tre controlli semplici ma importanti: risposta HTTP, log del web server e log PHP-FPM.
curl -I http://cms.example.comAtteso: 200, 301 o 302 coerenti con il redirect verso HTTPS o verso il wizard iniziale. Se ottieni 500, il problema è quasi sempre PHP, rewrite o permessi.
Controlla i log Nginx:
sudo tail -n 50 /var/log/nginx/error.loge i log PHP-FPM:
journalctl -u php8.2-fpm -n 50 --no-pagerSe il sito mostra pagina bianca, il primo sospetto è un errore PHP non mostrato a schermo ma registrato nei log. Non abilitare display_errors in produzione; usa i log.
Hardening base e manutenzione
Una volta online, conviene chiudere il cerchio con un hardening minimo. Non serve complicare tutto: bastano poche misure sensate per ridurre il rischio operativo.
- Aggiorna regolarmente Debian e i pacchetti PHP
- Limita l’accesso SSH con chiavi e, se possibile, con MFA
- Disabilita l’accesso diretto a directory sensibili via web server
- Monitora spazio disco, RAM e stato dei servizi
- Fai backup del database e della directory applicativa
Per i backup, la parte davvero importante è la verifica del restore. Un backup non testato non vale molto in caso di incidente. Tieni almeno una copia fuori dal server e una procedura di ripristino documentata.
Backup e rollback
Prima di modificare configurazioni importanti, salva sempre i file originali. Per Nginx e PHP-FPM basta anche una copia semplice con timestamp.
sudo cp /etc/nginx/sites-available/neos.conf /etc/nginx/sites-available/neos.conf.bak
sudo cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.bakSe una modifica rompe il sito, il rollback più rapido consiste nel ripristinare il file di configurazione e ricaricare il servizio:
sudo cp /etc/nginx/sites-available/neos.conf.bak /etc/nginx/sites-available/neos.conf
sudo nginx -t && sudo systemctl reload nginxPer il database, prima di qualsiasi intervento significativo, fai un dump:
mysqldump -u root -p neos > neos.sqlConserva il dump in un posto sicuro, meglio se cifrato e fuori dal server. Se devi ripristinare, verifica prima la compatibilità tra schema e versione del CMS.
Problemi tipici e correzioni rapide
Se l’installazione si blocca, i casi più comuni sono prevedibili:
- 502 Bad Gateway: PHP-FPM non gira o socket errato
- 500 Internal Server Error: errore PHP, permessi o rewrite
- Pagina bianca: fatal error PHP non mostrato a schermo
- Impossibile scrivere cache: ownership o permessi errati
- Wizard non raggiungibile: document root sbagliato o Nginx senza
try_files
Nel dubbio, il metodo più efficace resta sempre lo stesso: controlla prima il layer più basso che può spiegare il sintomo. DNS, poi Nginx, poi PHP-FPM, poi database. Saltare direttamente alle modifiche applicative fa perdere tempo e aumenta il rischio di introdurre altri problemi.
Conclusione operativa
Installare Neos CMS su Debian 12 non è complicato, ma richiede ordine. Il punto decisivo non è solo far partire il wizard: è avere un sistema coerente, con PHP-FPM allineato, Nginx configurato bene, database dedicato e permessi sotto controllo.
Se vuoi un setup più robusto, il passo successivo è integrare monitoraggio, backup automatici e una pipeline di deploy ripetibile. In ambiente hosting o multi-sito, conviene anche standardizzare template Nginx, versioni PHP e policy di aggiornamento, così ogni installazione Neos resta prevedibile e facile da mantenere.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.