In questo articolo illustrerò, passo dopo passo, la configurazione di un Raspberry come server LOMP per ospitare un sito web personale gestito con WordPress. Con il nostro server VPN potremo in sicurezza accedere al sito dall’esterno della nostra rete domestica. Infine, discuterò i vantaggi di questa soluzione rispetto all’acquisto di un servizio di hosting a pagamento.
Ho cercato di scrivere questo tutorial in modo dettagliato in modo che tu possa arrivare all’obiettivo senza problemi e velocemente.
Qualcuno di voi si sarà chiesto: “Perché dovrei pagare un hosting quando posso costruirmi il mio server web personale?”
Oggi realizzeremo insieme un progetto che vi cambierà la prospettiva sul web hosting usando un Raspberry Pi, un piccolo dispositivo dalle dimensioni di un portafoglio.
Cos’è un server LOMP? Perché è meglio di LAMP?
LOMP e LAMP non sono due personaggi dei cartoni animati 😂 ma sono due acronimi che identificano gli stack di software utilizzati per gestire server web, ci sono alcune differenze chiave tra loro, vediamole insieme:
| LAMP | LOMP |
| Linux: Sistema operativo. | Linux: Sistema operativo. |
| Apache: Server web. | OpenLiteSpeed: Server web. |
| MySQL: Database management system. | MariaDB: Database management system. |
| PHP: Linguaggio di scripting. | PHP: Linguaggio di scripting. |
In sostanza quindi LOMP Server utilizza OpenLiteSpeed e MariaDB, ma perché scegliere proprio loro?
Vantaggi di ⚡OpenLiteSpeed⚡ rispetto ad Apache2
Performance: OpenLiteSpeed è progettato per essere più veloce e leggero rispetto ad Apache2, il che significa che può gestire più richieste con meno risorse di sistema. OpenLiteSpeed ha ottenuto risultati
5 volte migliori di nginx e 13 volte migliori di Apache nel servire un sito WordPress memorizzato nella cache tramite HTTP/2.
Qui sotto trovate i test effettuati che lo dimostrano:
https://http2benchmark.org/results/benchmark-apache-caddy-h2o-litespeed-nginx-digitalocean.htmlhttps://blog.herecura.eu/blog/2020-06-16-openlitespeed-vs-apache-vs-nginx
https://wpspeedmatters.com/openlitespeed-vs-nginx-in-wordpress/
Efficienza delle Risorse: Utilizza meno memoria e CPU rispetto ad Apache2, rendendolo ideale per server con risorse limitate, come il Raspberry Pi.
Caching Integrato: OpenLiteSpeed include un sistema di caching integrato che può migliorare significativamente i tempi di caricamento delle pagine web.
Gestione delle Connessioni: OpenLiteSpeed è più efficiente nella gestione di un gran numero di connessioni simultanee rispetto ad Apache2, il che lo rende ideale per siti web con alto traffico.
Interfaccia di Amministrazione: L’interfaccia web di OpenLiteSpeed è intuitiva e facile da usare, rendendo la configurazione e la gestione del server più semplici rispetto ad Apache2.
Sicurezza: OpenLiteSpeed include funzionalità di sicurezza avanzate come il supporto SSL/TLS e la protezione contro DDoS, che possono essere più difficili da configurare su Apache2.
Scalabilità: OpenLiteSpeed è progettato per essere scalabile, il che significa che può gestire un aumento del traffico senza perdere prestazioni.
Compatibilità con PHP: OpenLiteSpeed è altamente compatibile con PHP e offre un’ottima integrazione con PHP-FPM (FastCGI Process Manager), migliorando le prestazioni delle applicazioni PHP.
Questi vantaggi rendono OpenLiteSpeed una scelta eccellente per molti progetti web, specialmente quelli che richiedono alte prestazioni e una gestione efficiente delle risorse.
Vantaggi di MariaDB rispetto a MySQL
Licenza Open Source: MariaDB è completamente open source, è liberamente disponibile senza restrizioni di licenza, mentre MySQL richiede una licenza commerciale per l’uso in prodotti closed-source.
Motori di Archiviazione: MariaDB supporta una gamma più ampia di motori di archiviazione rispetto a MySQL, offrendo maggiore flessibilità nella gestione dei dati.
Prestazioni Migliorate: In molte situazioni, MariaDB offre prestazioni migliori rispetto a MySQL, grazie a ottimizzazioni avanzate e miglioramenti continuativi.
Compatibilità con MySQL: MariaDB è progettato per essere compatibile con MySQL, il che facilita la migrazione da MySQL a MariaDB senza dover apportare modifiche significative al codice.
Funzionalità Aggiuntive: MariaDB include funzionalità aggiuntive non presenti in MySQL, come le funzioni JSON migliorate e Atomic DDL (Data Definition Language).
Scalabilità: MariaDB è noto per la sua maggiore scalabilità, rendendolo una scelta ideale per applicazioni che richiedono un’alta disponibilità e capacità di gestione di grandi volumi di dati.
Supporto della Comunità: MariaDB ha una forte comunità di sviluppatori e utenti che contribuiscono costantemente al miglioramento del software e alla risoluzione dei problemi.
Questi vantaggi rendono MariaDB una scelta solida per molti progetti, specialmente quelli che richiedono prestazioni elevate e flessibilità.
Riassumendo quindi il LOMP server su Raspberry è l’ideale perché potremmo gestire molte più richieste e traffico.
Schema del tutorial
[Raspberry Pi Hardware]
│
├── [Linux OS Layer]
│ └── Sistema Operativo Raspbian 64bit
│
├── [Web Server]
│ └── OpenLiteSpeed
│ ├── Modulo PHP
│ └── Configurazioni Virtualhost
│
├── [Database]
│ └── MariaDB
│ ├── Database WordPress
│ └── Utenze Dedicate
│
└── [Applicativo]
└── WordPress
├── Frontend
└── Backend GestionaleSelezione Hardware 💻
- Raspberry Pi5 4GB (costo 80 euro circa), io ho usato un Pi3A+ (costo attuale circa 30 euro).
- MicroSD: 64GB, Classe 10
- Alimentatore USB 5V/3A
Perché Questa Configurazione?
- Prestazioni: Equivalenti a un mini-computer
- Efficienza Energetica: Consuma meno di 5W
- Flessibilità: Completamente personalizzabile
Preparazione del Sistema Operativo 🛠️
Scarica Raspberry Pi Imager dal sito ufficiale. Inserisci la scheda microSD nel tuo computer. Apri Raspberry Pi Imager e seleziona il sistema operativo (Raspberry Pi OS Lite 64bit). Seleziona la scheda microSD come destinazione. Clicca poi su Modifica impostazioni per personalizzare alcune configurazioni come il wifi, hostname, SSH. Successivamente vai su “Scrivi” per iniziare la scrittura del sistema operativo e attendi qualche minuto.
Inserisci la scheda microSD nel Raspberry e collegalo all’alimentatore. Aspetta un paio di minuti per il primo avvio, intanto installa putty per collegarti in SSH. Una volta aperto il tuo terminale segui le mie istruzioni,
basta copiare il codice che ti riporto e incollarlo sulla finestra del terminale che hai aperto.
Configurazione dell’ LOMP server Raspberry
Come prima cosa aggiorniamo il sistema operativo e installiamo l’ultima di versione di php per OpenLiteSpeed. Alla data di questo articolo l’ultima è la lsphp82.
# Aggiornamento sistema sudo apt update -y && sudo apt upgrade -y # Aggiungi manualmente il repository di OpenLiteSpeed: sudo wget -O - https://repo.litespeed.sh | sudo bash # Aggiorna i pacchetti disponibili: sudo apt-get update # Verifica i pacchetti disponibili di php per ls: apt-cache search lsphp # ultima versione disponibile è lsphp82, quindi installo quella sudo apt-get install lsphp82 lsphp82-common lsphp82-mysql lsphp82-curl lsphp82-intl -y #installiamo anche php-imagick per una migliore gestione delle immagini sudo apt-get install php-imagick -y # installiamo tutte le dipendenze dei pacchetti sudo apt install wget curl software-properties-common -y
Installazione di OpenLiteSpeed – Il Cuore Tecnologico 💡
Dobbiamo scaricare la versione per Raspberry, visitate https://github.com/litespeedtech/openlitespeed/releases e segnatevi quella più recente
per aarch64 (quando ho scritto l’articolo la versione era 1.8.2.1)
# Installiamo ultima versione di Openlitespeed per aarch64 wget https://github.com/litespeedtech/openlitespeed/releases/download/v1.8.2.1/openlitespeed-1.8.2-aarch64-linux.tgz tar -zxvf openlitespeed-*.tgz cd openlitespeed sudo ./install.sh
Ci metterà un paio di minuti in quanto vengono generate le chiavi private, al termine verrà generata la password temporanea di admin (scritta in rosso) annotatela perché è importante ci servirà successivamente per fare il login nella console di amministrazione.

# Creare il file di configurazione per la creazione del servizio sudo nano /etc/systemd/system/lsws.service # con il seguente contenuto
incolla questo:
[Unit] Description=Openlitespeed web server After=network.target remote-fs.target nss-lookup.target [Service] Type=simple PIDFile=/tmp/lshttpd/lshttpd.pid KillMode=mixed PrivateTmp=false User=root Group=root ExecStart=/usr/local/lsws/bin/lswsctrl start ExecReload=/usr/local/lsws/bin/lswsctrl reload ExecStop=/usr/local/lsws/bin/lswsctrl stop [Install] WantedBy=multi-user.target
per uscire premi il tasto Ctrl+X e poi seleziona YES ed invio.
Passiamo al cuore della configurazione di OpenLiteSpeed, tutto quello che impostate attraverso l’interfaccia grafica di amministrazione modifica il file httpd_config.conf. Per praticità vi consiglio di incollare tutto il contenuto che vi riporto sotto nel file sovrascrivendo quello iniziale.
# Creiamo un altro file di configurazione sudo nano /usr/local/lsws/conf/httpd_configNEW.conf
#
# PLAIN TEXT CONFIGURATION FILE
#
# If not set, will use host name as serverName
serverName
user www-data
group www-data
priority 0
inMemBufSize 60M
swappingDir /tmp/lshttpd/swap
autoFix503 1
gracefulRestartTimeout 300
mime conf/mime.properties
showVersionNumber 0
adminEmails root@localhost
errorlog logs/error.log {
logLevel DEBUG
debugLevel 0
rollingSize 10M
enableStderrLog 1
}
accesslog logs/access.log {
rollingSize 10M
keepDays 30
compressArchive 0
}
indexFiles index.html, index.php
expires {
enableExpires 1
expiresByType image/*=A604800,text/css=A604800,application/x-javascript=A604800,application/javascript=A604800,font/*=A604800,application/x-font-ttf=A604800
}
tuning {
maxConnections 10000
maxSSLConnections 10000
connTimeout 300
maxKeepAliveReq 10000
keepAliveTimeout 5
sndBufSize 0
rcvBufSize 0
maxReqURLLen 32768
maxReqHeaderSize 65536
maxReqBodySize 2047M
maxDynRespHeaderSize 32768
maxDynRespSize 2047M
maxCachedFileSize 4096
totalInMemCacheSize 20M
maxMMapFileSize 256K
totalMMapCacheSize 40M
useSendfile 1
fileETag 28
enableGzipCompress 1
compressibleTypes default
enableDynGzipCompress 1
gzipCompressLevel 6
gzipAutoUpdateStatic 1
gzipStaticCompressLevel 6
brStaticCompressLevel 6
gzipMaxFileSize 10M
gzipMinFileSize 300
quicEnable 1
quicShmDir /dev/shm
}
fileAccessControl {
followSymbolLink 1
checkSymbolLink 0
requiredPermissionMask 000
restrictedPermissionMask 000
}
perClientConnLimit {
staticReqPerSec 0
dynReqPerSec 0
outBandwidth 0
inBandwidth 0
softLimit 10000
hardLimit 10000
gracePeriod 15
banPeriod 300
}
CGIRLimit {
maxCGIInstances 20
minUID 11
minGID 10
priority 0
CPUSoftLimit 10
CPUHardLimit 50
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 400
procHardLimit 450
}
accessDenyDir {
dir /
dir /etc/*
dir /dev/*
dir conf/*
dir admin/conf/*
}
accessControl {
allow ALL
}
extprocessor lsphp82 {
type lsapi
address uds://tmp/lshttpd/lsphp.sock
maxConns 35
initTimeout 60
retryTimeout 0
respBuffer 0
autoStart 2
path /usr/local/lsws/lsphp82/bin/lsphp
}
scripthandler {
add lsapi:lsphp82 php
}
railsDefaults {
maxConns 1
env LSAPI_MAX_IDLE=60
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 60
respBuffer 0
backlog 50
runOnStartUp 3
extMaxIdleTime 300
priority 3
memSoftLimit 0
memHardLimit 0
procSoftLimit 500
procHardLimit 600
}
wsgiDefaults {
maxConns 5
env LSAPI_MAX_IDLE=60
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 60
respBuffer 0
backlog 50
runOnStartUp 3
extMaxIdleTime 300
priority 3
memSoftLimit 0
memHardLimit 0
procSoftLimit 500
procHardLimit 600
}
nodeDefaults {
maxConns 5
env LSAPI_MAX_IDLE=60
initTimeout 60
retryTimeout 0
pcKeepAliveTimeout 60
respBuffer 0
backlog 50
runOnStartUp 3
extMaxIdleTime 300
priority 3
memSoftLimit 0
memHardLimit 0
procSoftLimit 500
procHardLimit 600
}
module cache {
internal 1
checkPrivateCache 1
checkPublicCache 1
maxCacheObjSize 10000000
maxStaleAge 200
qsCache 1
reqCookieCache 1
respCookieCache 1
ignoreReqCacheCtrl 1
ignoreRespCacheCtrl 0
enableCache 0
expireInSeconds 3600
enablePrivateCache 0
privateExpireInSeconds 3600
ls_enabled 1
}
virtualhost Example {
vhRoot Example/
configFile conf/vhosts/Example/vhconf.conf
allowSymbolLink 1
enableScript 1
restrained 1
setUIDMode 0
}
virtualhost MyWordPress {
vhRoot /var/www/html
configFile $SERVER_ROOT/conf/vhosts/MyWordPress/vhconf.conf
allowSymbolLink 1
enableScript 1
}
listener Default {
address *:8088
secure 0
map Example *
}
listener HTTPListener {
address *:80
secure 0
map MyWordPress *
}
vhTemplate centralConfigLog {
templateFile conf/templates/ccl.conf
listeners Default
}
vhTemplate EasyRailsWithSuEXEC {
templateFile conf/templates/rails.conf
listeners Default
}
Date sempre Ctrl+X, cliccate su Y ma prima di salvare togliete il new dal file, salvate il file quindi come /usr/local/lsws/conf/httpd_config.xml sovrascrivendo quello originale.

Occorre ricaricare il demone systemd e avviare/abilitare il nuovo servizio:
sudo systemctl daemon-reload sudo systemctl start lsws.service sudo systemctl enable lsws.service sudo /usr/local/lsws/bin/lswsctrl restart
Openlitespeed è finalmente installato 🎉.
Per testare la nostra installazione di OpenLiteSpeed abbiamo 2 risorse.
C’è un file di esempio, che mostra una pagina di test, e la console web di OpenLiteSpeed.
Dal tuo PC remoto, usa il tuo browser preferito per raggiungere l’IP del Raspberry PI, specificando anche la porta 8088.
Il tuo URL sarà qualcosa come “http://192.168.1.xxx:8088” e raggiungerai la pagina di esempio.

L’altra risorsa è la console è di amministrazione che è esposta sulla porta 7080, quindi il tuo URL sarà qualcosa come
“https://192.168.1.xxx:7080”.
Quando ti connetti a questo indirizzo, riceverai l’avviso di sicurezza dal tuo browser
(problema sul certificato)
Clicca su avanzate e poi continua , ti ritroverai alla pagina del login, inserisci
“admin”
come password quella di prima che era indicata in rosso.

MariaDB: il Database 📚
Ora installiamo MariaDB per creare dopo il db che servirà all’installazione di WordPress con il suo utente e password.
# Installazione database sudo apt install mariadb-server -y # Configurazione sicura sudo mysql_secure_installation
Dopo qualche minuto per l’installazione, verranno richieste alcune domande, dovete rispondere seguendo queste indicazioni:
scegliete e inserite la password dell’utente di root di MariaDB
No
NO
YES
YES
YES
YES
MariaDB è installato! Abilitate il servizio OpenLiteSpeed e MariaDB per avere l’avvio automatico al boot.
sudo systemctl enable lsws sudo systemctl start lsws sudo systemctl enable mariadb sudo systemctl start mariadb
Passiamo ora a creare il database necessario all’installazione di WordPress:
sudo mysql -u root -p
immettere la password di root avete scelto e incollare questo dando un invio alla fine.
CREATE DATABASE wordpress; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password_sicura'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
Abbiamo creato un Db chiamato “wordpress”, un utente che si chiama “wpuser” con relativa password “password_sicura”. Poi tranquillamente cambiare queste tre informazioni con quello che preferisci, l’importante sarà riportarle nel file di configurazione di wordpress che andiamo ora a modificare.
La parte DB è terminata 🎊. Abbiamo quasi completato l’installazione del nostro LOMP server su Raspberry.
WordPress – Il Tuo Spazio Web 🌐
Installiamo il CMS più usato al mondo che consente di creare e gestire facilmente siti web e blog.
# Creiamo una cartella dove scaricare e installare WordPress sudo mkdir -p /var/www/html cd /var/www/html sudo wget https://wordpress.org/latest.tar.gz sudo tar -xzvf latest.tar.gz sudo mv wordpress/* . sudo rm -rf wordpress latest.tar.gz sudo chown -R www-data:www-data /var/www/html
# Configuriamo WordPress sudo cp wp-config-sample.php wp-config.php sudo nano wp-config.php
modifica il file come indicato qui sotto, dobbiamo inserire il nome del db da utilizzare, utente e password.
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** Database username */
define( 'DB_USER', 'wpuser' );
/** Database password */
define( 'DB_PASSWORD', 'password_sicura' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
/** Tipo di accesso*/
define('FS_METHOD','direct');configurate il salt, potete usare direttamente il sito ufficiale https://api.wordpress.org/secret-key/1.1/salt/ e modificate con le vostre stringhe, in modo da ottenere una cosa simile.
define('AUTH_KEY', '|eT~7DEN__:LEBxm9&}`+`@G%h:j:sY;@4.PZDu;6*cWiLLA^}wy)ouI[uT+VAka');
define('SECURE_AUTH_KEY', '$/7XV3>.Os#W[HCTg02-z;jhM]ae;z#?kpCE5ntroVXeY%YjK#O>^A3!V. Qeg1W');
define('LOGGED_IN_KEY', 'zA)iTgD!iDLxG8y~CDO:@{=K6mB7a/aAx|]G9ug<&Ky%7u]O|NTbX:0}B;C=X83v');
define('NONCE_KEY', '-OQWj0a~PRPPZ-*xO^>avi[xmBc-^4va6*Ykv,H7A/p]]N)IH(_K*k~b-}-nT>_T');
define('AUTH_SALT', '|omZf^<-|g;*H.R%RHMk-)nYyqseO;WyxkO`30s%#,G!O8-zwfG.V8qo]dJq-=gy');
define('SECURE_AUTH_SALT', ';rg a(u`2ZJz;5zZEoO_^2!#M<<]}DP<0lOM vLSN*SFMj-]:ee*cTa4w95R{&Z9');
define('LOGGED_IN_SALT', ']qtbcf43B=B`x_,A}-~2tp=A;]OBLGm-%/O[!/|Q 82Wn<C0<-<n=pey?amIeUQJ');
define('NONCE_SALT', 'rz-c}( Pl&@Ds}|2`EMn;/x1&=aXm` K/#C`x>Dh10f0d>.ZgF6u+5vh4wYft0l`');Dopo aver modificato e salvato il file wp-config.php, dobbiamo creare il file della configurazione del nostro blog sotto OpenLiteSpeed:
# Devi creare manualmente questa directory e il file per il virtualhost di WordPress in Openlitespeed sudo mkdir -p /usr/local/lsws/conf/vhosts/MyWordPress sudo nano /usr/local/lsws/conf/vhosts/MyWordPress/vhconf.conf
incolla questo:
docRoot /var/www/html
vhDomain localhost
adminEmails admin@localhost
enableGzip 1
index {
useServer 0
indexFiles index.php, index.html
}
scriptHandler {
add lsphp82
handler lsphp82
suffixes php
}
rewrite {
enable 1
autoLoadHtaccess 1
}
Riavviamo il servizio per essere sicuri che abbia letto tutte le configurazioni:
sudo /usr/local/lsws/bin/lswsctrl restart
Abbiamo terminato! ✨
La nostra istanza di WordPress si troverà su http://192.168.1.xxx/index.php e possiamo procedere alla prima configurazione di WordPress.

Il nostro LOMP server su Raspberry è pronto per essere utilizzato!
Sicurezza Avanzata 🛡️🔒
Una volta che avrai creato il tuo sito personale potrai accedervi al di fuori della tua rete domestica seguendo le indicazioni su come fare un server vpn, in questo modo solo tu potrai accedere ai contenuti senza esporti ai pericoli della rete.
Vantaggi vs Hosting Tradizionale
Un breve recap:
| Parametro | Server Personale | Hosting Tradizionale |
|---|---|---|
| Costi Annuali | €50-100 | €100-300 |
| Controllo | Totale | Limitato |
| Personalizzazione | Massima | Minima |
| Apprendimento | Alto | Basso |
| Indipendenza | Totale | Dipendente |
Considerazioni Conclusive 🌟
Grazie per essere arrivato fino a qui e aver letto tutto questo articolo! Hai installato il tuo primo Lomp Server su Raspberry.
Spero che ti sia servito, perché trovare il setup funzionante ha richiesto parecchie ore di lavoro, senza contare il tempo per renderlo comprensibile attraverso la scrittura di questo articolo.
Buona configurazione a tutti e che lo spazio web non sia più un mistero! 🚀👨💻