Torna al Portfolio
Infrastruttura & DevOps
SaintChannel - Progetto Proprietario
Completato

SaintChannel – Server Linux Custom su Misura

Server Linux dedicato costruito e gestito a mano, componente per componente: web, database, sicurezza a più livelli, posta elettronica e backup verificati.

"Debian 12" "Nginx" "PHP-FPM" "MySQL" "PostgreSQL" "Redis" "Postfix" "Docker"
SaintChannel – Server Linux Custom su Misura
Infrastruttura Proprietaria

Questo progetto non è un sito o un'applicazione: è il terreno su cui girano i siti e le applicazioni che sviluppo per SaintChannel. Un server Linux dedicato, costruito e gestito a mano, componente per componente, invece che appoggiandomi a un servizio preconfezionato o a un pannello di gestione.

---

🎯 La Sfida

Il Limite dei Servizi Preconfezionati

Un hosting gestito o un pannello di controllo standard risolve i problemi comuni, ma impone anche le sue scelte:

Una sola versione di PHP

Con più progetti attivi in parallelo, alcuni pronti per l'ultima versione di PHP e altri che richiedono ancora stabilità su una precedente, un pannello standard costringe a un compromesso su tutti i siti insieme.

Sicurezza a scatola chiusa

Firewall, WAF e regole anti-bot preconfigurati, spesso con whitelist dei crawler basate su liste di terze parti o user-agent, facili da aggirare e senza controllo diretto su cosa viene davvero bloccato.

Posta elettronica delegata

Affidarsi a un servizio di posta gestito da terzi significa perdere il controllo diretto sulla configurazione anti-spam e sulla reputazione del dominio — un fattore che incide sulla deliverability.

Un solo motore di database

Non tutti i progetti hanno bisogno dello stesso motore: forzare tutto su un unico database significa usare lo strumento sbagliato per almeno alcuni dei progetti ospitati.

La Domanda Centrale

Come costruire un'infrastruttura che dia controllo diretto su ogni servizio, senza ereditare le decisioni prese da qualcun altro?

La risposta: costruire il server a strati, componente per componente, partendo dal sistema operativo.

---

💡 La Soluzione

Architettura su 5 Pilastri

🌐 Livello Web

Nginx con virtual host dedicati e PHP multi-versione:

  • ✓ Nginx 1.28.3, reverse proxy dove serve
  • ✓ PHP-FPM 8.3 e 8.5 in parallelo, pool separati per dominio
  • ✓ Let's Encrypt automatico, incluso wildcard

🗄️ Livello Dati

Due motori database più due livelli di cache:

  • ✓ MySQL 8.0.36 e PostgreSQL 16 attivi in parallelo
  • ✓ Redis 7.2 e Memcached per alleggerire le query
  • ✓ Migrazione MySQL 5.7 → 8.0 verificata schema per schema

🔒 Sicurezza a Più Livelli

Nessun componente da solo come unica difesa:

  • ✓ Firewall di sistema + WAF con whitelist crawler da IP ufficiali
  • ✓ fail2ban su SSH, ClamAV per la scansione file
  • ✓ File di sistema critici resi immutabili

📧 Stack di Posta

Costruito a mano, non delegato a terzi:

  • ✓ Postfix per SMTP (porte 25, 465, 587)
  • ✓ Dovecot per IMAP/POP3 cifrato
  • ✓ Rspamd come filtro anti-spam

💾 Backup, Monitoraggio e Automazione

Procedure verificate, non solo predisposte sulla carta:

  • ✓ Backup con marcatura temporale e retention storica, ripristino testato
  • ✓ Rotazione automatica dei log, supervisione continua dei servizi
  • ✓ Automazione via cron, servizi isolati in container Docker, FTP dedicato (Pure-FTPd)

---

⚙️ Funzionalità Principali

🎯 PHP Multi-Versione in Produzione

Due versioni di PHP-FPM attive in parallelo, non una sequenza di aggiornamenti forzati:
  • PHP 8.3 e PHP 8.5 con pool FPM separati per dominio
  • Progressione indipendente: un progetto può passare alla versione più recente senza costringere gli altri a seguirlo
  • Isolamento per dominio: configurazione, log e limiti di risorsa distinti pool per pool

🗄️ Due Database, Non per Ridondanza

MySQL come motore di riferimento, PostgreSQL dove servono le sue caratteristiche specifiche:
  • MySQL 8.0.36: motore principale per la maggior parte delle applicazioni web ospitate
  • PostgreSQL 16: usato nei progetti che ne richiedono le funzionalità specifiche
  • Redis 7.2 e Memcached: due livelli di cache in memoria per alleggerire le query ripetute

🔐 La Migrazione MySQL 5.7 → 8.0

Il punto più delicato del progetto, affrontato con backup verificati prima di procedere:
  • Backup e ripristino testati database per database, prima della migrazione vera e propria
  • Rollback pronto per l'intera finestra di lavoro, anche se non è stato necessario usarlo
  • Autenticazione aggiornata al plugin caching_sha2_password, con verifica dei log per escludere connessioni fallite

🛡️ Sicurezza Organizzata su Livelli Indipendenti

Nessun singolo componente è l'unica linea di difesa:
  • Firewall di sistema che regola cosa può raggiungere il server
  • WAF con whitelist crawler basata su IP ufficiali: i range pubblicati da Google, Bing, Yandex e Baidu, non user-agent o liste terze facilmente obsolete
  • fail2ban contro i tentativi ripetuti via SSH, ClamAV per la scansione file
  • Hardening di sistema: file critici resi immutabili, plugin di autenticazione obsoleti disattivati

📧 Un Server di Posta Costruito, Non Delegato

Tre componenti che si passano il lavoro, in autonomia completa:
  • Postfix per invio e ricezione SMTP (porte 25, 465, 587)
  • Dovecot per l'accesso via IMAP e POP3 cifrato
  • Rspamd per il filtro anti-spam prima che la posta arrivi nelle caselle

💾 Backup Verificati, Non Solo Predisposti

Un backup mai ripristinato è, di fatto, un backup non verificato:
  • Marcatura temporale su ogni copia e retention storica, per tornare indietro nel tempo e non solo all'ultima copia
  • Procedura di rollback testata sul campo, durante la migrazione MySQL 5.7 → 8.0
  • Rotazione automatica dei log, per evitare che crescano senza limite occupando spazio disco in silenzio

---

🏆 Perché Funziona

1. 🎯 Controllo Diretto, Non Ereditato

Ogni servizio — web, database, sicurezza, posta — è configurato a mano invece che ereditato da un pannello preconfezionato. Le decisioni tecniche sono scelte, non subite.

2. 🔧 Sicurezza a Livelli Indipendenti

Firewall, WAF, fail2ban, ClamAV e hardening di sistema non si sostituiscono a vicenda: si sommano. Se un livello viene bypassato, gli altri restano attivi.

3. 📋 Procedure Verificate sul Campo

La migrazione MySQL 5.7 → 8.0 non è stata solo un aggiornamento di pacchetto: è stato il momento in cui le procedure di backup e rollback sono state testate davvero, non solo predisposte sulla carta.

4. 🧩 Progettato per Convivenza, Non per un Solo Progetto

PHP multi-versione, due motori di database, container isolati: l'infrastruttura è pensata per ospitare più progetti indipendenti sullo stesso server, ognuno con le proprie esigenze, senza che l'uno condizioni l'altro.

---

🛠️ Stack Tecnologico Dettagliato

Sistema e Web

  • Debian 12 (bookworm) su server dedicato x86_64
  • Nginx 1.28.3 con virtual host dedicati e reverse proxy
  • PHP-FPM 8.3 e 8.5 in parallelo, pool separati per dominio
  • Let's Encrypt con rinnovo automatico, incluso wildcard

Database e Cache

  • MySQL 8.0.36 come motore di riferimento
  • PostgreSQL 16 per i progetti che ne richiedono le caratteristiche
  • Redis 7.2 e Memcached come livelli di cache in memoria

Sicurezza

  • Firewall di sistema e WAF con whitelist crawler da IP ufficiali
  • fail2ban su SSH, ClamAV per la scansione file
  • Hardening: file di sistema immutabili, plugin di autenticazione obsoleti disattivati

Posta Elettronica

  • Postfix (SMTP), Dovecot (IMAP/POP3 cifrato), Rspamd (anti-spam)

Automazione e Trasferimento File

  • Cron per le attività ricorrenti, container Docker per i servizi isolati
  • Pure-FTPd come server FTP dedicato, separato dagli accessi applicativi

---

🎓 Lezioni Apprese

1. Un Backup Non Testato Non È Un Backup

Prima pensavo: "Se la copia esiste, il backup è a posto." Ora so: solo un ripristino verificato conferma che il backup funziona davvero. La migrazione MySQL 5.7 → 8.0 è stata l'occasione per testarlo sul campo, non solo predisporlo.

2. La Whitelist dei Crawler Va Basata su Fonti Ufficiali

Prima pensavo: "Uno user-agent riconosciuto basta a far passare i crawler legittimi." Ora so: user-agent e liste di terze parti sono facili da aggirare e spesso obsolete. I range IP ufficiali pubblicati da ciascun motore di ricerca sono l'unica fonte affidabile, ed è quello che incide direttamente sull'indicizzazione dei siti ospitati.

3. Più Versioni di PHP Convivono Meglio di Un Aggiornamento Forzato

Prima pensavo: "Meglio tenere tutti i siti allineati sulla stessa versione di PHP." Ora so: con pool FPM separati per dominio, ogni progetto avanza secondo i propri tempi, senza dover aggiornare (o rompere) tutti gli altri insieme.

4. La Sicurezza Regge Solo Se È a Più Livelli

Prima pensavo: "Un buon firewall è la difesa principale." Ora so: firewall, WAF, fail2ban, ClamAV e hardening di sistema funzionano perché nessuno di loro è l'unica linea di difesa. Se uno viene aggirato, gli altri restano.

---

📞 Se Ti Serve Questo Tipo di Lavoro

Quanto descritto qui — configurazione diretta di web server, PHP multi-versione, database, sicurezza a più livelli, posta elettronica e backup verificati — è lo stesso tipo di competenza che metto a disposizione quando seguo un progetto di infrastruttura per un cliente: server dedicati, migrazioni di database delicate, hardening, o un'alternativa su misura a un servizio preconfezionato che non si adatta più alle esigenze reali del progetto.

Parliamone insieme.

---

Nota sul Progetto

Questo caso studio descrive l'infrastruttura server proprietaria su cui gira l'ecosistema SaintChannel, incluso questo sito. Le web application specifiche ospitate sul server non sono elencate: restano riservate.