#howto - Installare e configurare LEMP (Nginx, MariaDB, PHP7) su Debian 9 Stretch

Scritto da il
Redatto da
nginx
debian
mysql
php

Specialmente per l'utilizzo e la distribuzione di applicativi web, una corretta configurazione di un server web é indispensabile. Trattando questo argomento mi sento in dovere di dire che vi sono diverse scuole di pensiero. C'é chi predilige Apache a Nginx, chi viceversa, chi li sfrutta entrambi in sincronia. Lo stesso vale per MySQL e MariaDB. Quello che andró a spiegare in questa guida riguarda la seguente combinazione di software:

  • Nginx
  • MariaDB
  • PHP 7

Nginx servirá per la gestione degli spazi virtuali dove ospitare ed eseguire le applicazioni web (sostanzialmente siti web), MariaDB come database Sql e PHP 7 come linguaggio di programmazione indispensabile ad applicativi appunto scritti in PHP.

Installazione

Prima di tutto dobbiamo installare i pacchetti sopra-citati e per farlo non serve altro che l'accesso alla console e:

apt install nginx mariadb-server php-fpm php-mysql

ricordate che durante la fase di installazione di mariadb-server, vi verrá chiesto di inserire una password root che dovrete segnare in quanto verrá utilizzata a fine guida.

A questo punto é tutto pronto per la configurazione, seguiranno altre installazioni secondarie e non indispensabili.

Configurazione

Prima ancora di passare alla vera configurazione dobbiamo abilitare e avviare il processo di PHP (php7.0-fpm) per renderlo eseguile in modo autonomo:

systemctl start php7.0-fpm
systemctl enable php7.0-fpm

Infine possiamo controllare la corretta esecuzione digitando:

systemctl status php7.0-fpm

Il che come output dovrebbe restituire [ ok ] php-fpm7.0 is running. Proseguiamo con la configurazione di Nginx. Dobbiamo tener conto che vi sono 2 path principali:

  • /etc/nginx/sites-available/
  • /etc/nginx/sites-enabled/

La prima path sites-available, contiene tutte le configurazioni che andremo a creare per ogni sito web ospitato, la seconda sites-enabled, contiene dei semplici link simbolici dei precedenti file di configurazione, ció serve ad abilitare i siti web. Per il momento procediamo col file default (/etc/nginx/sites-available/default) che risponderá alla visualizzazione dell'IP diretto al server. Apriamo quindi il file e sostituiamo il contenuto col seguente:

### DEFAULT
server {
        # LISTEN
        listen 80 default_server;
        listen [::]:80 default_server;

        # ROOT
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;

        server_name _;
        # LOCATIONS
        location / {
                try_files $uri $uri/ =404;
        }

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

Come possiamo vedere, il file é suddiviso in 4 sezioni:

  • # LISTEN indica la porta da cui é acessibile Nginx, la porta cambia in 443/ssl se l'applicativo web deve essere disponibile tramite tramite https (il che significa che deve disporre di un certificato SSL)
  • # ROOT indica la path in cui Nginx andrá a cercare i file per quel determinato applicativo/sito web, in questo caso si tratta del predefinito ma per una miglior gestione consiglio di creare per ogni sito web, una path differente in /var/www, ad esempio: /var/www/example.ex
  • # LOCATIONS i blocchi locations, non sono altro che zone in cui é possibile dichiarare determinate regole per una specifica tipologia di file e/o path, come la seguente PHP
    • # PHP il blocco PHP é una Location contenente delle regole che vengono applicate ai soli file con estensione .php

Una volta inserito il contenuto qui sopra nel file, non ci resta che salvarlo e creare subito un file di prova in php per garantire il corretto funzionamento, per fare ció basta digitare:

echo "<?php phpinfo();" > /var/www/html/index.php

Come per php7.0-fpm, avviamo ed abilitiamo nginx:

systemctl start nginx
systemctl enable nginx

e verifichiamo lo stato come prima:

systemctl status nginx

Tenete contro che ogni volta che metterete mano alle configurazioni nginx, dovrete eseguire il reload di nginx:

systemctl reload nginx

e ogni volta che andrete ad aggiungere un nuovo sito web e quindi creare una configurazione in sites-available, dovrete effettuare il collegamento simbolico in sites-enabled

ln -s /etc/nginx/sites-available/example.ex /etc/nginx/sites/enabled/example/ex

Digitando ora dal nostro browser, l'indirizzo IP della macchina, dovremmo trovarci davanti alla schermata delle informazioni PHP, se cosí non fosse controllate bene i passaggi precedenti. Procediamo con MariaDB. Prima di tutto avviamo ed abilitiamo il processo:

systemctl start mariadb
systemctl enable mariadb

e verifichiamo il processo come di consueto:

systemctl status mariadb

Ad inizio guida vi ho detto di segnarvi la password root per mariadb-server, ecco servirá ora. Andiamo a creare il file /var/www/html/sql.php col seguente contenuto, avendo la premuta di cambiare "PASSWORD" con una password di vostra scelta che dovrete ovviamente segnarvi:

<?php $dbh = mysqli_connect('localhost', 'admin', 'PASSWORD');
if (!$dbh) {
    die('Errore di connessione": ' . mysqli_error());
}
echo 'Connessione effettuata!';
mysqli_close($dbh);

questo file servirá a testare il corretto funzionamento del server mariadb. Andiamo ora a creare l'utente admin, per farlo ci serviremo dell'utente root e della password precedentemente salvata, ricordiamoci di cambiare PASSWORD con la password admin inserita poco fa nel file /var/www/html/sql.php:

mysql -u root -e "CREATE USER 'admin'@'%' IDENTIFIED BY 'PASSWORD';"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;"

Tutto é pronto, controlliamo il corretto funzionamento di mariadb da riga di comando, digitando:

php /var/www/html/sql.php

Che dovrebbe restituire il messaggio "Connessione effettuata!", se cosí non fosse, controllate bene i passaggi precedenti e assicuratevi di averla eseguita su una macchina con Debian 9 Stretch.

history_edu Revisioni