GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Installa Nginx, MySQL, PHP (LEMP Stack) su Ubuntu 20.04 LTS

Nel nostro tutorial precedente, abbiamo discusso di come installare lo stack LAMP in Ubuntu 20.04 LTS server. In questo tutorial, vedremo come installare Nginx, MySQL, PHP (stack LEMP) su Ubuntu 20.04 LTS server edition. LEMP è l'acronimo di L inux, En gine-x, M ariaDB/M ySQL, P HP/P erl/P ython.

Installa Nginx, MySQL, PHP (LEMP Stack) su Ubuntu 20.04 LTS

Ai fini di questo tutorial, utilizzerò la seguente macchina di prova:

  • Sistema operativo :Server Ubuntu 20.04 LTS
  • Indirizzo IP :192.168.225.52/24

Cominciamo.

1. Installa Nginx su Ubuntu

Esegui il seguente comando dal Terminale per installare il server web Nginx:

$ sudo apt install nginx

Dopo aver installato Nginx, controlla se il servizio Nginx è in esecuzione o non utilizza il comando:

$ sudo systemctl status nginx

Risultato di esempio:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:13:47 UTC; 56s ago
       Docs: man:nginx(8)
   Main PID: 1349 (nginx)
      Tasks: 2 (limit: 2283)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1350 nginx: worker process

May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

Se vedi un output come sopra, il servizio Nginx è stato avviato.

Nel caso in cui il servizio Nginx non sia ancora avviato, puoi avviarlo usando il comando:

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

1.1 Consenti server web Nginx tramite firewall UFW

UFW , sta per U F complicato irew all, è un programma per la gestione di un firewall netfilter progettato per essere facile da usare. UFW è disponibile per impostazione predefinita in tutte le versioni di Ubuntu.

Per impostazione predefinita, non è possibile accedere al browser Web Nginx da sistemi remoti se è stato abilitato il firewall UFW in Ubuntu 20.04 LTS. Devi consentire http e https porte seguendo i passaggi indicati di seguito.

Per prima cosa, vediamo quali applicazioni hanno installato un profilo usando il comando:

$ sudo ufw app list

Risultato di esempio:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Come puoi vedere, le applicazioni Nginx e OpenSSH hanno installato profili UFW.

Se esamini il "Nginx Full" profilo, vedrai che abilita il traffico verso le porte 80 e 443 :

$ sudo ufw app info "Nginx Full"

Risultato di esempio:

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

Ora, esegui il comando seguente per consentire il traffico HTTP e HTTPS in entrata per questo profilo:

$ sudo ufw allow in "Nginx Full"

Vedrai un output simile al seguente:

Rules updated
Rules updated (v6)

Se desideri consentire il traffico https, ma solo il traffico http (80), esegui:

$ sudo ufw app info "Nginx HTTP"

Andiamo avanti ed eseguiamo la pagina di test di Nginx.

Per farlo, apri il tuo browser web e vai a http://localhost/ o http://indirizzo-IP/ .

Vedrai la pagina di benvenuto di Nginx come mostrato di seguito.

Congratulazioni! Il server Nginx funziona!

2. Installa MySQL su Ubuntu

Per installare MySQL su Ubuntu, esegui:

$ sudo apt install mysql-server

Verifica se il servizio MySQL è in esecuzione o non utilizza il comando:

$ sudo systemctl status mysql

Risultato di esempio:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
   Main PID: 2288 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 2283)
     Memory: 325.6M
     CGroup: /system.slice/mysql.service
             └─2288 /usr/sbin/mysqld

May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.

Come puoi vedere nell'output sopra, Mysql è in esecuzione!

2.1 Imposta la password dell'utente amministrativo (root) del database per Mysql

Per impostazione predefinita, MySQL è root la password dell'utente è vuota. Non è consigliabile utilizzare una password vuota per l'account amministrativo del database. Devi proteggere il tuo server MySQL eseguendo il seguente script:

$ sudo mysql_secure_installation

Ti verrà chiesto se desideri impostare "VALIDATE PASSWORD" componente o meno. Questo componente consente agli utenti di configurare una password complessa per le credenziali del database. Se abilitato, verificherà automaticamente la forza della password e impone agli utenti di impostare solo le password sufficientemente sicure. È sicuro lasciarlo disabilitato . Tuttavia, è necessario utilizzare una password complessa e univoca per le credenziali del database. Se non vuoi abilitare questo componente, premi un tasto qualsiasi per saltare la parte di convalida della password e continuare il resto dei passaggi.

Se la tua risposta è , ti verrà chiesto di scegliere il livello di convalida della password.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No y

Le convalide delle password disponibili sono basse , medio e forte . Basta inserire il numero appropriato (0 per basso, 1 per medio e 2 per password complessa) e premere il tasto INVIO.

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0

Ora, inserisci la password per l'utente root di MySQL. Tieni presente che devi utilizzare la password per l'utente root mysql a seconda della politica della password scelta nel passaggio precedente. Se non hai abilitato il plug-in, utilizza una password complessa e univoca di tua scelta.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Dopo aver inserito la password due volte, vedrai la sicurezza della password (nel nostro caso è 100 ). Se per te va bene, premi Y per continuare con la password fornita. Se non sei soddisfatto della lunghezza della password, premi qualsiasi altro tasto e imposta una password complessa. Sono d'accordo con la mia password attuale, quindi ho scelto y .

Per il resto delle domande, digita semplicemente y e premi INVIO. Ciò rimuoverà l'utente anonimo, non consentirà l'accesso dell'utente root in remoto e rimuoverà il database di prova.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL 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? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Fatto! Abbiamo impostato la password dell'utente root MySQL.

2.2 Modifica del metodo di autenticazione per l'utente root MySQL

Per impostazione predefinita, l'utente root di MySQL è impostato per l'autenticazione utilizzando "auth_socket" plugin a partire da MySQL 5.7 e versioni successive su Ubuntu. Anche se migliora la sicurezza, complicherà anche le cose quando accedi al tuo server di database utilizzando qualsiasi programma esterno, ad esempio phpMyAdmin. Per risolvere questo problema, devi cambiare il metodo di autenticazione da auth_socket a "caching_sha2_password" o "mysql_native_password" .

A partire dalla versione MySQL 8.0, il plug-in di autenticazione preferito e predefinito è caching_sha2_password . Il plug-in di autenticazione caching_sha2_password fornisce una crittografia della password più sicura rispetto al plug-in mysql_native_password.

Per modificare il plug-in di autenticazione, accedi al tuo prompt MySQL usando il comando:

$ sudo mysql

Eseguire il comando seguente al prompt di mysql per trovare il metodo di autenticazione corrente per tutti gli account utente di mysql:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Risultato di esempio:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�[email protected]>[email protected] | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Come puoi vedere, l'utente root di MySQL utilizza auth_socket plug-in per l'autenticazione.

Per modificare il plug-in auth_socket in caching_sha2_password, eseguire il comando seguente al prompt di mysql. Se hai abilitato il plug-in VALIDATE PASSWORD, assicurati di aver utilizzato una password complessa in base ai requisiti della politica corrente. Un forte dovrebbe essere composto da almeno 8 caratteri, tra cui una lettera maiuscola, una lettera minuscola, un numero e un carattere speciale.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Sostituisci "Password123#@!" con una password forte e univoca di tua scelta nel comando sopra.

Aggiorna le modifiche usando il comando:

mysql> FLUSH PRIVILEGES;

Ora controlla se il plug-in di autenticazione corrente è stato modificato o non utilizzando il comando:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Risultato di esempio:

Bene! Ora l'utente root di myql può autenticarsi usando la password per accedere alla shell di mysql.

Esci dal prompt di MySQL:

mysql> exit

Nota:

Anche se il plug-in caching_sha2_password fornisce una crittografia sicura avanzata, presenta alcuni problemi di compatibilità con le installazioni MySQL esistenti. Per i dettagli, fare riferimento a questo collegamento . Se hai riscontrato problemi di compatibilità, devi impostare "mysql_native_password" plug-in come plug-in di autenticazione predefinito.

Per passare a mysql_native_password plug-in, esegui il seguente comando al prompt di mysql.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Aggiorna le modifiche usando il comando:

mysql> FLUSH PRIVILEGES;

Ora controlla di nuovo se il metodo di autenticazione è stato modificato o non utilizzando il comando:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Risultato di esempio:

Esci dal prompt di mysql immettendo il seguente comando:

exit

3. Installa PHP su Ubuntu

Per installare PHP, esegui:

$ sudo apt-get install php-fpm php-mysql

Dopo aver installato PHP, dobbiamo proteggerlo apportando una semplice modifica in php.ini file.

Per farlo, modifica php.ini file utilizzando il tuo editor preferito:

$ sudo vi /etc/php/7.4/fpm/php.ini

Trova la riga seguente:

;cgi.fix_pathinfo=1

Decommentalo e cambiane il valore da 1 a 0 (zero) .

cgi.fix_pathinfo=0

Salva e chiudi il file. Quindi, riavvia il servizio PHP-FPM per rendere effettive le modifiche.

$ sudo systemctl restart php7.4-fpm

Verifica che il servizio PHP-FPM sia in esecuzione o non utilizzi il comando:

$ sudo systemctl status php7.4-fpm

Risultato di esempio:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
     Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
       Docs: man:php-fpm7.4(8)
    Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
   Main PID: 10693 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2283)
     Memory: 7.0M
     CGroup: /system.slice/php7.4-fpm.service
             ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─10709 php-fpm: pool www
             └─10710 php-fpm: pool www

May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

3.1 Configura Nginx per utilizzare PHP-FPM

Abbiamo bisogno di configurare Nginx per usare PHP-FPM.

Per farlo, modifica il vhost predefinito di Nginx (blocco server) /etc/nginx/sites-available/default file:

$ sudo vi /etc/nginx/sites-available/default

Trova la sezione Server e imposta l'FQDN o l'indirizzo IP del tuo server Ubuntu come mostrato di seguito. Inoltre, ricontrolla se hai aggiunto index.php linea. Tutte le modifiche sono mostrate in grassetto.

[...]
server {
 listen 80 default_server;
 listen [::]:80 default_server;

[...]

root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.php index.html index.htm index.nginx-debian.html;

 server_name 192.168.225.52;
[...]

Ecco,

  • ascolta 80; -> ascolta ipv4.
  • ascolta [::]:80 server_predefinito; -> ascolta ipv6.
  • index.php -> Aggiungi questo se usi PHP.
  • root /var/www/html; -> Directory principale del documento Nginx.
  • nome_server 192.168.225.52; -> Indirizzo IP del nostro server Ubuntu.

Quindi, scorri un po' verso il basso e trova "#location ~ \.php$" sezione.

Decommenta e modifica le seguenti righe come mostrato di seguito.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-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;
 }
}

Fare riferimento allo screenshot seguente. Le modifiche sono contrassegnate/sottolineate in rosso.

Salva ed esci dal file.

Presta molta attenzione quando modifichi fastcgi_pass direttiva all'interno della posizione ~ \.php$ bloccare. Devi menzionare il file del nome corretto con ciò che è effettivamente memorizzato in /var/run/php directory sul tuo server. Per verificarlo, esegui:

$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock

Come puoi vedere, il nome del file è php7.4-fpm.sock . Assicurati di aver menzionato il nome corretto in questa direttiva.

Controlla il file di configurazione di Nginx per eventuali errori di sintassi usando il comando:

$ sudo nginx -t

Risultato di esempio:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se non vedi alcun errore, riavvia il servizio nginx per rendere effettive le modifiche.

Per farlo, esegui:

$ sudo systemctl restart nginx

Ora creiamo un file PHP di esempio per testare la configurazione PHP tramite browser.

Per fare ciò, crea un file chiamato "info.php" nella cartella principale del documento Nginx.

$ sudo vi /var/www/html/info.php

Aggiungi le seguenti righe:

<?php
phpinfo();
?>

Salva ed esci dal file. Riavvia il servizio nginx per rendere effettive le modifiche.

$ sudo systemctl restart nginx

Quindi, apri il tuo browser web e vai a http://indirizzo-IP/info.php .

Vedrai i dettagli PHP.

Congratulazioni! PHP funziona!!

3.2 Installa moduli PHP

Per migliorare la funzionalità di PHP, puoi installare alcuni moduli PHP aggiuntivi.

Per elencare i moduli PHP disponibili, esegui:

$ sudo apt-cache search php- | less

Risultato di esempio:

Utilizzare le frecce e per spostarsi su e giù tra il risultato. Per uscire, digita q .

Per trovare i dettagli di un particolare modulo php, ad esempio php-gd , esegui:

$ sudo apt-cache show php-gd

Per installare un modulo php esegui:

$ sudo apt-get install php-gd

Per installare tutti i moduli (non necessari però), esegui:

$ sudo apt-get install php*

Non dimenticare di riavviare il servizio Nginx dopo aver installato qualsiasi modulo php.

Congratulazioni! Abbiamo impostato correttamente lo stack LEMP nel server Ubuntu 20.04 LTS. Inizia a distribuire siti web e applicazioni web nel tuo nuovo stack web LEMP.

Leggi il prossimo:

  • Installa phpMyAdmin con lo stack LEMP su Ubuntu 20.04 LTS

Ubuntu
  1. Come installare Nginx con PHP e MySQL (stack LEMP) su Ubuntu 18.04

  2. Come installare Phorum con Nginx su Ubuntu 18.04 LTS

  3. Come installare Nginx con PHP e MySQL (LEMP Stack) su Ubuntu 20.04 LTS

  4. Come installare lo stack LAMP su Ubuntu 22.04 LTS

  5. Come installare LEMP Stack Nginx, MySQL, PHP su Ubuntu 22.04

Come installare lo stack LEMP su Ubuntu 20.04 Server/Desktop

Come installare Nginx, MySQL e PHP (LEMP) su Ubuntu 20.04

Come installare Nginx su Ubuntu 18.04 LTS

Come installare Nginx, MySQL e PHP (LEMP) su un server Ubuntu 15.04

Come installare LEMP (Linux, Nginx, MySQL, PHP) su un server cloud Ubuntu 14.04 LTS

Come installare lo stack Nginx, MySQL, PHP (LEMP) su un server cloud Debian 8.3