Novità
Icona risorsa

Guida Verificata Creare un Server LEMP con SSL

Una guida verificata è stata controllata dallo staff punto per punto e se ne attesta la sua validità.

Introduzione​

In questa guida vediamo come creare uno stack LEMP, ovvero un server linux (Debian o Ubuntu) con tutto l'occorrente per avviare il proprio sito, che sia un CMS o altro. Vedremo come installare il webserver Nginx, il database e una versione appropriata di PHP.

Questa configurazione è comunemente usata in quanto molto leggera, usando il minimo indispensabile per avviare un progetto (anche complesso). Avrete dunque la possibilità di creare un sito discretamente veloce anche se non disponete di un server potente (naturalmente in base al traffico del vostro sito). Non ci soffermeremo molto sulle corrette impostazioni di php (come ad esempio il tuning del php-fpm, necessita di una guida separata!)

Prerequisiti​

  • Un server (VPS o dedicato) con accesso root
  • Un dominio, in quanto useremo un server block in nginx (virtual host)
  • Caffè!

Installazione​

Prima di iniziare, per non appesantire la guida, non tratteremo la messa in sicurezza del vostro server. Potete trovare una guida a riguardo qui:

La guida può essere seguita sia su Debian che su Ubuntu, verranno indicati i pochi passaggi che differiscono.

Intanto, una volta connessi in SSH al nostro server, un bel controllo dei pacchetti non guasta mai, quindi procediamo con
Bash:
Accedi o Registrati per vedere questo contenuto.

Nginx​

Installiamo ora il webserver, che possiamo trovare tranquillamente nelle repository
Bash:
Accedi o Registrati per vedere questo contenuto.
Verrà creato un utente di sistema www-data, lo vedremo dopo.

Dobbiamo ora aprire le porte 80 e 443, necessarie per un sito internet. In realtà la scelta è vostra, se non vi interessa l'ssl potete anche aprire solo la porta 80, viceversa se volete fornire il sito solo in ssl potete anche evitare di aprire la porta 80. Qui le apriamo tutte e 2, poi faremo un bel redirect alla connessione ssl (più pulito e raggiungibile).

Installiamo il firewall UFW
Bash:
Accedi o Registrati per vedere questo contenuto.
Apriamo prima di tutto la porta SSH, altrimenti non potremo più connetterci alla nostra macchina!
Bash:
Accedi o Registrati per vedere questo contenuto.
Se avete cambiato il numero di porta, il comando da eseguire è
Bash:
Accedi o Registrati per vedere questo contenuto.
Sostituendo naturalmente 12345 con la porta usata.

e infine abilitiamo il firewall con
Bash:
Accedi o Registrati per vedere questo contenuto.
Possiamo controllare lo stato del firewall con
Bash:
Accedi o Registrati per vedere questo contenuto.
Vedremo una schermata simile
1.jpg


Dobbiamo ora aprire le porte necessarie al webserver. Abbiamo 3 scelte:
Bash:
Accedi o Registrati per vedere questo contenuto.

Possiamo subito verificare la corretta installazione di nginx connettendoci con un browser direttamente all'indirizzo ip della nostra macchina. Il sito sarà raggiungibile (Per il momento solo sulla porta 80).
2.jpg


Mysql​

ATTENZIONE: Dobbiamo ora installare MySql. Su debian, è consigliato usare MariaDB (un fork di MySql). I comandi che seguiranno avranno l'intestazione "mysql", se siete su debian, sostituite semplicemente con "mariadb".

Procediamo con
Bash:
Accedi o Registrati per vedere questo contenuto.
e subito dopo, mettiamo in sicurezza lanciando lo script interattivo
Bash:
Accedi o Registrati per vedere questo contenuto.
Il consiglio è di rispondere "yes" a tutti i quesiti che seguiranno. Inoltre, impostate una password robusta per l'utente root (attenzione, non si tratta del root di sistema, ma dell'account root del database).

Ricordiamo che se avete disattivato l'accesso remoto, i database creati risponderanno solo all'indirizzo localhost (si può modificare in seguito). Quindi, durante (ad esempio) l'installazione di un CMS quale wordpress, come indirizzo del database dovrete inserire "localhost" o "127.0.0.1".

Creiamo il nostro primo database, entriamo in mysql (o mariadb)
Bash:
Accedi o Registrati per vedere questo contenuto.
3.jpg


E creiamo il database "example_database" con
Codice:
Accedi o Registrati per vedere questo contenuto.

Ora creiamo un utente "example_user" con "password" e diamogli i permessi sul database appena creato
Codice:
Accedi o Registrati per vedere questo contenuto.
lanciamo poi
Codice:
Accedi o Registrati per vedere questo contenuto.
e usciamo digitando exit.

Testiamo l'accesso digitando
Bash:
Accedi o Registrati per vedere questo contenuto.
e lanciamo
Codice:
Accedi o Registrati per vedere questo contenuto.
4.jpg

E anche il database è fatto!

PHP​

Al momento della scrittura di questa guida, le distro prese in esame sono alla versione Debian 11 e Ubuntu 22.04 LTS (Non è consigliato usare distro non LTS).

Mentre ubuntu ha nelle proprie repository le ultime versioni di php, debian è ferma alla 7.4, quindi dobbiamo aggiungere una repository per scaricare la versione di nostro interesse (8.x). Questa è la base della principale differenza tra le due Distro, Ubuntu tende a rendere disponibile quanto prima i nuovi software, debian aspetta prima che un aggiornamento sia "super" testato prima di rilasciarlo nelle proprie repository!

Se usiamo Ubuntu​

Lanciamo direttamente i comandi per scaricare i moduli php di nostro interesse, ad esempio
Bash:
Accedi o Registrati per vedere questo contenuto.

Se usiamo Debian​

Dobbiamo prima scaricare alcune dipendenze
Bash:
Accedi o Registrati per vedere questo contenuto.
Aggiungiamo ora la repository
Bash:
Accedi o Registrati per vedere questo contenuto.
e procediamo con
Bash:
Accedi o Registrati per vedere questo contenuto.

Configurazione​

L'installazione standard di Nginx è pensata per far "girare" un solo sito sul nostro server, ma possiamo facilmente farne girare quanti ne vogliamo grazie ai blocchi server (o i virtual host di apache).

Creiamo il nostro primo blocco per il dominio your_domain:

Creiamo la cartella dove andremo a posizionare i files
Bash:
Accedi o Registrati per vedere questo contenuto.
e assegniamo la proprietà all'utente www-data (inserito automaticamente durante l'installazione di nginx)
sudo chown -R www-data:www-data /var/www/your_domain

NOTA: Alcuni CMS richiedo permessi particolari permessi sui propri files (ad esempio 755 o 777). Il comando chmod -R 755 /directory può aiutarci successivamente se necessario.

Ora dobbiamo creare un nuovo file di configurazione per il nostro sito
Bash:
Accedi o Registrati per vedere questo contenuto.

Ora, qui possiamo solo procedere con esempi, in quanto la personalizzazione del file dipende esclusivamente dalle vostre esigenze. Bloccare alcune cartelle, le porte da usare, i reindirizzamenti etc dipendono esclusivamente da voi. Una configurazione standard che usa PHP 8.1 (senza modifiche) e disponibile sulla porta 80 può essere la seguente
NGINX:
Accedi o Registrati per vedere questo contenuto.
dove sostituiamo server_name your_domain www.your_domain; e root /var/www/your_domain; con il nome del nostro dominio e la cartella che abbiamo creato in precedenza (ovvero /var/www/dominio).

Dobbiamo ora lanciare il seguente comando per attivare il sito
Bash:
Accedi o Registrati per vedere questo contenuto.
(anche qui facendo le opportune modifiche).

FORTEMENTE consigliato un test della configurazione, con
Bash:
Accedi o Registrati per vedere questo contenuto.
se abbiamo ricevuto il messaggio di ok, riavviamo nginx con
Bash:
Accedi o Registrati per vedere questo contenuto.

Come test, possiamo creare un file info.php all'interno del nostro sito e verificare che php sia stato caricato correttamente. Per farlo, digitiamo
Bash:
Accedi o Registrati per vedere questo contenuto.
e all'interno copiamo il seguente codice
PHP:
Accedi o Registrati per vedere questo contenuto.

Ora collecandoci al nostro dominio domain.tld/info.php dovremmo vedere una schermata con diverse informazioni relative alla nostra installazione. Naturalmente si consiglia di eliminare il file per evitare che queste informazioni (molto importanti) possano essere lette da terzi.

Consiglio di disattivare il sito web che viene caricato di default una volta conclusa l'installazione di nginx. Per farlo, rimuoviamo semplicemente il file "default" all'interno della directory /etc/nginx/sites-enabled

SSL​

Inserire l'SSL su un'installazione del genere è semplicissimo in quanto il software Certbot è perfettamente integrato con nginx, permettendoci appunto di avere un certificato gratuito con pochissimi comandi!

Installiamo intanto certbot con il modulo nginx
Bash:
Accedi o Registrati per vedere questo contenuto.

E procediamo semplicemente creando il certificato per il nostro sito
Bash:
Accedi o Registrati per vedere questo contenuto.
Dobbiamo accettare i termini di utilizzo e inserire una mail in modo da essere avvisati in prossimità della scadenza del certificato.

Possiamo anche evitare di inserire la mail inserendo il comando consigliato durante l'emissione del certificato, la scelta è nostra.

I certificati creati hanno una durata di 90 giorni, ma il comando crea automaticamente un cronjob per rinnovarli in automatico in prossimità della scadenza, non dobbiamo occuparci di nulla! Inoltre il file di configurazione di nginx in /etc/nginx/sites-available/domain è stato automaticamente modificato grazie al modulo di integrazione. Consiglio di riaprirlo per capirne il funzionamento e modificarlo a nostro piacimento.

Il file modificato si presenterà grosso modo in questo modo
NGINX:
Accedi o Registrati per vedere questo contenuto.

Ovvero, sono stati inseriti i certificati e i reindirizzamenti permanenti (301) dalla porta 80 alla porta 443 che usa l'SSL.

Termina qui la nostra guida. Avrete capito che lo stack LEMP è uno strumento molto potente, capace di una velocità enorme se configurato correttamente, magari con direttive php adeguate (lo vedremo in un altra guida).

Come sempre, fatemi sapere nei commenti cosa ne pensate!
  • Like
Reazioni: Gzenn
Autore
Anyma
Visite
393
Primo rilascio
Ultimo aggiornamento
Valutazione
0.00 stella(e) 0 valutazioni

Più risorse di Anyma

Indietro
Alto