Ako nainštalovať Linux, Nginx, MySQL, PHP (LEMP stack) na Ubuntu


Úvod

Softvérový balík LEMP slúži na poskytovanie dynamických webových stránok a webových aplikácií napísaných v PHP. Ide o skratku, ktorá opisuje operačný systém Linux s webovým serverom Nginx (vyslovuje sa ako „Engine-X“). Dáta na pozadí sa ukladajú do databázy MySQL a dynamické spracovanie zabezpečuje PHP.

Táto príručka ukazuje, ako nainštalovať LEMP stack na serveri s Ubuntu. Operačný systém Ubuntu sa stará o časť stacku týkajúcu sa Linuxu. Popíšeme, ako spustiť a zprovozniť zvyšné komponenty.

Poznámka: Tento návod je primárne určený pre Ubuntu 22.04 LTS s PHP 8.1. Pre používateľov Ubuntu 24.04 LTS upravte odkazy na verziu PHP z php8.1-fpm na php8.3-fpm vo všetkých príkazoch. Tiež sa uistite, že ste aktualizovali všetky cesty k socketom PHP-FPM vo vašej konfigurácii Nginx (napr. použite /run/php/php8.3-fpm.sock pre Ubuntu 24.04).

Ako nainštalovať Linux, Nginx, MySQL, PHP (LEMP stack) na Ubuntu

  1. Inštalácia webového servera Nginx
  2. Inštalácia MySQL
  3. Inštalácia PHP
  4. Konfigurácia Nginx na použitie PHP procesora
  5. Testovanie PHP s Nginx
  6. Testovanie pripojenia k databáze z PHP

Predpoklady

Použite používateľa sudo, ktorý nie je root, na Ubuntu s povoleným firewallom UFW. Postupujte podľa našej príručky na počiatočné nastavenie servera pre Ubuntu, aby ste to nakonfigurovali.

Krok 1 – Inštalácia webového servera Nginx

Na zobrazovanie webových stránok návštevníkom stránky budete používať Nginx, vysoko výkonný webový server. Na získanie tohto softvéru použijete správcu balíkov APT.

Aktualizujte index balíkov vášho servera, potom nainštalujte Nginx:

sudo apt update

Potom spustite apt install na inštaláciu Nginx:

sudo apt install nginx

Keď sa zobrazí výzva, stlačte Y a ENTER, aby ste potvrdili, že chcete nainštalovať Nginx. Po dokončení inštalácie bude webový server Nginx aktívny a bežiaci na vašom Ubuntu serveri.

Overte, či Nginx beží:

sudo systemctl status nginx

Mali by ste vidieť výstup, ktorý indikuje, že Nginx je aktívny:

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

Na Ubuntu je Nginx nakonfigurovaný tak, aby sa spustil hneď po inštalácii.

Povoliť HTTP prevádzku cez firewall ufw. Nginx pri inštalácii zaregistruje niekoľko aplikačných profilov UFW. Skontrolujte dostupné profily:

sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Povoľte najprísnejší profil, ktorý umožňuje potrebnú prevádzku. Keďže SSL ešte nie je nakonfigurované, povoľte iba HTTP prevádzku na porte 80:

Povoľte to spustením nasledujúceho príkazu:

sudo ufw allow 'Nginx HTTP'

Overte zmenu firewallu:

sudo ufw status

Tento výstup zobrazuje, že prenos HTTP je teraz povolený:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Ak chcete otestovať funkčnosť domény servera Nginx, prejdite na http://your_domain pomocou vášho preferovaného webového prehliadača.

Ak nemáte doménu smerujúcu na váš server a nepoznáte verejnú IP adresu svojho servera, môžete ju zistiť spustením niektorého z nasledujúcich príkazov:

ip addr show
hostname -I

Toto vypíše niekoľko IP adries. Môžete ich postupne vyskúšať vo vašom webovom prehliadači.

Ako alternatívu môžete skontrolovať, ktorá IP adresa je prístupná, ako je viditeľná z iných miest na internete:

curl -4 icanhazip.com

Napíšte adresu, ktorú zadáte do svojho webového prehliadača, a dostanete sa na predvolenú úvodnú stránku Nginxu:

http://<server_domain_or_IP>

Ak ste túto stránku dostali, znamená to, že ste úspešne nainštalovali Nginx a povolili HTTP prenos pre váš webový server.

Krok 2 — Inštalácia MySQL

Nainštalujte MySQL na ukladanie a správu údajov webovej stránky. MySQL je štandardný systém správy databáz pre prostredia PHP.

Opäť použite apt na získanie a nainštalovanie tohto softvéru:

sudo apt install mysql-server

Keď budete vyzvaní, potvrďte inštaláciu stlačením Y a potom ENTER.

Po inštalácii spustite bezpečnostný skript na odstránenie nezabezpečených predvolieb a uzamknutie prístupu k databáze:

sudo mysql_secure_installation

Bude vám zobrazená otázka, či chcete nakonfigurovať VALIDATE PASSWORD PLUGIN.

Poznámka: Povolenie tejto funkcie je do určitej miery vecou uváženia. Ak je povolená, heslá, ktoré nespĺňajú určené kritériá, budú MySQL odmietnuté s chybou. Je bezpečné ponechať overovanie vypnuté, ale vždy by ste mali používať silné a jedinečné heslá pre prihlasovacie údaje do databázy.

Odpovedzte Y pre áno, alebo čokoľvek iné na pokračovanie bez zapnutia:

VALIDATE PASSWORD COMPONENT 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 component?

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

Ak odpoviete „áno“, budete požiadaný o výber úrovne overenia hesla. Majte na pamäti, že ak zadáte 2 pre najsilnejšiu úroveň, pri pokuse nastaviť akékoľvek heslo, ktoré neobsahuje čísla, veľké a malé písmená a špeciálne znaky, sa objavia chyby:

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: 1

Bez ohľadu na to, či ste sa rozhodli nastaviť VALIDATE PASSWORD PLUGIN, váš server vás požiada, aby ste vybrali a potvrdili heslo pre používateľa MySQL root. Toto nie je treba zamieňať so systémovým root. Používateľ database root je administratívny používateľ s plnými právomocami nad databázovým systémom. Aj keď predvolená metóda overovania pre používateľa MySQL root nevyžaduje použitie hesla, aj keď je nastavené, mali by ste tu definovať silné heslo ako ďalšie bezpečnostné opatrenie. O tom si povieme o chvíľu.

Ak ste povolili overovanie hesla, zobrazí sa vám sila hesla pre zadané root heslo a váš server sa spýta, či chcete pokračovať s týmto heslom. Ak ste spokojní so svojím aktuálnym heslom, stlačte Y pre „áno“ na výzve:

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

Pre zvyšok otázok stlačte Y a na každom výzve stlačte kláves ENTER. Tým sa odstránia niektorí anonymní používatelia a testovacia databáza, zakážu sa vzdialené prihlásenia ako root a načítajú sa tieto nové pravidlá, aby MySQL okamžite rešpektoval zmeny, ktoré ste vykonali.

Keď skončíte, otestujte, či sa dokážete prihlásiť do konzoly MySQL:

sudo mysql

Týmto sa pripojíte k serveru MySQL ako administratívny používateľ databázy root, čo je odvodzované z použitia sudo pri spustení tohto príkazu. Mali by ste dostať nasledujúci výstup:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Ak chcete ukončiť konzolu MySQL, napíšte nasledovné:

exit

Všimnite si, že ste nemuseli zadávať heslo na pripojenie ako root používateľ, aj keď ste ho definovali pri spustení mysql_secure_installation skriptu. Je to preto, že pri inštalácii na Ubuntu je predvolená autentifikačná metóda pre administrátorského používateľa MySQL auth_socket, namiesto použitia hesla. Na prvý pohľad sa to môže zdať ako bezpečnostný problém, ale robí to databázový server bezpečnejším, pretože ako root MySQL používatelia sa môžu prihlásiť len používatelia systému so sudo právami, ktorí sa pripájajú cez konzolu alebo cez aplikáciu s rovnakými privilégiami. V praxi to znamená, že nebudete môcť použiť root používateľa administrátorskej databázy na pripojenie z vašej PHP aplikácie.

Pre zvýšenú bezpečnosť je najlepšie mať pre každú databázu vytvorené samostatné používateľské účty s obmedzenejšími oprávneniami, najmä ak plánujete na svojom serveri hostovať viac databáz.

Poznámka: Niektoré staršie verzie natívnej PHP knižnice MySQL mysqlnd nepodporujú caching_sha2_authentication, predvolenú autentifikačnú metódu pre vytvorených používateľov MySQL 8. Z tohto dôvodu môže byť pri vytváraní databázových používateľov pre PHP aplikácie na MySQL 8 potrebné zabezpečiť, aby boli nastavené na použitie mysql_native_password. Ukážeme vám, ako to urobiť v kroku 6.

Váš server MySQL je teraz nainštalovaný a zabezpečený. Ďalej nainštalujete PHP, poslednú súčasť LEMP stacku.

Krok 3 – Inštalácia PHP

Nainštalujte PHP na spracovanie kódu a generovanie dynamického obsahu. Nginx vyžaduje externý program na spracovanie PHP.

PHP-FPM („správca procesov fastCGI“) efektívne spracováva PHP s dodatočnými bezpečnostnými funkciami, čo prináša lepší výkon pre webové stránky založené na PHP. Nainštalujte php-fpm na smerovanie požiadaviek PHP z Nginx a php-mysql na povolenie komunikácie medzi PHP a MySQL. Základné balíky PHP sa inštalujú automaticky ako závislosti.

Ak chcete nainštalovať balíky php8.1-fpm a php-mysql, spustite:

sudo apt install php8.1-fpm php-mysql

Keď budete vyzvaní, stlačte Y a ENTER na potvrdenie inštalácie.

Overte, či PHP-FPM beží:

sudo systemctl status php8.1-fpm

Mali by ste vidieť výstup, ktorý ukazuje, že PHP-FPM je aktívny:

● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
     Loaded: loaded
     Active: active (running)

Môžete si tiež skontrolovať verziu PHP:

php -v
PHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.x

Konfigurujte Nginx tak, aby používal tieto PHP komponenty.

Krok 4 — Konfigurácia Nginx na používanie PHP procesora

Vytvorte bloky servera Nginx (server blocks, podobné virtuálnym hostiteľom Apache) na oddelenie konfigurácie a hostovanie viacerých domén na jednom serveri. Tento návod používa your_domain ako príklad názvu domény.

Info: Ak chcete zistiť viac o nastavení doménového mena s Linux-Console.net, prečítajte si náš úvod do DNS na Linux-Console.net.

Na Ubuntu 22.04 umožňuje Nginx jeden predvolený serverový blok, ktorý poskytuje dokumenty z /var/www/html. Pre viacero stránok vytvorte štruktúru adresárov v rámci /var/www pre your_domain, pričom /var/www/html nechajte ako predvolený rezervný adresár.

Vytvorte koreňový webový adresár pre your_domain nasledovne:

sudo mkdir /var/www/your_domain

Ďalej priraďte vlastníctvo adresára pomocou environmentálnej premennej $USER, ktorá odkazuje na váš aktuálny systémový účet:

sudo chown -R $USER:$USER /var/www/your_domain

Potom otvorte nový konfiguračný súbor v adresári sites-available Nginx pomocou vášho obľúbeného príkazového editora. Tu použijeme nano:

sudo nano /etc/nginx/sites-available/your_domain

Týmto sa vytvorí nový prázdny súbor. Vložte nasledovnú základnú konfiguráciu:

server {
    listen 80;
    server_name your_domain www.your_domain;
    root /var/www/your_domain;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

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

    location ~ /\.ht {
        deny all;
    }

}

Tu je, čo robí každá z týchto direktív a blokov umiestnenia:

  • listen — Definuje, na ktorom porte bude Nginx počúvať. V tomto prípade bude počúvať na porte 80, čo je predvolený port pre HTTP.
  • root — Definuje koreňový adresár dokumentu, kde sú uložené súbory poskytované týmto webom.
  • index — Určuje, v akom poradí bude Nginx uprednostňovať indexové súbory pre túto webovú stránku. Bežnou praxou je uvádzať súbory index.html s vyššou prioritou než súbory index.php, aby bolo možné rýchlo nastaviť úvodnú stránku pre údržbu v PHP aplikáciách. Tieto nastavenia môžete upraviť, aby lepšie vyhovovali potrebám vašej aplikácie.
  • server_name — Definuje, na ktoré doménové mená a/alebo IP adresy by mal tento server blok odpovedať. Nasmerujte tento príkaz na doménové meno alebo verejnú IP adresu vášho servera.
  • location / — Prvý blok lokácie obsahuje direktívu try_files, ktorá kontroluje existenciu súborov alebo adresárov zodpovedajúcich požiadavke URL. Ak Nginx nenájde príslušný zdroj, vráti chybu 404.
  • location ~ \.php$ — Tento blok lokácie spracováva skutočné PHP tým, že nastavuje Nginx na konfiguračný súbor fastcgi-php.conf a súbor php8.1-fpm.sock, ktorý deklaruje, ktorý socket je priradený k php8.1-fpm.
  • location ~ /\.ht — Posledný blok location sa zaoberá súbormi .htaccess, ktoré Nginx nespracúva. Pridaním direktívy deny all, ak by sa niektoré súbory .htaccess náhodou dostali do koreňového adresára dokumentov, nebudú návštevníkom sprístupnené.

Keď dokončíte úpravy, uložte a zatvorte súbor. Ak používate nano, môžete tak urobiť stlačením CTRL+X a potom Y a ENTER na potvrdenie.

Aktivujte svoju konfiguráciu prepojením so súborom konfigurácie z adresára sites-enabled Nginx:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Potom odpojte predvolený konfiguračný súbor z adresára /sites-enabled/:

sudo unlink /etc/nginx/sites-enabled/default

Poznámka: Ak budete niekedy potrebovať obnoviť predvolené nastavenia, môžete to urobiť tak, že znovu vytvoríte symbolický odkaz, napríklad takto:

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

Týmto sa povie Nginxu, aby pri ďalšom načítaní použil túto konfiguráciu. Svoju konfiguráciu môžete otestovať na syntaktické chyby spustením nasledujúceho príkazu:

sudo nginx -t

Ak sa hlásia nejaké chyby, vráťte sa k svojmu konfiguračnému súboru a skontrolujte jeho obsah pred pokračovaním.

Keď budete pripravení, reštartujte Nginx, aby sa zmeny prejavili:

sudo systemctl reload nginx

Vaša nová webová stránka je teraz aktívna, ale koreňový adresár webu /var/www/your_domain je stále prázdny. Vytvorte v tejto lokalite súbor index.html, aby ste mohli otestovať, či nový serverový blok funguje podľa očakávaní:

nano /var/www/your_domain/index.html

Zahrňte do tohto súboru nasledujúci obsah:

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

Teraz prejdite do svojho prehliadača a prístup k doménovému názvu alebo IP adrese svojho servera, ako je uvedené v direktíve server_name vo vašom konfiguračnom súbore blokov servera:

http://server_domain_or_IP

Dostanete stránku ako nasledujúcu:

Ak ste dostali túto stránku, znamená to, že váš serverový blok Nginx funguje podľa očakávaní.

Tento súbor môžete nechať na mieste ako dočasnú úvodnú stránku pre vašu aplikáciu, kým nenastavíte súbor index.php, ktorý ho nahradí.

Upozornenie: Po pridaní súboru index.php sa uistite, že ste odstránili alebo premenovali súbor index.html vo vašom dokumentovom koreňovom adresári. Ak existujú oba súbory, Nginx bude štandardne slúžiť index.html a vaša PHP stránka sa nezobrazí – toto je bežný zdroj zmätku pre nových používateľov.

Váš LEMP stack je teraz plne nakonfigurovaný. V nasledujúcom kroku vytvoríte PHP skript, aby ste otestovali, či je Nginx skutočne schopný spracovať súbory .php vo vašej novo nakonfigurovanej webovej stránke.

Krok 5 – Testovanie PHP s Nginx

Váš LEMP stack by mal byť teraz úplne nastavený. Môžete ho otestovať, aby ste overili, že Nginx dokáže správne odovzdať súbory .php vášmu PHP procesoru.

Toto môžete urobiť vytvorením testovacieho PHP súboru vo vašom dokumentovom koreňovom adresári. Otvorte nový súbor s názvom info.php vo vašom dokumentovom koreňovom adresári vo vašom preferovanom textovom editore:

nano /var/www/your_domain/info.php

Pridajte nasledujúce riadky do nového súboru. Toto je platný PHP kód, ktorý vráti informácie o vašom serveri:

<?php
phpinfo();

Keď skončíte, uložte a zatvorte súbor.

Teraz môžete túto stránku otvoriť vo webovom prehliadači návštevou domény alebo verejnej IP adresy, ktorú ste nastavili v konfiguračnom súbore Nginx, nasledovanej /info.php:

http://server_domain_or_IP/info.php

Dostanete webovú stránku obsahujúcu podrobné informácie o vašom serveri:

Po skontrolovaní relevantných informácií o vašom PHP serveri prostredníctvom tejto stránky je najlepšie súbor, ktorý ste vytvorili, odstrániť, pretože obsahuje citlivé informácie o vašom PHP prostredí a vašom serveri Ubuntu. Na jeho odstránenie môžete použiť rm:

sudo rm /var/www/your_domain/info.php

Tento súbor môžete kedykoľvek znova vygenerovať, ak ho budete neskôr potrebovať.

Krok 6 — Testovanie pripojenia k databáze z PHP (Nepovinné)

Ak chcete otestovať, či PHP dokáže pripojiť sa k MySQL a vykonávať databázové dotazy, môžete vytvoriť testovaciu tabuľku s fiktívnymi údajmi a z PHP skriptu dotazovať jej obsah. Predtým však musíte vytvoriť testovaciu databázu a nového používateľa MySQL správne nastaveného na jej prístup.

Poznámka: Niektoré staršie verzie natívnej PHP knižnice MySQL mysqlnd nepodporujú caching_sha2_authentication, predvolenú metódu autentifikácie pre MySQL 8, možno budete musieť zabezpečiť, aby boli nastavené na použitie mysql_native_password.

Vytvoríme databázu s názvom example_database a používateľa s názvom example_user, no tieto názvy môžete nahradiť inými hodnotami.

Najprv sa pripojte ku konzole MySQL pomocou účtu root:

sudo mysql

Ak chcete vytvoriť novú databázu, spustite nasledujúci príkaz zo svojho MySQL konzola:

CREATE DATABASE example_database;

Teraz môžete vytvoriť nového používateľa a udeliť mu úplné práva na vlastnú databázu, ktorú ste vytvorili.

Nasledujúci príkaz vytvorí nového používateľa s menom example_user, pričom ako predvolenú autentifikačnú metódu použije mysql_native_password. Heslo tohto používateľa nastavujeme na password, ale túto hodnotu by ste mali nahradiť bezpečným heslom podľa vlastného výberu.

CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

Teraz musíme tomuto používateľovi udeliť povolenie k databáze example_database:

GRANT ALL ON example_database.* TO 'example_user'@'%';

Týmto sa používateľovi example_user poskytnú úplné práva nad databázou example_database, pričom sa mu zabrání vytvárať alebo upravovať iné databázy na vašom serveri.

Teraz ukončite MySQL shell nasledujúcim príkazom:

exit

Môžete otestovať, či nový používateľ má správne oprávnenia, prihlásením sa do konzoly MySQL znova, tentoraz s použitím prihlasovacích údajov vlastného používateľa. Všimnite si parameter -p v tomto príkaze, ktorý vás vyzve na zadanie hesla použitého pri vytváraní používateľa example_user:

mysql -u example_user -p

Po prihlásení do konzoly MySQL potvrďte, že máte prístup k databáze example_database:

SHOW DATABASES;

Toto vráti nasledovný výstup:

+--------------------+
| Database           |
+--------------------+
| example_database   |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Ďalej vytvoríme testovaciu tabuľku s názvom todo_list. Z konzoly MySQL spustite nasledujúci príkaz:

CREATE TABLE example_database.todo_list (

 item_id INT AUTO_INCREMENT,

 content VARCHAR(255),

 PRIMARY KEY(item_id)

);

Vložte niekoľko riadkov obsahu do testovacej tabuľky. Možno budete chcieť nasledujúci príkaz zopakovať niekoľkokrát s rôznymi hodnotami:

INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Ak chcete potvrdiť, že údaje boli úspešne uložené do vašej tabuľky, spustite:

SELECT * FROM example_database.todo_list;

Váš výstup by sa mal zobraziť nasledovne:

+---------+--------------------------+
| item_id | content                  |
+---------+--------------------------+
|       1 | My first important item  |
|       2 | My second important item |
|       3 | My third important item  |
|       4 | and this one more thing  |
+---------+--------------------------+
4 rows in set (0.000 sec)

Po overení, že vo vašej testovacej tabuľke máte platné údaje, môžete ukončiť konzolu MySQL:

exit

Teraz môžete vytvoriť PHP skript, ktorý sa pripojí k MySQL a bude vyhľadávať váš obsah. Vytvorte nový PHP súbor vo vašom vlastnom adresári webového koreňa pomocou preferovaného editora. My na to použijeme nano:

nano /var/www/your_domain/todo_list.php

Nasledujúci PHP skript sa pripája k databáze MySQL a dotazuje sa na obsah tabuľky todo_list, pričom výsledky zobrazuje v zozname. Ak nastane problém s pripojením k databáze, vyvolá výnimku.

Pridajte nasledujúci obsah do vášho skriptu todo_list.php:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Uložte súbor a zatvorte ho, keď dokončíte úpravy.

Teraz môžete pristupovať na túto stránku vo vašom webovom prehliadači návštevou doménového mena alebo verejnej IP adresy nastavené pre vaše webové stránky, nasledovaného /todo_list.php:

http://server_domain_or_IP/todo_list.php

Mali by ste dostať stránku podobnú nasledujúcej, ktorá zobrazuje obsah, ktorý ste vložili do svojej testovacej tabuľky:

To znamená, že vaše PHP prostredie je pripravené na pripojenie a interakciu s vaším MySQL serverom.

Často kladené otázky

Na čo sa používa LEMP stack?

LEMP stack hostuje dynamické webové stránky a aplikácie založené na PHP, vrátane WordPress, Laravel, Magento, Drupal a vlastných PHP projektov. Je obzvlášť efektívny pre weby s vysokou návštevnosťou, ktoré vyžadujú efektívne spracovanie súbežných pripojení.

Aký je rozdiel medzi LEMP a LAMP stackmi?

LEMP používa Nginx, ktorý spracováva pripojenia asynchrónne pomocou architektúry riadenej udalosťami — efektívne pre viacerých súčasných používateľov. LAMP používa Apache, ktorý tradične vytvára vlákno pre každú požiadavku (hoci moderný Apache podporuje režimy riadené udalosťami). LEMP vo všeobecnosti ponúka lepší výkon pre statický obsah a scenáre s vysokou súbežnosťou, zatiaľ čo LAMP poskytuje jednoduchšie nastavenie .htaccess a širšiu podporu modulov.

Ktorú verziu Ubuntu by som mal použiť pre LEMP?

Ubuntu 22.04 LTS je hlavným cieľom tohto sprievodcu, obsahujúcim PHP 8.1, MySQL 8.0 a Nginx s dlhodobou podporou. Ubuntu 24.04 LTS (najnovšie vydanie) obsahuje PHP 8.3 predvolene a s týmto sprievodcom funguje po úprave ciest a čísel verzií PHP-FPM soketov.

Ako nainštalujem LEMP stack na Ubuntu 24.04?

Dodržiavajte tieto základné kroky:

  1. Nainštalujte Nginx: sudo apt install nginx
  2. Nainštalujte MySQL: sudo apt install mysql-server
  3. Spustite bezpečnostný skript MySQL: sudo mysql_secure_installation
  4. Nainštalujte PHP-FPM: sudo apt install php-fpm php-mysql
  5. Konfigurácia Nginx serverového bloku s integráciou PHP-FPM
  6. Test s info.php a pripojením na databázu

Pozrite si kompletný návod v krokoch 1-6 vyššie.

Ktorú verziu PHP by som mal nainštalovať s Nginx a MySQL?

Na dosiahnutie najlepšej kompatibility používajte predvolenú verziu PHP vo vašom Ubuntu.

  • Ubuntu 22.04: PHP 8.1 (nainštalované cez php8.1-fpm)
  • Ubuntu 24.04: PHP 8.3 (prispôsobte príkazy na php8.3-fpm pre túto verziu)

Obe verzie fungujú výborne s Nginx a MySQL 8.0, podporujú moderné frameworky a dostávajú aktívne bezpečnostné aktualizácie.

Ako nastaviť Nginx na spracovanie PHP súborov?

Pridajte do konfigurácie servera Nginx blok location ~ \.php$, ktorý smeruje požiadavky PHP na PHP-FPM cez Unix socket:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Upravte cestu k socketu podľa verzie PHP, otestujte pomocou sudo nginx -t a načítajte znova pomocou sudo systemctl reload nginx.

Prečo sa mi po inštalácii PHP-FPM zobrazuje chyba „502 Bad Gateway“?

Chyby 502 označujú, že Nginx nemôže komunikovať s PHP-FPM. Bežné príčiny:

  1. PHP-FPM nebeží: Skontrolujte pomocou sudo systemctl status php8.1-fpm a spustite, ak je to potrebné
  2. Nesprávna cesta zásuvky: Overte, či /run/php/php8.1-fpm.sock existuje a či zodpovedá vašej konfigurácii Nginx
  3. Problém s oprávneniami: Uistite sa, že používateľ Nginx (www-data) má prístup k soketu
  4. Chyba konfigurácie PHP-FPM: Skontrolujte logy v /var/log/php8.1-fpm.log

Riešenie: Reštartujte obe služby:

sudo systemctl restart php8.1-fpm nginx

Ako zabezpečím MySQL po inštalácii?

Spustite vstavaný bezpečnostný skript:

sudo mysql_secure_installation

Postupujte podľa pokynov, aby ste:

  • Povoliť plugin overenia hesla
  • Nastavte silné root heslo
  • Odstrániť anonymných používateľov
  • Zakázať vzdialené prihlasovanie ako root
  • Odstrániť testovaciu databázu
  • Obnoviť oprávnenia

Pre aplikačné databázy vytvorte oddelených používateľov s obmedzenými právami namiesto používania účtu root.

Môžem na jednom LEMP serveri prevádzkovať viacero webových stránok?

Áno, vytvorte samostatné bloky servera Nginx pre každú doménu:

  1. Vytvorte adresár: sudo mkdir -p /var/www/second_domain
  2. Vytvorte blok servera: sudo nano /etc/nginx/sites-available/second_domain
  3. Nakonfigurujte s unikátnymi direktívami server_name a root
  4. Povoliť: sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/
  5. Otestujte a znovu načítajte: sudo nginx -t && sudo systemctl reload nginx

Každá stránka môže mať samostatné nastavenia PHP a používateľov databázy.

Ako môžem aktualizovať PHP na novšiu verziu?

Aktualizácie balíkov Ubuntu automaticky riešia menšie verzie. Pre aktualizácie hlavných verzií:

  1. Pridajte Ondřejov PHP PPA (dôveryhodné úložisko tretej strany):

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
  2. Nainštalujte novú verziu PHP-FPM:

    sudo apt install php8.3-fpm php8.3-mysql -y
  3. Aktualizujte konfiguráciu Nginx, cesta k socketu na /run/php/php8.3-fpm.sock

  4. Otestovať a znovu načítať Nginx

  5. Voliteľne odstráňte starú verziu: sudo apt purge php8.1-fpm

Vždy testujte na stagingu pred aktualizáciou produkčných systémov.

Riešenie bežných problémov

Chyba 502 - Nesprávna brána

Najbežnejší problém so stackom LEMP nastáva, keď Nginx nemôže komunikovať s PHP-FPM:

Skontrolovať stav PHP-FPM:

sudo systemctl status php8.1-fpm

Overiť cestu zásuvky:

ls -la /run/php/

Očakávaný výstup by mal zobraziť súbor php8.1-fpm.sock.

Bežné opravy:

  1. Reštartujte PHP-FPM: sudo systemctl restart php8.1-fpm
  2. Skontrolujte, či cesta socketu bloku servera Nginx zodpovedá skutočnému socketu PHP-FPM
  3. Overte oprávnenia súboru: sudo chown www-data:www-data /run/php/php8.1-fpm.sock

Chyby odmietnutia povolenia

Opraviť oprávnenia webového adresára:

sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domain

Problémy s pripojením k MySQL

Obnoviť heslo root pre MySQL:

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;

Skontrolujte službu MySQL:

sudo systemctl status mysql

PHP nebeží

Overiť PHP moduly:

php -m | grep -E 'mysql|fpm'

Skontrolujte konfiguráciu PHP-FPM:

sudo nginx -t
sudo php-fpm8.1 -t

Ladiť chyby 404:

  • Overte, či je index.php uvedený v direktíve index Nginx
  • Skontrolujte, či súbor existuje: ls -la /var/www/your_domain/
  • Skontrolujte chybové záznamy Nginx: sudo tail -f /var/log/nginx/error.log

Záver

V tejto príručke ste vybudovali flexibilný základ pre poskytovanie PHP webových stránok a aplikácií vašim návštevníkom, s využitím Nginx ako webového servera a MySQL ako databázového systému. Toto môžete urobiť aj s Apache webovým serverom, pozrite si náš návod Ako nainštalovať LAMP stack (Linux, Apache, MySQL, PHP) na Ubuntu. Svoju stránku môžete tiež zabezpečiť pomocou Let’s Encrypt, ktorý poskytuje bezplatné, dôveryhodné certifikáty. Naučte sa, ako to urobiť s našou príručkou o Let’s Encrypt pre Apache.

Ďakujeme, že sa učíte s komunitou Linux-Console.net.