Introduzione
LEMP è un gruppo di software open source che viene in genere installato insieme per consentire a un server di ospitare siti Web dinamici e app Web.
LEMP comprende Nginx, MySQL, PHP.
In questo tutorial installeremo LEMP su Linux Mint 19 Tara.
Installazione Nginx
I repository ufficiali dei pacchetti di Linux Mint includono una versione aggiornata di Nginx, Possiamo quindi installare i pacchetti necessari usando apt.
Aggiornare l'elenco dei pacchetti di Linux Mint per avere la versione più recente degli elenchi del repository, da terminale:
sudo apt update
Per installare Nginx aprire il terminale e dare questi comandi:
sudo apt install nginx
Se il firewall di Linux Mint è attivo dovete abilitare il traffico per Nginx:
sudo ufw allow 'Nginx HTTP'
A questo punto il server è pronto con le configurazioni di default.
Basta collegarsi al proprio indirizzo IP pubblico oppure in localhost:
http://localhost
Per riavviare Nginx:
sudo service nginx restart
Per fermare Nginx:
sudo service nginx stop
Per avviare Nginx:
sudo service nginx start
Installare MySQL
È possibile installare MySQL utilizzando il repository ufficiale di Linux Mint con apt.
Installare MySQL:
sudo apt install mysql-server
Mettere in sicurezza MySQL
Avviare uno script di MySQL per modificare alcune impostazioni:
sudo mysql_secure_installation
Vi verrà chiesto di inserire una password per l'utente root, che utilizzerete per accedere al server MySQL.
Inserire "y" per "si" oppure qualsiasi altra lettera per "no".
Vi verrà chiesto se si vuole testare la sicurezza della password.
Successivamente è consigliato premere "y" quindi "si".
- Rimuovere gli utenti anonimi
- Disabilitare il login root da remoto
- Rimuovere il database test
- Aggiornare le nuove regole
Modificare il metodo di autenticazione
A partire dalla versione 5.7 di MySQL, l'utente root di MySQL è impostato per l'autenticazione tramite il plug-in auth_socket per impostazione di default anziché con una password.
Per utilizzare una password per connettersi a MySQL come utente root è necessario modificare il metodo di autenticazione, da auth_socket a mysql_native_password.
Poiché non è stata impostata ancora nessuna password, è possibile connettersi al server MySQL utilizzando semplicemente il comando mysql oppure sudo mysql se si è loggati come utente normale. Successivamente sarà necessario utilizzare il comando mysql -u root -p da utente root, altrimenti sudo mysql -u root -p da utente normale.
Quindi se siete loggati come utente root, scrivere nel terminale:
mysql
Altrimenti se siete loggati come utente normale con privilegi sudo:
sudo mysql
Per verificare il metodo di autenticazione associato agli account di mysql:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Dovresti ricevere un messaggio simile a questo:
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *5852386AB32C5DAD5DDA4F5FED911A70DA342656 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Come potete vedere per l'utente root è impostato di default il metodo di autenticazione auth_socket.
Per utilizzare l'autenticazione con password per l'account root effettuare le seguenti modifiche:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'TUA_PASSWORD';
Attenzione:
Potresti ricevere un messaggio di output simile al seguente:Your password does not satisfy the current policy requirements.
Leggi questo tutorial per risolvere il problema.
Effettuare un refresh delle tabelle:
FLUSH PRIVILEGES;
Adesso è possibile verificare il nuovo metodo di autenticazione associato all'utente root:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Dovresti ricevere un messaggio simile a questo:
+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *E6A3377941E640ADEDCC8907E390B06B0C863862 | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *5852386AB32C5DAD5DDA4F5FED911A70DA342656 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Uscire dal prompt di MySQL:
exit;
Per effettuare nuovamente il login al server MySQL adesso sarà necessario inserire una password, quindi da terminale:
Se siete loggati come utente root, scrivere nel terminale:
mysql -u root -p
Altrimenti se siete loggati come utente normale con privilegi sudo:
sudo mysql -u root -p
Installazione PHP
Per installare PHP da terminale:
sudo apt install php-fpm php-mysql
ATTENZIONE: Nel momento in cui scrivo PHP 7.2 è l'ultima versione, potreste quindi dover cambiare il percorso del file con la versione da voi utilizzata.
Per rendere l'installazione di PHP più sicura digitare il seguente comando:
sudo nano /etc/php/7.2/fpm/php.ini
Cercare questa riga ;cgi.fix_pathinfo, rimuovere il " ; " e inserire il parametro "0". Quindi:
cgi.fix_pathinfo=0
Riavviare PHP:
sudo systemctl restart php7.2-fpm
Configurare Nginx per utilizzare PHP:
sudo nano /etc/nginx/sites-available/default
ATTENZIONE: Nel momento in cui scrivo PHP 7.2 è l'ultima versione, potreste quindi dover cambiare il percorso del file con la versione da voi utilizzata all'interno del blocco location ~ \.php$.
Apportare le modifiche necessarie aggiungendo:
index.php
location ~ .php$
fastcgi_pass unix:/var/run/php/php7.X-fpm.sock;.
Quindi:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Testiamo la corretta configurazione:
sudo nginx -t
Riavviare Nginx:
sudo service nginx restart
Verifichiamo l'installazione di PHP. Creiamo un file con estensione .php:
sudo nano /var/www/html/info.php
Incollare questo codice:
<?php phpinfo(); ?>
Salvare e chiudere il file.
Collegarsi al proprio indirizzo IP pubblico oppure in localhost:
http://localhost/info.php
L'installazione e configurazione base di un web server Nginx con MySQL e PHP su Linux Mint 19 Tara è terminata.