Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Lamp in Debian 9

Installazione e configurazione LAMP in Debian 9

Lo stack LAMP è un acronimo che rappresenta i seguenti pacchetti combinati insieme: kernel Linux, server Web Nginx, database MariaDB (o MySQL) e linguaggio di programmazione PHP lato server. Questi software sono ampiamente utilizzati sui server  per distribuire siti Web dinamici o applicazioni web interattive.

Nginx è un server Web moderno ed efficiente in termini di risorse, attivamente in fase di sviluppo e il secondo più utilizzato su Internet dopo il server Apache HTTP, poiché utilizza un approccio asincrono basato sugli eventi per gestire le richieste.

Questo tutorial ti guiderà su come installare e configurare lo stack LAMP (Nginx con MariaDB e PHP7) in Debian 9.

REQUISITI

.Ultima versione del sistema operativo Debian 9, che può essere ottenuta dal seguente link https://www.debian.org/CD/http-ftp/, installato da zero su un VPS, una macchina virtuale o direttamente su una macchina auto-dedicata .
.Accesso diretto alla console del server o connessione SSH remota
.Un’interfaccia di rete configurata con un indirizzo IP statico per la macchina
.Un nome di dominio pubblico registrato con record DNS A e CNAME (www) configurati sul lato server dei nomi.

[slideshow_deploy id=’367′]

In questa guida useremo linuxbox.cf come dominio di esempio. L’indirizzo IP del server è configurato con un indirizzo IP appartenente allo spazio privato della classe C, NAT-ed in internet tramite il router principale. Il dominio sarà visibile da internet tramite la porta che inoltra le porte Apache 80 e 443 dal router principale all’indirizzo IP del server interno.

Step 1: configurazione iniziale

Accedere con root o con un utente con privilegi di root nel proprio sistema e aggiornare i componenti di Debian 9 (aggiornamenti del kernel, aggiornamenti del pacchetto e patch di sicurezza):

sudo apt  update
sudo apt upgrade
sudo apt dist-upgrade

Successivamente, assicurati di aggiungere un nome per il tuo hostname della macchina eseguendo il comando seguente. Successivamente, è necessario riavviare il sistema per applicare il nuovo nome host.

sudo hostnamectl set-hostname hostname.yourdomain.com
sudo init 6

Quindi, andare avanti e installare i programmi di utilità wget, curl e bash di net-tools per utilizzarli successivamente per amministrare facilmente il proprio server Debian.

sudo apt install net-tools sudo wget curl bash-completion

Step2: Installare Web Server Nginx

Nginx è un server Web moderno ed efficiente per le risorse utilizzato per visualizzare pagine Web. Installa il server web Nginx dai repository ufficiali di Debian 9 eseguendo il comando seguente nella console del tuo server.

sudo apt-get install nginx

Come mostrato nell’immagine sopra, il gestore pacchetti apt controllerà le dipendenze aggiuntive per il pacchetto e ti chiederà se accetti di continuare con il processo di installazione. Rispondere con yes (y) per installare Nginx.

Successivamente, eseguire il comando netstat per visualizzare i socket di rete sul proprio sistema e verificare se il daemon nginx è in ascolto sulla porta 80 / TCP. In alternativa, è possibile che si desideri emettere il comando systemctl per verificare lo stato del daemon nginx come illustrato nell’immagine sottostante.

sudo netstat -tlp
sudo netstat –tlpn
sudo systemctl status nginx.service

 

Una volta che il server nginx è attivo e funzionante nel sistema, utilizzare il comando ifconfig per visualizzare le informazioni sulle interfacce di rete ed elencare gli indirizzi IP della macchina. Quindi, aprire un browser e visitare la pagina Web predefinita di Nginx tramite il protocollo HTTP aggiungendo l’indirizzo IP nel browser. Il messaggio “Welcome to Nginx!” Dovrebbe essere visualizzato nella finestra del browser.

Step 3: Attivare protocollo Nginx http/2.0

Per impostazione predefinita, le ultime versioni di Nginx fornite dai repository Debian 9 sono costruite con protocollo HTTP / 2.0. HTTP / 2.0 è incorporato nei protocolli TSL / SSL e può migliorare la velocità di caricamento delle pagine Web tramite transazioni protette.

Tutti i browser moderni, come Chrome o Firefox, dovrebbero supportare questo protocollo per impostazione predefinita. Tuttavia, tenere presente che i browser Microsoft Internet Explorer e Microsoft Edge non possono ancora analizzare il protocollo http2.

Per abilitare il protocollo HTTP / 2.0 in Nginx su Debian 9, è necessario apportare alcune modifiche al file di configurazione predefinito di nginx o creare un nuovo file di configurazione e aggiungere il blocco di codice TLS per il server 443. Per fare ciò, prima eseguire un backup dei siti Nginx, nella configurazione predefinita disponibile, inviando il comando seguente. Confermare che il backup è stato eseguito correttamente elencando il contenuto della directory disponibile per i siti.

[slideshow_deploy id=’367′]

sudo cp /etc/nginx/sites-available/default{,.backup}
ls /etc/nginx/sites-available/

Quindi, crea il file di configurazione Nginx TLS usando un editor di testo e aggiungi il seguente contenuto.

sudo nano /etc/nginx/sites-available/default.ssl

file di default-ssl:


server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
#server_name www.domain.tld;
server_name _;

root /var/www/html;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

#SSL Certificates
ssl_certificate “/etc/nginx/ssl/cert.pem”;
ssl_certificate_key “/etc/nginx/ssl/privekey.pem”;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security “max-age=31536000;
#includeSubDomains” always;

location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}

set $cache_uri $request_uri;

location ~ /.well-known {
allow all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /\.ht {
# deny all;
#}
}


L’abilitazione all’uso del protocollo HTTP / 2.0 è rappresentata dalla parola http2 dalla riga sottostante.

listen 443 ssl http2 default_server;

Nel caso in cui i browser dei visitatori non supportino il protocollo HTTP2, rimuovere la parola http2 dalle configurazioni del server per disabilitare il protocollo e riavviare il servizio nginx per applicare le modifiche.

Nel caso in cui si abbia un dominio registrato o si usi l’hosting virtuale basato su indirizzi IP, è necessario aggiungere il nome del dominio o l’indirizzo IP dopo la direttiva server_name come mostrato nell’esempio seguente.

server_name www.linuxbox.cf linuxbox.cf;

Una volta finito di modificare il file di configurazione predefinito di Nginx con le impostazioni sopra riportate…

Nel file di configurazione TSL nginx sopra indicato abbiamo specificato il percorso per il certificato e la chiave TLS. Poiché non abbiamo ancora installato le chiavi nel sistema, utilizzare il seguente comando per generare il file e la chiave del certificato SSL autofirmato. Durante la generazione del certificato SSL ti verranno fatte una serie di domande. Aggiungi il codice a due lettere per il tuo paese, lo stato o la provincia, il nome della tua città, il nome della tua organizzazione, il nome dell’unità della tua organizzazione, il nome comune del tuo server e un indirizzo email valido. È necessario prestare attenzione all’impostazione del nome comune in modo che corrisponda al record FQDN della macchina dal server DNS o all’indirizzo IP del server che verrà utilizzato per accedere alla pagina Web. Il certificato e la chiave saranno memorizzati in una nuova directory, nella directory nginx, denominata ssl come mostrato nello screenshot sottostante.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/privekey.pem -out /etc/nginx/ssl/cert.pem
ls /etc/nginx/ssl/

Inoltre, genera un nuovo potente codice Diffie-Hellman, che può essere trovato nel suddetto file di configurazione alla riga dell’istruzione ssl_dhparam, inviando il seguente comando:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Infine, dopo aver generato la chiave Diffie-Hellman, attivare il file di configurazione TLS creando un collegamento simbolico per il file di configurazione defult-ssl dalla directory dei siti,

[slideshow_deploy id=’367′]

disponibile nella directory abilitata ai siti, utilizzando il seguente comando.

ln -s /etc/nginx/sites-available/default-ssl /etc/nginx/sites-enabled/

Quindi, testare il file di configurazione Nginx per gli errori di sintassi e, se tutto è ok, riavviare il daemon Nginx per applicare tutte le modifiche eseguendo i comandi sottostanti.

sudo nginx -t
sudo systemctl restart nginx.service

Per verificare se il server Web Nginx è vincolante sulla porta SSL, emettere il comando netstat e verificare se la porta 443 è visualizzata in modalità ascolto.

netstat –tlpn | grep nginx

Quindi, accedi al tuo nome di dominio o indirizzo IP del tuo server tramite protocollo HTTP da un browser per visualizzare la pagina predefinita di nginx. Poiché stai utilizzando certificati autofirmati, nel tuo browser dovrebbe essere visualizzato un errore. Conferma l’errore per passare alla pagina principale predefinita di nginx.

Nel caso in cui Nginx non fornisca una pagina index.html predefinita nella directory webroot, utilizzare il seguente comando per creare la pagina indice.

echo "test page" | tee /var/www/html/index.html

Per confermare la presenza del protocollo HTTP / 2.0 pubblicizzato da Nginx, emettere il comando seguente. Cerca la parola h2 in protocols advertised by the server

 openssl s_client -connect localhost:443 -nextprotoneg ''

È inoltre possibile visualizzare lo stato della connessione e verificare se il protocollo http2 è pubblicizzato da Nginx dal browser Chrome premendo il tasto funzione F12 e richiedere la pagina. Per mostrare il protocollo utilizzato dalla richiesta, vai alla scheda Rete, fai clic con il pulsante destro del mouse sul menu Tipo e controlla Protocollo archiviato. Il protocollo HTTP2 dovrebbe essere visualizzato come h2 nella colonna del protocollo corrente, come illustrato nello screenshot sottostante.

Step 4: Installare php 7

Il server web Nginx può offrire contenuti web dinamici con l’aiuto dell’interprete del linguaggio di programmazione PHP tramite il gestore di processi PHP FastCGI a cui Nginx trasmette le richieste di elaborazione. Il process manager FastCGI può essere ottenuto installando il pacchetto precompilato php-fpm offerto dai repository ufficiali di Debian 9.

Per installare il gestore dei processi php-fpm e l’interprete PHP7.0 nel sistema insieme ai pacchetti aggiuntivi che permetteranno a PHP di comunicare con il server Web Nginx, utilizzare il seguente comando sulla console del server:

sudo apt install php7.0 php7.0-fpm php7.0-curl php7.0-gd

Una volta che l’interprete PHP7.0 è stato installato con successo nel tuo sistema, avvia e controlla il demone php7.0-fpm inserendo il seguente comando:

sudo systemctl start php7.0-fpm
sudo systemctl status php7.0-fpm

Nel file di configurazione TLS sopra riportato di Nginx, abbiamo già aggiunto le configurazioni dei blocchi per il gestore dei processi FastCGI di PHP al fine di offrire contenuti dinamici. Il blocco di codice che consente a Nginx di utilizzare l’interprete PHP è mostrato nel seguente estratto, quindi non sono necessari ulteriori passaggi per modificare il file di configurazione TSG Nginx. Il segno # dell’hashtag dall’inizio delle righe nello screenshot qui sotto è un commento. Le righe commentate dai file di configurazione vengono ignorate per impostazione predefinita dal server Web Nginx.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

Per testare e verificare se Nginx può passare correttamente i file php al processore PHP,

[slideshow_deploy id=’367′]

creare un file di configurazione di test info.php PHP emettendo il comando seguente

sudo su -c ‘echo “<?php phpinfo(); ?>” > /var/www/html/info.php’

Quindi, visita la pagina di informazioni php nel tuo browser inserendo il nome di dominio del tuo server o l’indirizzo IP pubblico seguito da /info.php.

Puoi anche controllare se il protocollo HTTP / 2.0 è pubblicizzato dal server cercando la riga $ _SERVER [‘SERVER_PROTOCOL’] su Variabili PHP.

Per installare altri moduli PHP7.0, eseguire il comando apt search php7.0 per trovare un modulo PHP specifico e installarlo. Se si prevede di installare un sistema di gestione dei contenuti, come WordPress, sopra lo stack LAMP, emettere il seguente comando per installare alcuni moduli PHP aggiuntivi.

sudo apt install php7.0-mcrypt php7.0-mbstring

Tuttavia, i moduli PHP appena installati non sono abilitati di default sul tuo sistema. Per attivare un nuovo modulo PHP installato per Nginx, è necessario riavviare il servizio PHP-FPM immettendo il comando seguente.

sudo systemctl restart php7.0-fpm.service

Step5:  Installare Database MariaDB

Infine, l’ultimo pezzo… Il componente LAMP del database MariaDB che viene utilizzato per archiviare i record in tabelle e colonne e gestire dinamicamente i dati di un’applicazione Web. Per installare il sistema di gestione del database MariaDB in Debian 9 con il modulo PHP richiesto per accedere al database da file PHP, emettere il comando di seguito nella console del server. Successivamente, riavvia il demone PHP-FPM per attivare il modulo PHP MySQL necessario per accedere al database.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

Per impostazione predefinita, l’account root di sistema o gli utenti con privilegi di root possono accedere al database senza fornire una password. Per cambiare questo, in modo che MySQL richieda una password ogni volta che un utente del sistema tenti di accedere al database, accedere al database MySQL dall’interfaccia della riga di comando, con i privilegi di root ed eseguire i seguenti comandi nella console MySQL:

sudo mysql

MariaDB> use mysql;
MariaDB> update user set plugin=” where User=’root’;
MariaDB> flush privileges;
MariaDB> exit

Al passo successivo, assicurati di proteggere MariaDB eseguendo lo script di sicurezza mysql_secure_installation fornito dal pacchetto di installazione dai repository estesi di Debian. Durante l’esecuzione dello script verranno posta una serie di domande progettate per proteggere il database MariaDB, come ad esempio: cambiare la password di root di MySQL, rimuovere gli utenti anonimi, disabilitare gli accessi root remoti ed eliminare il database di test. Esegui lo script con il comando sottostante e assicurati di dire si a tutte le domande poste

sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current

password for the root user. If you’ve just installed MariaDB, and

you haven’t set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none):

OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

You already have a root password set, so you can safely answer ‘n’.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

… Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y

… Success!

Normally, root should only be allowed to connect from ‘localhost’. This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y

… Success!

By default, MariaDB comes with a database named ‘test’ that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] y

– Dropping test database…

… Success!

– Removing privileges on test database…

… Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y

… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!


Infine, per testare la funzionalità di MariaDB, accedere al database dalla console ed eseguire il seguente comando.

[slideshow_deploy id=’367′]

Dovrebbe essere visualizzato un elenco dei database predefiniti nella console MariaDB. Uscire dalla console MariaDB con l’istruzione exit.

mysql -u root –p

MariaDB [(none)]> show databases;
+——————–+
| Database           |
+——————–+
| information_schema |
| mysql              |
| performance_schema |
+——————–+
3 rows in set (0.00 sec)
 
MariaDB [(none)]> exit

Questo è tutto! Il server Web Nginx, il database MariaDB e il linguaggio di programmazione PHP sono installati sulla tua macchina Debian 9. Ora puoi iniziare a creare siti web dinamici o applicazioni web per i tuoi visitatori.

Thanks!

 

 

 

 

Piaciuto l'articolo? Condividilo sui social!

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on whatsapp
WhatsApp