Jak nainstalovat Linux, Nginx, MySQL, PHP (LEMP stack) na Ubuntu
Úvod
Softwarový stack LEMP slouží k poskytování dynamických webových stránek a webových aplikací napsaných v PHP. Jedná se o zkratku, která popisuje operační systém Linux, s webovým serverem Nginx (vyslovuje se jako „Engine-X“). Základní data jsou ukládána do databáze MySQL a dynamické zpracování obstarává PHP.
Tato příručka ukazuje, jak nainstalovat LEMP stack na server s Ubuntu. Operační systém Ubuntu se stará o linuxovou část stacku. Popsáme, jak spustit a nastavit zbylé komponenty.
Poznámka: Tento návod je primárně určen pro Ubuntu 22.04 LTS s PHP 8.1. U uživatelů Ubuntu 24.04 LTS upravte veškeré odkazy na verzi PHP z
php8.1-fpmnaphp8.3-fpmve všech příkazech. Také nezapomeňte aktualizovat cesty k socketům PHP-FPM ve vaší konfiguraci Nginxu (např. použijte/run/php/php8.3-fpm.sockpro Ubuntu 24.04).
Jak nainstalovat Linux, Nginx, MySQL, PHP (LEMP stack) na Ubuntu
- Instalace webového serveru Nginx
- Instalace MySQL
- Instalace PHP
- Konfigurace Nginx pro použití PHP procesoru
- Testování PHP s Nginx
- Testování připojení k databázi z PHP
Předpoklady
Použijte uživatele sudo, který není root, na Ubuntu s povoleným firewallem UFW. Postupujte podle našeho průvodce počátečním nastavením serveru pro Ubuntu, abyste to nakonfigurovali.
Krok 1 – Instalace webového serveru Nginx
K zobrazení webových stránek návštěvníkům budete používat Nginx, výkonný webový server. Tento software si získáte pomocí správce balíčků APT.
Aktualizujte index balíčků svého serveru a poté nainstalujte Nginx:
sudo apt updatePoté spusťte apt install pro instalaci Nginx:
sudo apt install nginxAž budete vyzváni, stiskněte Y a ENTER, abyste potvrdili, že chcete nainstalovat Nginx. Po dokončení instalace bude webový server Nginx aktivní a bude běžet na vašem serveru Ubuntu.
Ověřte, že Nginx běží:
sudo systemctl status nginxMěli byste vidět výstup naznačující, že Nginx je aktivní:
● 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 nakonfigurován tak, aby se spustil ihned po instalaci.
Povolit HTTP provoz přes firewall ufw. Nginx při instalaci registrovat několik aplikačních profilů UFW. Zkontrolujte dostupné profily:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHPovolte nejpřísnější profil, který umožňuje potřebný provoz. Protože SSL ještě není nakonfigurováno, povolte pouze HTTP provoz na portu 80:
Povolte to spuštěním následujícího příkazu:
sudo ufw allow 'Nginx HTTP'
Ověřte změnu firewallu:
sudo ufw statusTento výstup ukazuje, že HTTP provoz je nyní povolen:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Chcete-li otestovat funkčnost domény serveru Nginx, otevřete v preferovaném webovém prohlížeči http://your_domain.
Pokud nemáte doménové jméno nasměrované na váš server a neznáte veřejnou IP adresu vašeho serveru, můžete ji zjistit spuštěním některého z následujících příkazů:
ip addr showhostname -ITo vytiskne několik IP adres. Každou z nich můžete postupně vyzkoušet ve svém webovém prohlížeči.
Jako alternativu můžete zkontrolovat, která IP adresa je přístupná z jiných míst na internetu:
curl -4 icanhazip.comNapište adresu, kterou obdržíte ve svém webovém prohlížeči, a dostanete se na výchozí úvodní stránku Nginx:
http://<server_domain_or_IP>Pokud tuto stránku vidíte, znamená to, že jste úspěšně nainstalovali Nginx a povolili HTTP provoz pro váš webový server.
Krok 2 — Instalace MySQL
Nainstalujte MySQL pro ukládání a správu dat webu. MySQL je standardní systém pro správu databází v PHP prostředí.
Opět použijte apt k získání a instalaci tohoto softwaru:
sudo apt install mysql-serverKdyž budete vyzváni, potvrďte instalaci stisknutím Y a poté ENTER.
Po instalaci spusťte bezpečnostní skript pro odstranění nebezpečných výchozích nastavení a zabezpečení přístupu k databázi:
sudo mysql_secure_installationBude vám položena otázka, zda chcete nakonfigurovat VALIDATE PASSWORD PLUGIN.
Poznámka: Povolení této funkce je do jisté míry záležitostí rozhodnutí. Pokud je povolena, hesla, která nesplňují zadaná kritéria, budou MySQL odmítnuta s chybou. Je bezpečné nechat ověřování vypnuté, ale vždy byste měli používat silná, unikátní hesla pro přihlašovací údaje k databázi.
Odpovězte Y pro ano, nebo cokoli jiného pro pokračování bez povolení:
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: Pokud odpovíte „ano“, budete požádáni o výběr úrovně ověřování hesla. Mějte na paměti, že pokud zadáte 2 pro nejsilnější úroveň, budete dostávat chyby při pokusu nastavit jakékoli heslo, které neobsahuje čísla, velká a malá písmena a speciální znaky:
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 ohledu na to, zda jste se rozhodli nastavit VALIDATE PASSWORD PLUGIN, váš server vás požádá, abyste vybrali a potvrdili heslo pro uživatele MySQL root. Není to zaměňováno s rootem systému. Uživatel root databáze je administrativní uživatel s plnými pravomocemi nad databázovým systémem. I když výchozí metoda autentizace pro uživatele MySQL root nevyžaduje použití hesla, i když je heslo nastaveno, měli byste zde definovat silné heslo jako další bezpečnostní opatření. O tom si promluvíme za chvíli.
Pokud jste povolili ověřování hesla, zobrazí se vám síla hesla pro zadané heslo root a server se zeptá, zda chcete pokračovat s tímto heslem. Pokud jste spokojeni se svým aktuálním heslem, stiskněte na výzvu Y pro „ano“:
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) : yU zbytku otázek stiskněte Y a na každém výzvě stiskněte klávesu ENTER. Tím se odstraní někteří anonymní uživatelé a testovací databáze, zakáží se vzdálená přihlášení pro root uživatele a načtou se tato nová pravidla, aby MySQL okamžitě respektovalo provedené změny.
Až budete hotovi, vyzkoušejte, zda se dokážete přihlásit do konzole MySQL:
sudo mysqlToto se připojí k serveru MySQL jako administrativní databázový uživatel root, což je odvozeno z použití sudo při spouštění tohoto příkazu. Měli byste obdržet následující 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>Pro ukončení konzole MySQL napište následující:
exitVšimněte si, že jste nemuseli zadávat heslo pro přihlášení jako uživatel root, i když jste si jedno heslo nastavili při spuštění skriptu mysql_secure_installation. Je to proto, že při instalaci na Ubuntu je výchozí metoda ověřování pro administrátorského uživatele MySQL auth_socket, místo metody využívající heslo. Na první pohled se to může zdát jako bezpečnostní problém, ale ve skutečnosti to databázový server zabezpečuje, protože jediní uživatelé oprávnění přihlásit se jako uživatel root v MySQL jsou systémoví uživatelé s oprávněními sudo, kteří se připojují z konzole nebo prostřednictvím aplikace běžící se stejnými oprávněními. V praktickém slova smyslu to znamená, že administrátorského databázového uživatele root nebudete moci použít k připojení z vaší PHP aplikace.
Pro zvýšení bezpečnosti je nejlepší mít pro každou databázi vytvořené samostatné uživatelské účty s omezenějšími oprávněními, zejména pokud plánujete mít na svém serveru hostováno více databází.
Poznámka: Některé starší verze nativní PHP knihovny MySQL mysqlnd nepodporují caching_sha2_authentication, což je výchozí autentizační metoda pro uživatele vytvořené v MySQL 8. Z tohoto důvodu může být při vytváření databázových uživatelů pro PHP aplikace na MySQL 8 nutné zajistit, aby byly nakonfigurovány tak, aby používaly mysql_native_password. Ukážeme, jak to provést v Kroku 6.
Váš server MySQL je nyní nainstalován a zabezpečen. Dále nainstalujete PHP, poslední komponentu v LEMP stacku.
Krok 3 – Instalace PHP
Nainstalujte PHP pro zpracování kódu a generování dynamického obsahu. Nginx vyžaduje externí program pro zpracování PHP.
PHP-FPM („správce procesů fastCGI“) efektivně zpracovává PHP s dalšími bezpečnostními funkcemi a poskytuje lepší výkon pro weby založené na PHP. Nainstalujte php-fpm pro směrování PHP požadavků z Nginx a php-mysql pro umožnění komunikace PHP s MySQL. Základní balíčky PHP se instalují automaticky jako závislosti.
Chcete-li nainstalovat balíčky php8.1-fpm a php-mysql, spusťte:
sudo apt install php8.1-fpm php-mysqlAž budete vyzváni, stiskněte Y a ENTER pro potvrzení instalace.
Ověřte, že PHP-FPM běží:
sudo systemctl status php8.1-fpmMěli byste vidět výstup, který ukazuje, že PHP-FPM je aktivní:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Můžete také zkontrolovat verzi PHP:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xKonfigurujte Nginx tak, aby používal tyto komponenty PHP.
Krok 4 — Nastavení Nginxu pro použití PHP procesoru
Vytvořte serverové bloky Nginx (podobné virtuálním hostitelům Apache) pro zabalování konfigurace a hostování více domén na jednom serveru. Tento průvodce používá your_domain jako příklad názvu domény.
Info: Chcete-li se dozvědět více o nastavení doménového jména s Linux-Console.net, přečtěte si náš úvod k DNS Linux-Console.net.
Na Ubuntu 22.04 Nginx povoluje jeden výchozí serverový blok, který obsluhuje dokumenty z /var/www/html. Pro více webů vytvořte strukturu adresářů uvnitř /var/www pro your_domain a nechte /var/www/html jako výchozí záložní adresář.
Vytvořte kořenový webový adresář pro vaše_doména takto:
sudo mkdir /var/www/your_domainDále přiřaďte vlastnictví adresáře pomocí proměnné prostředí $USER, která bude odkazovat na aktuálního uživatele systému:
sudo chown -R $USER:$USER /var/www/your_domainPoté otevřete nový konfigurační soubor v adresáři sites-available Nginxu pomocí vámi preferovaného editoru příkazového řádku. Zde použijeme nano:
sudo nano /etc/nginx/sites-available/your_domainTím se vytvoří nový prázdný soubor. Vložte následující základní konfiguraci:
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;
}
}Zde je vysvětlení, co každá z těchto direktiv a bloků umístění dělá:
listen— Určuje, na kterém portu bude Nginx naslouchat. V tomto případě bude naslouchat na portu80, což je výchozí port pro HTTP.root— Určuje kořenový adresář dokumentu, kde jsou uloženy soubory poskytované touto webovou stránkou.index— Určuje, v jakém pořadí bude Nginx upřednostňovat indexové soubory pro tuto webovou stránku. Běžnou praxí je uvádět souboryindex.htmls vyšší prioritou nežindex.php, aby bylo možné rychle nastavit úvodní stránku údržby v PHP aplikacích. Tyto nastavení můžete upravit tak, aby lépe vyhovovala potřebám vaší aplikace.server_name— Určuje, na které doménové názvy a/nebo IP adresy by měl tento blok serveru odpovídat. Směřujte tuto direktivu na doménové jméno vašeho serveru nebo veřejnou IP adresu.location /— První blok location obsahuje direktivutry_files, která kontroluje existenci souborů nebo adresářů odpovídajících požadavku URL. Pokud Nginx nenajde odpovídající zdroj, vrátí chybu 404.location ~ \.php$— Tento blok lokace zpracovává samotné PHP tím, že ukazuje Nginx na konfigurační souborfastcgi-php.confa souborphp8.1-fpm.sock, který určuje, jaký socket je spojen sphp8.1-fpm.location ~ /\.ht— Poslední blok location se zabývá soubory.htaccess, které Nginx nezpracovává. Přidáním direktivydeny all, pokud se nějaké soubory.htaccessdostanou do kořenového adresáře dokumentu, nebudou návštěvníkům zpřístupněny.
Až dokončíte úpravy, soubor uložte a zavřete. Pokud používáte nano, můžete to udělat stisknutím CTRL+X a poté Y a ENTER pro potvrzení.
Aktivujte svou konfiguraci propojením s konfiguračním souborem z adresáře sites-enabled Nginx:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Poté odpojte výchozí konfigurační soubor z adresáře /sites-enabled/:
sudo unlink /etc/nginx/sites-enabled/defaultPoznámka: Pokud budete někdy potřebovat obnovit výchozí nastavení, můžete to provést znovuvytvořením symbolického odkazu, například takto:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Tímto řeknete Nginxu, aby použil tuto konfiguraci při příštím načtení. Své nastavení můžete otestovat na syntaktické chyby spuštěním následujícího příkazu:
sudo nginx -tPokud jsou hlášeny nějaké chyby, vraťte se ke svému konfiguračnímu souboru a před pokračováním zkontrolujte jeho obsah.
Až budete připraveni, znovu načtěte Nginx, aby se změny projevily:
sudo systemctl reload nginxVáš nový web je nyní aktivní, ale kořen webu /var/www/your_domain je stále prázdný. Vytvořte v tomto umístění soubor index.html, abyste mohli otestovat, zda váš nový blok serveru funguje podle očekávání:
nano /var/www/your_domain/index.htmlZahrňte do tohoto souboru následující 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>Nyní přejděte do svého prohlížeče a přistupte k doménovému jménu nebo IP adrese vašeho serveru, jak je uvedeno v direktivě server_name v konfiguračním souboru vašeho serverového bloku:
http://server_domain_or_IPObdržíte stránku jako následující:
Pokud jste tuto stránku obdrželi, znamená to, že váš blok serveru Nginx funguje podle očekávání.
Tento soubor můžete ponechat na místě jako dočasnou úvodní stránku pro vaši aplikaci, dokud nenastavíte soubor index.php, který jej nahradí.
Upozornění: Po přidání souboru index.php se ujistěte, že odstraníte nebo přejmenujete soubor index.html ve vašem kořenovém adresáři dokumentů. Pokud oba soubory existují, Nginx bude ve výchozím nastavení zobrazovat index.html a vaše PHP stránka se nezobrazí – to je běžný zdroj zmatku pro nové uživatele.
Váš LEMP stack je nyní plně nakonfigurován. V dalším kroku vytvoříte PHP skript, který otestuje, zda Nginx skutečně umí zpracovávat soubory .php na vašem nově nakonfigurovaném webu.
Krok 5 – Testování PHP s Nginx
Váš LEMP stack by nyní měl být kompletně nastaven. Můžete jej otestovat, abyste ověřili, že Nginx dokáže správně předávat soubory .php vašemu PHP zpracovateli.
Toto můžete udělat vytvořením testovacího PHP souboru ve vašem kořenovém adresáři dokumentů. Otevřete nový soubor s názvem info.php ve vašem kořenovém adresáři dokumentů ve vašem preferovaném textovém editoru:
nano /var/www/your_domain/info.phpPřidejte následující řádky do nového souboru. Tento PHP kód je platný a vrátí informace o vašem serveru:
<?php
phpinfo();Až skončíte, soubor uložte a zavřete.
Nyní můžete na tuto stránku získat přístup ve svém webovém prohlížeči návštěvou domény nebo veřejné IP adresy, kterou jste nastavili ve svém konfiguračním souboru Nginx, a poté /info.php:
http://server_domain_or_IP/info.phpObdržíte webovou stránku obsahující podrobné informace o vašem serveru:
Po kontrole relevantních informací o vašem PHP serveru prostřednictvím této stránky je nejlepší soubor, který jste vytvořili, odstranit, protože obsahuje citlivé informace o vašem PHP prostředí a vašem serveru Ubuntu. K odstranění tohoto souboru můžete použít rm:
sudo rm /var/www/your_domain/info.phpTento soubor můžete kdykoli znovu vytvořit, pokud ho budete později potřebovat.
Krok 6 — Testování připojení k databázi z PHP (volitelné)
Pokud chcete otestovat, zda PHP dokáže připojit k MySQL a provádět databázové dotazy, můžete vytvořit testovací tabulku s ukázkovými daty a z PHP skriptu si její obsah načíst. Předtím je však potřeba vytvořit testovací databázi a nového uživatele MySQL, který bude správně nastaven pro její přístup.
Poznámka: Některé starší verze nativní PHP knihovny MySQL mysqlnd nepodporují caching_sha2_authentication, což je výchozí metoda autentizace pro MySQL 8. Může být nutné zajistit, aby byly nakonfigurovány k použití mysql_native_password místo toho.
Vytvoříme databázi s názvem example_database a uživatele s názvem example_user, ale tyto názvy můžete nahradit jinými hodnotami.
Nejprve se připojte ke konzoli MySQL pomocí účtu root:
sudo mysqlChcete-li vytvořit novou databázi, spusťte následující příkaz ve vaší MySQL konzoli:
CREATE DATABASE example_database;Nyní můžete vytvořit nového uživatele a udělit mu plná práva k vlastní databázi, kterou jste vytvořili.
Následující příkaz vytvoří nového uživatele s názvem example_user a jako výchozí metodu ověřování použije mysql_native_password. Heslo tohoto uživatele definujeme jako password, ale měli byste tuto hodnotu nahradit vlastním bezpečným heslem.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Nyní musíme tomuto uživateli udělit oprávnění k databázi example_database:
GRANT ALL ON example_database.* TO 'example_user'@'%';To umožní uživateli example_user plná oprávnění k databázi example_database, zároveň však zabrání tomuto uživateli vytvářet nebo měnit jiné databáze na vašem serveru.
Nyní ukončete shell MySQL následujícím příkazem:
exitMůžete otestovat, zda nový uživatel má správná oprávnění, tím, že se znovu přihlásíte do konzole MySQL, tentokrát však pomocí vlastních uživatelských údajů. Všimněte si přepínače -p v tomto příkazu, který vás vyzve k zadání hesla použitého při vytváření uživatele example_user:
mysql -u example_user -pPo přihlášení do konzole MySQL potvrďte, že máte přístup k databázi example_database:
SHOW DATABASES;To vrátí následující výstup:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Dále vytvoříme testovací tabulku s názvem todo_list. V konzoli MySQL spusťte následující příkaz:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Vložte několik řádků obsahu do testovací tabulky. Možná budete chtít následující příkaz několikrát zopakovat s různými hodnotami:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Chcete-li potvrdit, že data byla úspěšně uložena do vaší tabulky, spusťte:
SELECT * FROM example_database.todo_list;Váš výstup by měl být zobrazen následovně:
+---------+--------------------------+
| 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 potvrzení, že máte v testovací tabulce platná data, můžete opustit konzoli MySQL:
exitNyní můžete vytvořit PHP skript, který se připojí k MySQL a dotáže se na váš obsah. Vytvořte nový PHP soubor ve vašem vlastním webovém kořenovém adresáři pomocí vašeho oblíbeného editoru. Pro tento účel použijeme nano:
nano /var/www/your_domain/todo_list.phpNásledující PHP skript se připojuje k databázi MySQL a dotazuje se na obsah tabulky todo_list, přičemž výsledky zobrazí v seznamu. Pokud dojde k problému s připojením k databázi, vyvolá výjimku.
Přidejte následující obsah do své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 a zavřete soubor, až dokončíte úpravy.
Nyní můžete tuto stránku otevřít ve svém webovém prohlížeči návštěvou doménového jména nebo veřejné IP adresy nastavené pro váš web, následované /todo_list.php:
http://server_domain_or_IP/todo_list.phpMěli byste obdržet stránku podobnou následující, která zobrazuje obsah, který jste vložili do své testovací tabulky:
To znamená, že vaše PHP prostředí je připraveno se připojit a komunikovat s vaším serverem MySQL.
Často kladené otázky
K čemu se používá LEMP stack?
Stack LEMP hostuje dynamické webové stránky a aplikace založené na PHP, včetně WordPress, Laravel, Magento, Drupal a vlastních PHP projektů. Je zvláště efektivní pro weby s vysokou návštěvností, které vyžadují efektivní zpracování současných připojení.
Jaký je rozdíl mezi stacky LEMP a LAMP?
LEMP používá Nginx, který zpracovává spojení asynchronně s událostmi řízenou architekturou—efektivní pro souběžné uživatele. LAMP používá Apache, který tradičně vytváří vlákno pro každý požadavek (i když moderní Apache podporuje režimy řízené událostmi). LEMP obecně nabízí lepší výkon pro statický obsah a scénáře s vysokou souběžností, zatímco LAMP poskytuje jednodušší konfiguraci .htaccess a širší podporu modulů.
Kterou verzi Ubuntu bych měl použít pro LEMP?
Ubuntu 22.04 LTS je hlavním cílem tohoto průvodce a obsahuje PHP 8.1, MySQL 8.0 a Nginx s dlouhodobou podporou. Ubuntu 24.04 LTS (nejnovější verze) obsahuje ve výchozím nastavení PHP 8.3 a je kompatibilní s tímto průvodcem při úpravě cest a čísel verzí PHP-FPM podle potřeby.
Jak nainstaluji LEMP stack na Ubuntu 24.04?
Postupujte podle těchto základních kroků:
- Nainstalujte Nginx:
sudo apt install nginx - Nainstalujte MySQL:
sudo apt install mysql-server - Spusťte bezpečnostní skript MySQL:
sudo mysql_secure_installation - Nainstalujte PHP-FPM:
sudo apt install php-fpm php-mysql - Nastavit blok serveru Nginx s integrací PHP-FPM
- Test s
info.phpa připojením k databázi
Viz kompletní průvodce v krocích 1–6 výše.
Jakou verzi PHP bych měl nainstalovat s Nginx a MySQL?
Pro nejlepší kompatibilitu použijte ve své verzi Ubuntu výchozí PHP:
- Ubuntu 22.04: PHP 8.1 (nainstalováno pomocí
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (přizpůsobte příkazy pro tuto verzi na
php8.3-fpm)
Obě verze fungují vynikajícím způsobem s Nginx a MySQL 8.0, podporují moderní frameworky a dostávají pravidelné bezpečnostní aktualizace.
Jak nakonfigurovat Nginx, aby zpracovával soubory PHP?
Přidejte do konfigurace serveru Nginx blok location ~ \.php$, který směruje PHP požadavky na PHP-FPM přes 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 podle vaší verze PHP, otestujte pomocí sudo nginx -t a načtěte znovu pomocí sudo systemctl reload nginx.
Proč se po instalaci PHP-FPM objeví chyba „502 Bad Gateway“?
Chyby 502 znamenají, že Nginx nemůže komunikovat s PHP-FPM. Běžné příčiny:
- PHP-FPM neběží: Zkontrolujte pomocí
sudo systemctl status php8.1-fpma spusťte, pokud je to potřeba - Špatná cesta k zásuvce: Zkontrolujte, zda
/run/php/php8.1-fpm.sockexistuje a odpovídá vaší konfiguraci Nginx - Problém s oprávněními: Ujistěte se, že uživatel Nginx (www-data) má přístup k soketu
- Chyba konfigurace PHP-FPM: Zkontrolujte logy v
/var/log/php8.1-fpm.log
Řešení: Restartujte oba služby:
sudo systemctl restart php8.1-fpm nginxJak zabezpečit MySQL po instalaci?
Spusťte vestavěný bezpečnostní skript:
sudo mysql_secure_installationPostupujte podle pokynů, abyste:
- Povolit plugin pro ověřování hesla
- Nastavte silné heslo pro root
- Odstranit anonymní uživatele
- Zakázat vzdálené přihlášení root
- Odstranit testovací databázi
- Oprávnění k přenačtení
Pro aplikační databáze vytvořte vyhrazené uživatele s omezenými právy místo používání účtu root.
Mohu provozovat více webových stránek na jednom serveru LEMP?
Ano, vytvořte pro každou doménu samostatné bloky serveru Nginx:
- Vytvořte adresář:
sudo mkdir -p /var/www/second_domain - Vytvořte blok serveru:
sudo nano /etc/nginx/sites-available/second_domain - Konfigurujte s unikátními direktivami
server_namearoot - Povolit:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Otestujte a znovu načtěte:
sudo nginx -t && sudo systemctl reload nginx
Každá stránka může mít samostatná nastavení PHP a databázové uživatele.
Jak mohu aktualizovat PHP na novější verzi?
Aktualizace balíčků Ubuntu automaticky řeší menší verze. Pro aktualizace hlavních verzí:
Přidejte Ondřejovo PHP PPA (důvěryhodný repozitář třetí strany):
sudo add-apt-repository ppa:ondrej/php sudo apt updateNainstalujte novou verzi PHP-FPM:
sudo apt install php8.3-fpm php8.3-mysql -yAktualizujte konfiguraci Nginx tak, aby cesta k socketu byla
/run/php/php8.3-fpm.sockOtestujte a restartujte Nginx
Volitelně odstraňte starou verzi:
sudo apt purge php8.1-fpm
Vždy testujte ve staging prostředí před upgradem produkčních systémů.
Řešení běžných problémů
Chyba 502 špatná brána
Nejčastějším problémem se stackem LEMP je, když Nginx nemůže komunikovat s PHP-FPM:
Zkontrolujte stav PHP-FPM:
sudo systemctl status php8.1-fpmZkontrolujte cestu zásuvky:
ls -la /run/php/Očekávaný výstup by měl zobrazovat soubor php8.1-fpm.sock.
Běžné opravy:
- Restartujte PHP-FPM:
sudo systemctl restart php8.1-fpm - Zkontrolujte, zda cesta socketu v bloku serveru Nginx odpovídá skutečnému socketu PHP-FPM
- Ověřte oprávnění souboru:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Chyby odmítnutí oprávnění
Opravit oprávnění webového adresáře:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainProblémy s připojením k MySQL
Obnovit heslo root pro MySQL:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;Zkontrolujte službu MySQL:
sudo systemctl status mysqlPHP nepracuje
Zkontrolujte moduly PHP:
php -m | grep -E 'mysql|fpm'Zkontrolujte konfiguraci PHP-FPM:
sudo nginx -t
sudo php-fpm8.1 -tLadění chyb 404:
- Ověřte, zda je
index.phpuveden v direktivěindexNginx - Zkontrolujte, zda soubor existuje:
ls -la /var/www/your_domain/ - Prohlédněte si chybové protokoly Nginx:
sudo tail -f /var/log/nginx/error.log
Závěr
V tomto průvodci jste si vybudovali flexibilní základ pro poskytování PHP webových stránek a aplikací vašim návštěvníkům, s použitím Nginx jako webového serveru a MySQL jako databázového systému. To můžete provést také s webovým serverem Apache, podívejte se na náš návod Jak nainstalovat Linux, Apache, MySQL, PHP (LAMP) na Ubuntu. Svou stránku můžete také zabezpečit pomocí Let’s Encrypt, který poskytuje bezplatné a důvěryhodné certifikáty. Naučte se, jak na to, v našem průvodci Let’s Encrypt pro Apache.
Děkujeme, že se učíte s komunitou Linux-Console.net.



