LOMP Server su Raspberry

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:

LAMPLOMP
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 💻

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.

lomp server raspberry - Lutritech.it

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.

Lomp Server Raspberry - Lutritech.it

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.

Lomp Server Raspberry - Lutritech.it

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.

primo accesso a wordpress con lomp server Raspberry - Lutritech.it

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:

ParametroServer PersonaleHosting Tradizionale
Costi Annuali€50-100€100-300
ControlloTotaleLimitato
PersonalizzazioneMassimaMinima
ApprendimentoAltoBasso
IndipendenzaTotaleDipendente

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

Condivi sui Social

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

1 commento su “LOMP Server su Raspberry”

  1. Devo ripetermi facendoti i miei complimenti per la guida realizzata.
    Ammetto che non avevo preso in considerazione di utilizzare OpenLiteSpeed tanta è l’abitudine ad utilizzare Apache, mentre MariaDB fa già parte di quegli strumenti irrinunciabili 🙂
    Grazie ancora per la guida realizzata, veramente molto utile

Torna in alto