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 Gestionale
Selezione 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! 🚀👨💻