GNU/Linux >> Znalost Linux >  >> Ubuntu

Nainstalujte Nginx, MySQL, PHP (LEMP Stack) na Ubuntu 20.04 LTS

V našem předchozím tutoriálu jsme diskutovali o tom, jak nainstalovat zásobník LAMP v Ubuntu 20.04 LTS server. V tomto tutoriálu uvidíme, jak nainstalovat Nginx, MySQL, PHP (LEMP stack) na Ubuntu 20.04 LTS server edition. LEMP je zkratka L inux, En gine-x, M ariaDB/M ySQL, P HP/P erl/P ython.

Nainstalujte Nginx, MySQL, PHP (LEMP Stack) na Ubuntu 20.04 LTS

Pro účely tohoto tutoriálu budu používat následující testovací stroj:

  • Operační systém :Server Ubuntu 20.04 LTS
  • IP adresa :192.168.225.52/24

Pojďme začít.

1. Nainstalujte Nginx na Ubuntu

Spusťte následující příkaz z terminálu a nainstalujte webový server Nginx:

$ sudo apt install nginx

Po instalaci Nginx zkontrolujte, zda je služba Nginx spuštěna nebo ne pomocí příkazu:

$ sudo systemctl status nginx

Ukázkový výstup:

● 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.

Pokud vidíte výstup jako výše, služba Nginx byla spuštěna.

V případě, že služba Nginx ještě není spuštěna, můžete ji spustit příkazem:

$ sudo systemctl enable nginx
$ sudo systemctl start nginx

1.1 Povolení webového serveru Nginx přes firewall UFW

UFW , znamená U nkomplikované F irew all je program pro správu firewallu netfilter navržený tak, aby byl snadno použitelný. UFW je standardně dostupné ve všech verzích Ubuntu.

Ve výchozím nastavení není webový prohlížeč Nginx přístupný ze vzdálených systémů, pokud jste povolili bránu firewall UFW v Ubuntu 20.04 LTS. Musíte povolit http a https porty podle níže uvedených kroků.

Nejprve se podívejme, které aplikace nainstalovaly profil pomocí příkazu:

$ sudo ufw app list

Ukázkový výstup:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Jak můžete vidět, aplikace Nginx a OpenSSH nainstalovaly profily UFW.

Pokud se podíváte do „Nginx Full“ profilu, uvidíte, že umožňuje provoz na portech 80 a 443 :

$ sudo ufw app info "Nginx Full"

Ukázkový výstup:

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

Ports:
80,443/tcp

Nyní spusťte následující příkaz pro povolení příchozího provozu HTTP a HTTPS pro tento profil:

$ sudo ufw allow in "Nginx Full"

Uvidíte výstup něco jako níže:

Rules updated
Rules updated (v6)

Pokud chcete povolit provoz https, ale pouze provoz http (80), spusťte:

$ sudo ufw app info "Nginx HTTP"

Pojďme do toho a spusťte testovací stránku Nginx.

Chcete-li tak učinit, otevřete webový prohlížeč a přejděte na http://localhost/ nebo http://IP-Adresa/ .

Uvidíte uvítací stránku Nginx, jak je uvedeno níže.

Gratulujeme! Server Nginx funguje!

2. Nainstalujte MySQL na Ubuntu

Chcete-li nainstalovat MySQL na Ubuntu, spusťte:

$ sudo apt install mysql-server

Ověřte, zda služba MySQL běží nebo ne, pomocí příkazu:

$ sudo systemctl status mysql

Ukázkový výstup:

● 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.

Jak vidíte na výše uvedeném výstupu, Mysql běží!

2.1 Nastavení hesla správce databáze (root) pro Mysql

Ve výchozím nastavení je MySQL root uživatelské heslo je prázdné. Nedoporučuje se používat prázdné heslo pro účet správce databáze. Musíte zabezpečit server MySQL spuštěním následujícího skriptu:

$ sudo mysql_secure_installation

Budete dotázáni, zda chcete nastavit „VALIDATE HESLO“ součást nebo ne. Tato součást umožňuje uživatelům konfigurovat silné heslo pro přihlašovací údaje databáze. Pokud je povoleno, automaticky zkontroluje sílu hesla a vynutí uživatele, aby nastavili pouze ta hesla, která jsou dostatečně bezpečná. Toto můžete bezpečně nechat deaktivované . Pro přihlašovací údaje k databázi však musíte použít silné a jedinečné heslo. Pokud tuto komponentu nechcete povolit, jednoduše stiskněte libovolnou klávesu, abyste přeskočili část ověření hesla a pokračujte ve zbývajících krocích.

Pokud je vaše odpověď Ano , budete požádáni o výběr úrovně ověření hesla.

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

Dostupná ověření hesla jsou nízká , střední a silný . Stačí zadat příslušné číslo (0 pro nízké, 1 pro střední a 2 pro silné heslo) a stisknout klávesu ENTER.

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

Nyní zadejte heslo pro uživatele root MySQL. Mějte prosím na paměti, že musíte použít heslo pro uživatele root mysql v závislosti na zásadách hesel, které jste zvolili v předchozím kroku. Pokud jste plugin nepovolili, použijte jakékoli silné a jedinečné heslo podle svého výběru.

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

Jakmile zadáte heslo dvakrát, uvidíte sílu hesla (v našem případě je to 100 ). Pokud je to pro vás v pořádku, stiskněte Y a pokračujte se zadaným heslem. Pokud nejste spokojeni s délkou hesla, stiskněte jakoukoli jinou klávesu a nastavte silné heslo. Se svým aktuálním heslem souhlasím, proto jsem zvolil y .

U ostatních otázek stačí napsat y a stiskněte ENTER. Toto odebere anonymního uživatele, zakáže vzdálené přihlášení uživatele root a odstraní testovací databázi.

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!

Hotovo! Nastavili jsme heslo uživatele root MySQL.

2.2 Změna metody ověřování pro uživatele root MySQL

Ve výchozím nastavení je uživatel root MySQL nastaven na ověřování pomocí "auth_socket" plugin počínaje MySQL 5.7 a novějšími verzemi na Ubuntu. I když to zvyšuje bezpečnost, bude to také komplikovat věci, když přistupujete k databázovému serveru pomocí externích programů, například phpMyAdmin. Chcete-li tento problém vyřešit, musíte změnit metodu ověřování z auth_socket na "caching_sha2_password" nebo "mysql_native_password" .

Od verze MySQL 8.0 je preferovaný a výchozí ověřovací plugin caching_sha2_password . Ověřovací plugin caching_sha2_password poskytuje bezpečnější šifrování hesel než plugin mysql_native_password.

Chcete-li změnit ověřovací plugin, přihlaste se do řádku MySQL pomocí příkazu:

$ sudo mysql

Spuštěním následujícího příkazu na výzvu mysql vyhledejte aktuální metodu ověřování pro všechny uživatelské účty mysql:

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

Ukázkový výstup:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| 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)

Jak vidíte, uživatel root mysql používá auth_socket plugin pro ověřování.

Chcete-li změnit plugin auth_socket na caching_sha2_password, spusťte následující příkaz na výzvu mysql. Pokud jste povolili plugin VALIDATE PASSWORD, ujistěte se, že jste použili silné heslo na základě aktuálních požadavků zásad. Silné by se mělo skládat alespoň z 8 znaků včetně velkého písmena, malého písmena, čísla a speciálního znaku.

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

Nahraďte "Heslo123#@!" se silným a jedinečným heslem dle vašeho výběru ve výše uvedeném příkazu.

Aktualizujte změny pomocí příkazu:

mysql> FLUSH PRIVILEGES;

Nyní zkontrolujte, zda je aktuální autentizační plugin změněn nebo není pomocí příkazu:

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

Ukázkový výstup:

Dobrý! Nyní se uživatel root myql může autentizovat pomocí hesla pro přístup k shellu mysql.

Ukončete výzvu mysql:

mysql> exit

Poznámka:

Přestože plugin caching_sha2_password poskytuje vylepšené bezpečné šifrování, má určité problémy s kompatibilitou se stávajícími instalacemi MySQL. Podrobnosti naleznete na tomto odkazu . Pokud narazíte na nějaké problémy s kompatibilitou, je třeba nastavit "mysql_native_password" plugin jako výchozí ověřovací plugin.

Chcete-li změnit na mysql_native_password plugin, spusťte následující příkaz na příkazovém řádku mysql.

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

Aktualizujte změny pomocí příkazu:

mysql> FLUSH PRIVILEGES;

Nyní znovu zkontrolujte, zda je metoda ověřování změněna nebo není pomocí příkazu:

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

Ukázkový výstup:

Ukončete výzvu mysql zadáním následujícího příkazu:

exit

3. Nainstalujte PHP na Ubuntu

Chcete-li nainstalovat PHP, spusťte:

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

Po instalaci PHP jej musíme zabezpečit provedením jednoduché změny v php.ini soubor.

Chcete-li tak učinit, upravte php.ini soubor pomocí vašeho oblíbeného editoru:

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

Najděte následující řádek:

;cgi.fix_pathinfo=1

Odkomentujte jej a změňte jeho hodnotu z 1 na 0 (nula) .

cgi.fix_pathinfo=0

Uložte a zavřete soubor. Poté restartujte službu PHP-FPM, aby se změny projevily.

$ sudo systemctl restart php7.4-fpm

Zkontrolujte, zda služba PHP-FPM běží nebo nepoužívá příkaz:

$ sudo systemctl status php7.4-fpm

Ukázkový výstup:

● 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 Nakonfigurujte Nginx pro použití PHP-FPM

Musíme nakonfigurovat Nginx tak, aby používal PHP-FPM.

Chcete-li tak učinit, upravte výchozí vhost Nginx (blok serveru) /etc/nginx/sites-available/default soubor:

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

Najděte sekci Server a nastavte FQDN nebo IP adresu svého serveru Ubuntu, jak je znázorněno níže. A také znovu zkontrolujte, zda jste přidali index.php čára. Všechny změny jsou zobrazeny tučně.

[...]
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;
[...]

Tady,

  • poslouchejte 80; -> poslouchat ipv4.
  • poslouchejte [::]:80 default_server; -> poslouchat ipv6.
  • index.php -> Přidejte toto, pokud používáte PHP.
  • root /var/www/html; -> Kořenový adresář dokumentu Nginx.
  • název_serveru 192.168.225.52; -> IP adresa našeho serveru Ubuntu.

Poté se posuňte trochu dolů a najděte "#location ~ \.php$" sekce.

Odkomentujte a upravte následující řádky, jak je uvedeno níže.

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;
 }
}

Podívejte se na následující snímek obrazovky. Změny jsou označeny/podtrženy červenou barvou.

Uložte a ukončete soubor.

Při úpravě fastcgi_pass věnujte zvýšenou pozornost direktiva v umístění ~ \.php$ blok. Musíte uvést správný název souboru s tím, co je skutečně uloženo v /var/run/php adresář na vašem serveru. Chcete-li to ověřit, spusťte:

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

Jak vidíte, název souboru je php7.4-fpm.sock . Ujistěte se, že jste v této direktivě uvedli správný název.

Zkontrolujte konfigurační soubor Nginx, zda neobsahuje chyby syntaxe, pomocí příkazu:

$ sudo nginx -t

Ukázkový výstup:

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

Pokud nevidíte žádné chyby, restartujte službu nginx, aby se změny projevily.

Chcete-li to provést, spusťte:

$ sudo systemctl restart nginx

Nyní vytvoříme ukázkový soubor PHP pro testování konfigurace PHP prostřednictvím prohlížeče.

Chcete-li tak učinit, vytvořte soubor s názvem „info.php“ v kořenové složce dokumentu Nginx.

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

Přidejte následující řádky:

<?php
phpinfo();
?>

Uložte a ukončete soubor. Restartujte službu nginx, aby se změny projevily.

$ sudo systemctl restart nginx

Poté otevřete webový prohlížeč a přejděte na http://IP-adresa/info.php .

Zobrazí se podrobnosti o PHP.

Gratulujeme! PHP funguje!!

3.2 Instalace modulů PHP

Chcete-li zlepšit funkčnost PHP, můžete nainstalovat některé další moduly PHP.

Chcete-li zobrazit seznam dostupných modulů PHP, spusťte:

$ sudo apt-cache search php- | less

Ukázkový výstup:

Pomocí šipek a se můžete mezi výsledkem pohybovat nahoru a dolů. Pro ukončení zadejte q .

Chcete-li najít podrobnosti o jakémkoli konkrétním modulu php, například php-gd , spustit:

$ sudo apt-cache show php-gd

Chcete-li nainstalovat modul php, spusťte:

$ sudo apt-get install php-gd

Chcete-li nainstalovat všechny moduly (není však nutné), spusťte:

$ sudo apt-get install php*

Po instalaci libovolného php modulu nezapomeňte restartovat službu Nginx.

Gratulujeme! Úspěšně jsme nastavili LEMP stack na serveru Ubuntu 20.04 LTS. Začněte nasazovat webové stránky a webové aplikace ve svém novém webovém zásobníku LEMP.

Další informace:

  • Nainstalujte phpMyAdmin s LEMP Stack na Ubuntu 20.04 LTS

Ubuntu
  1. Jak nainstalovat Phorum s Nginx na Ubuntu 18.04 LTS

  2. Jak nainstalovat LAMP Stack na Ubuntu 22.04 LTS

  3. Jak nainstalovat LEMP Stack Nginx, MySQL, PHP na Ubuntu 22.04

  1. Jak nainstalovat Nginx s PHP a MySQL (LEMP Stack) na Ubuntu 18.04

  2. Jak nainstalovat Nginx s PHP a MySQL (LEMP Stack) na Ubuntu 20.04 LTS

  3. Nginx 1.7.9 + PHP5-FPM + MySQL (LEMP) na Ubuntu 14.10

  1. Jak nainstalovat Linux, Nginx, MySQL, PHP (LEMP Stack) v Ubuntu 18.04

  2. Nainstalujte Apache, MySQL, PHP (LAMP) Stack na Ubuntu 18.04 LTS

  3. Nainstalujte Apache, MySQL, PHP (LAMP Stack) na Ubuntu 20.04 LTS