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-fpmnaphp8.3-fpmvo 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.sockpre Ubuntu 24.04).
Ako nainštalovať Linux, Nginx, MySQL, PHP (LEMP stack) na Ubuntu
- Inštalácia webového servera Nginx
- Inštalácia MySQL
- Inštalácia PHP
- Konfigurácia Nginx na použitie PHP procesora
- Testovanie PHP s Nginx
- 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 updatePotom spustite apt install na inštaláciu Nginx:
sudo apt install nginxKeď 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 nginxMali 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 listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHPovoľ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 statusTento 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 showhostname -IToto 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.comNapíš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-serverKeď 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_installationBude 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: 1Bez 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) : yPre 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 mysqlTý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é:
exitVš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-mysqlKeď budete vyzvaní, stlačte Y a ENTER na potvrdenie inštalácie.
Overte, či PHP-FPM beží:
sudo systemctl status php8.1-fpmMali 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 -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xKonfigurujte 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_domainPotom 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_domainTý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 porte80, č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úboryindex.htmls vyššou prioritou než súboryindex.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ívutry_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úborfastcgi-php.confa súborphp8.1-fpm.sock, ktorý deklaruje, ktorý socket je priradený kphp8.1-fpm.location ~ /\.ht— Posledný blok location sa zaoberá súbormi.htaccess, ktoré Nginx nespracúva. Pridaním direktívydeny all, ak by sa niektoré súbory.htaccessná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/defaultPozná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 -tAk 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 nginxVaš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.htmlZahrň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_IPDostanete 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.phpPridajte 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.phpDostanete 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.phpTento 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 mysqlAk 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:
exitMôž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 -pPo 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:
exitTeraz 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.phpNasledujú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.phpMali 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:
- Nainštalujte Nginx:
sudo apt install nginx - Nainštalujte MySQL:
sudo apt install mysql-server - Spustite bezpečnostný skript MySQL:
sudo mysql_secure_installation - Nainštalujte PHP-FPM:
sudo apt install php-fpm php-mysql - Konfigurácia Nginx serverového bloku s integráciou PHP-FPM
- Test s
info.phpa 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-fpmpre 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:
- PHP-FPM nebeží: Skontrolujte pomocou
sudo systemctl status php8.1-fpma spustite, ak je to potrebné - Nesprávna cesta zásuvky: Overte, či
/run/php/php8.1-fpm.sockexistuje a či zodpovedá vašej konfigurácii Nginx - Problém s oprávneniami: Uistite sa, že používateľ Nginx (www-data) má prístup k soketu
- 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 nginxAko zabezpečím MySQL po inštalácii?
Spustite vstavaný bezpečnostný skript:
sudo mysql_secure_installationPostupujte 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:
- Vytvorte adresár:
sudo mkdir -p /var/www/second_domain - Vytvorte blok servera:
sudo nano /etc/nginx/sites-available/second_domain - Nakonfigurujte s unikátnymi direktívami
server_namearoot - Povoliť:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - 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í:
Pridajte Ondřejov PHP PPA (dôveryhodné úložisko tretej strany):
sudo add-apt-repository ppa:ondrej/php sudo apt updateNainštalujte novú verziu PHP-FPM:
sudo apt install php8.3-fpm php8.3-mysql -yAktualizujte konfiguráciu Nginx, cesta k socketu na
/run/php/php8.3-fpm.sockOtestovať a znovu načítať Nginx
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-fpmOveriť cestu zásuvky:
ls -la /run/php/Očakávaný výstup by mal zobraziť súbor php8.1-fpm.sock.
Bežné opravy:
- Reštartujte PHP-FPM:
sudo systemctl restart php8.1-fpm - Skontrolujte, či cesta socketu bloku servera Nginx zodpovedá skutočnému socketu PHP-FPM
- 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_domainProblé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 mysqlPHP nebeží
Overiť PHP moduly:
php -m | grep -E 'mysql|fpm'Skontrolujte konfiguráciu PHP-FPM:
sudo nginx -t
sudo php-fpm8.1 -tLadiť chyby 404:
- Overte, či je
index.phpuvedený v direktíveindexNginx - 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.



