Zpět na blog

Jak nainstalovat LEMP stack (Linux, Nginx, MySQL PHP) na Ubuntu 20.04

Jak nainstalovat LEMP stack (Linux, Nginx, MySQL PHP) na Ubuntu 20.04

Úvod

Ve světě internetu se spojuje několik technologií, které tvoří řešení umožňující uživatelům internetu přístup k dynamickému obsahu na celosvětové síti. LEMP stack je jedním z těchto řešení. Spojuje čtyři technologie, které tvoří kompletní serverové řešení pro vysoce výkonné a dynamické webové stránky. LEMP je akronym pro Linux, Nginx, MySQL a PHP. Linux je operační systém serveru. Nginx (který se vyslovuje jako Engine-X, odtud písmeno E v akronymu) je webový server. MySQL je databázový systém, který uchovává data webu a uživatelů. PHP je skriptovací jazyk na straně serveru pro dynamické zpracování.

V tomto návodu vás provedeme instalací a konfigurací LEMP stacku a ověříme, že vše běží podle očekávání. Začněme!

Krok 1: Konfigurace serveru s Ubuntu 20.04

Ubuntu 20.04 je operační systém založený na Linuxu. Existuje několik na Linuxu založených serverových operačních systémů, včetně bezplatných a prémiových. Tento průvodce se zaměřuje na Ubuntu 20.04, které je bezplatné a open-source. Tento krok řeší první požadavek v akronymu LEMP stacku, tedy L. Na svém VPS byste měli mít skutečnou instalaci Ubuntu 20.04 na svém VPS, abyste mohli pokračovat v dalších krocích. Můžete postupovat podle našeho návodu na nastavení serveru Ubuntu. Volitelně, pokud chcete tento návod sledovat na svém lokálním počítači, můžete si instalační obraz serveru Ubuntu 20.04 stáhnout přímo z webu Ubuntu. Měli byste nakonfigurovat běžného uživatele bez oprávnění root s právy sudo, protože budeme spouštět několik příkazů, které vyžadují oprávnění sudo.

Krok 2: Instalace a konfigurace serveru Nginx

Webové servery nám umožňují poskytovat obsah, jako jsou webové stránky, návštěvníkům webu. Nginx je populární webový server, který patří mezi pět nejlepších open-source webových serverů preferovaných vývojáři. Tento krok řeší druhý požadavek v LEMP stacku, E pro Nginx. Ubuntu má výchozí repozitář balíčků, ze kterého budeme získávat balíčky pro použití v tomto návodu. Ubuntu je založeno na Debianu, který ke správě balíčků používá apt nebo dpkg. Pro balíčky z výchozího repozitáře budeme používat apt.

Obecným pravidlem je, že před zahájením jakékoli instalace v systému Linux byste měli spustit příkaz pro aktualizaci. Začněte zadáním následujícího příkazu v terminálu:

Po aktualizaci můžete nainstalovat Nginx pomocí následujícího příkazu:

Po dokončení instalace se Nginx spustí automaticky. Dalším krokem je konfigurace firewallu pro povolení provozu. Ubuntu používá pro konfiguraci firewallů balíček ufw (Uncomplicated Firewall). Po instalaci se Nginx zaregistruje jako služba u ufw. Ubuntu spouští službu Firewall automaticky při startu systému, ale pro jistotu zadejte následující příkaz pro její povolení:

Chcete-li zobrazit seznam konfigurací aplikací, které ufw povoluje, zadejte následující příkaz:

Níže je snímek obrazovky, který ukazuje výstup výše uvedeného příkazu:

ufw app list

Jak vidíte, Nginx je již u ufw zaregistrován a má tři profily, jak je vysvětleno níže:

  • Nginx Full – otevírá port 80 i 443. Port 80 je pro běžný/nešifrovaný provoz, tj. HTTP. Port 443 je pro provoz šifrovaný pomocí TLS/SSL, tj. https.
  • Nginx HTTP – otevírá pouze port 80 – nešifrovaný provoz.
  • Nginx HTTPS – otevírá pouze port 443 – provoz šifrovaný pomocí TLS/SSL.

Ačkoli se Nginx automaticky registruje u ufw, do vašeho serveru nebude povolen žádný provoz, dokud tak sami neučiníte. Můžete se rozhodnout povolit všechny nebo jakékoli profily, nicméně je lepší povolit ten nejvíce omezující profil, který stále umožní provoz, který jste pro svůj webový server nakonfigurovali. Vzhledem k tomu, že jsme v tomto návodu nenakonfigurovali SSL, povolíme pouze provoz HTTP na portu 80. Pokud vás to zajímá, máme návod na konfiguraci SSL na serveru Nginx od Let's Encrypt pomocí nástroje Certbot.

Povolme provoz na portu 80 zadáním následujícího příkazu:

Pro ověření, že změna byla úspěšná, zadejte následující příkaz:

check status

Výše uvedený výstup ze spuštění příkazu ukazuje, že provoz HTTP je nyní povolen. Zda server běží, můžete zkontrolovat přístupem na vaši doménu nebo veřejnou IP adresu serveru v prohlížeči. Pokud jste nenakonfigurovali doménové jméno a nejste si jisti veřejnou IP adresou svého serveru, můžete ji najít pomocí curl spuštěním následujícího příkazu:

Zkopírujte výstup výše uvedeného příkazu, což je vaše veřejná IP adresa, do adresního řádku prohlížeče. Po načtení stránky uvidíte výchozí úvodní stránku Nginx:

nginx start page

Výše uvedená stránka indikuje, že jste úspěšně nainstalovali Nginx.

Krok 3: Instalace systému pro správu databází MySQL

Správa dat je klíčovou součástí každého dynamického webu. MySQL je systém pro správu databází, který ukládá a spravuje data webu. Tento krok se stará o třetí požadavek v LEMP stacku, M. Pro instalaci MySQL zadejte následující příkaz:

Po dokončení instalace MySQL ji musíte před použitím nakonfigurovat. Součástí konfigurace je zabezpečení databázového serveru. MySQL se dodává se skriptem, který vás provede zabezpečením a nastavením hesel. Následující příkaz spustí tento skript:

mysql secure installation

Skript se zeptá, zda chcete nastavit komponentu VALIDATE PASSWORD, nebo stisknout libovolné písmeno pro pokračování bez povolení této komponenty.

Komponenta VALIDATE PASSWORD je funkce, která slouží ke kontrole, zda heslo zadané pro konkrétního uživatele na vašem databázovém serveru splňuje určitá kritéria. Můžete ji nakonfigurovat tak, aby kontrolovala věci jako délku, číselné znaky, přítomnost velkých nebo malých písmen atd. Pokud není povolena, můžete si nakonfigurovat jakékoli heslo podle svého výběru. Pokud je však povolena, musíte použít heslo, které odpovídá zadaným kritériím. Její povolení může způsobit problémy s balíčky, které automaticky konfigurují přihlašovací údaje uživatelů MySQL, jako je například balíček phpMyAdmin pro Ubuntu. Zda ji povolit, či nikoli, je osobní volba. Vaše databáze je bezpečná, i když ji nepovolíte, jen se ujistěte, že používáte silná a jedinečná hesla.

Pokud jste pro povolení komponenty stiskli Y, skript vás požádá o výběr úrovně ověřování hesla:

password strength

Skript nabízí 3 úrovně ověřování hesla. Úroveň LOW vyžaduje, aby vaše heslo obsahovalo pouze 8 nebo více znaků. Úroveň MEDIUM vyžaduje, aby vaše heslo obsahovalo 8 nebo více znaků, které musí být kombinací velkých písmen, malých písmen a speciálních znaků. Úroveň STRONG vyžaduje komplexní heslo o délce 8 nebo více znaků, které musí být kombinací velkých písmen, malých písmen, speciálních znaků a slov, a nesmí být založeno na běžných slovníkových slovech, jinak se zobrazí chyby. Zvolme úroveň Low, napište 0 a stiskněte enter.

Skript vás vyzve k zadání a opětovnému zadání hesla:

set password

Napište y a stiskněte enter pro přijetí zadaného hesla jako hesla pro uživatele root. Následné výzvy slouží ke zvýšení bezpečnosti serveru MySQL. Začíná se odstraněním výchozích anonymních uživatelů, se kterými se dodává každá instalace MySQL, zakázáním přihlášení uživatele root ze vzdáleného připojení a odstraněním testovacích databází. Poslední výzva vás požádá o opětovné načtení tabulky oprávnění, aby se příkazy projevily. U všech výzev napište y a stiskněte enter:

mysql secure installation

Počáteční konfigurace zabezpečení je dokončena.

Verzi nainstalovaného MySQL můžete zkontrolovat spuštěním příkazu:

Zde je verze, kterou používáme v tomto návodu:

mysql version

V systémech Ubuntu s verzemi MySQL 5.7 a novějšími je uživatel root nakonfigurován tak, aby se ověřoval pomocí pluginu auth_socket a nikoli pomocí hesla. To zajišťuje vyšší bezpečnost, nicméně může to být problém u externích balíčků, jako je například balíček phpMyAdmin. Pokud dáváte přednost pokračování s použitím pluginu auth_socket, přejděte ke kroku 4.

Pokud se místo toho chcete připojit pomocí hesla, musíte nakonfigurovat metodu ověřování tak, aby používala mysql_native_password.

Spusťte příkazový řádek MySQL zadáním následujícího příkazu:

MySQL se dodává s několika výchozími databázemi. Seznam výchozích databází si můžete zobrazit zadáním následujícího dotazu do terminálu:

mysql dbs LEMP stack

Databáze s názvem mysql ukládá několik konfigurací souvisejících s MySQL. Tato databáze obsahuje tabulku s názvem users, která obsahuje podrobnosti o uživatelích a metodu ověřování pro každého z nich. Můžeme použít SQL dotazy k načtení, změně a odstranění informací z tabulky. Zadejte do terminálu následující dotaz, abyste získali podrobnosti o tom, jakou metodu ověřování jednotliví uživatelé používají:

user authentication check

Výše uvedený výstup ukazuje, že uživatel root se ve skutečnosti ověřuje pomocí pluginu auth_socket. Chcete-li změnit metodu ověřování pro uživatele root, zadejte do terminálu následující příkaz. Nezapomeňte jej změnit tak, aby odpovídal síle hesla pro střední úroveň, kterou jsme nastavili v předchozím kroku, jinak dojde k chybě:

Jakmile se dotaz úspěšně provede, spusťte příkaz flush privileges, aby se změny projevily okamžitě:

Znovu spusťte níže uvedený příkaz select a zkontrolujte, zda se změny projevily:

updated user authentication check

Z výstupu vyplývá, že uživatel root se nyní bude ověřovat pomocí mysql_native_password. Příkazový řádek mysql můžete ukončit zadáním exit a stisknutím klávesy enter.

Můžete se zkusit přihlásit pomocí nastaveného hesla zadáním následujícího příkazu:

Výzva vás požádá o zadání hesla. Pokud se shoduje, zobrazí se příkazový řádek MySQL. Úspěšně jste nastavili server s MySQL. Dále ukončete příkazový řádek MySQL.

Krok 4: Instalace PHP a nastavení Nginx pro použití PHP procesoru

PHP je zkratka pro PHP: Hypertext Preprocessor. Je to široce používaný open-source skriptovací jazyk na straně serveru pro webové stránky a webové aplikace. PHP se stará o čtvrtý požadavek v LEMP stacku. PHP pomáhá při generování dynamického obsahu na webových stránkách. Může být použito jako prostředník mezi vašimi webovými stránkami a databázovým systémem. Čte data z databáze a prezentuje je návštěvníkům vašeho webu. Dále může vkládat, aktualizovat a mazat data z databáze.

Nginx postrádá nativní pluginy pro zpracování PHP jako jiné webové servery, takže musíte nainstalovat php-fpm, aby se požadavky z Nginx předávaly k vyřízení do PHP. Nejprve přidejte repozitář Ubuntu universe, který obsahuje bezplatný a open-source software spravovaný komunitou Ubuntu. Zadejte do terminálu následující příkaz:

Poté nainstalujte balíček php-fpm společně s pomocným balíčkem php-mysql, který umožní PHP komunikovat s MySQL, pomocí následujícího příkazu:

V době psaní této příručky je verze PHP nainstalovaná výše uvedeným příkazem 7.2.24. Proto se nainstaluje balíček php-fpm7.2. Mějte to na paměti při aktualizaci bloků serveru a ujistěte se, že zadáváte správnou verzi, jinak se vaše stránka nenačte.

Verzi PHP můžete zkontrolovat zadáním následujícího příkazu:

php version

V tomto okamžiku jsou již nainstalovány všechny součásti balíku LEMP. Dalším krokem je konfigurace Nginx tak, aby směroval požadavky na PHP procesor. V Nginx se konfigurace provádí v rámci bloků serveru. Bloky serveru jsou ekvivalentem virtuálních hostitelů (virtual hosts) v Apache. Další informace naleznete v našem návodu na téma bloků serveru v Nginx.

Pro účely tohoto návodu vytvoříme blok serveru pro doménu test.com se stejným názvem, přičemž si můžete zvolit libovolný název podle svého uvážení. Bloky serveru se nacházejí v adresáři /etc/nginx/sites-available/. K vytvoření souboru bloku serveru použijte nano zadáním následujícího příkazu:

Do souboru zapište následující skript:

Zde je stručný popis toho, co jednotlivé direktivy dělají:

  • listen – definuje port, na kterém bude Nginx naslouchat. Port 80 je výchozí port, nicméně pokud byste měli nastavené SSL, zadali byste 443.
  • root – obsahuje adresář, ve kterém budou uloženy soubory webu.
  • index – instruuje Nginx, aby při požadavku upřednostnil poskytování souborů index.php, pokud jsou k dispozici.
  • server_name – definuje název bloku serveru, obsahuje veřejnou IP adresu nebo doménové jméno vašeho serveru.
  • location/ – první blok location obsahuje direktivu try_files. Kontroluje existenci souborů odpovídajících požadavku URI, a pokud nejsou nalezeny, vrátí chybu 404.
  • location ~ \.php$ – tato direktiva zpracovává PHP tím, že směruje požadavky Nginx přes soubor fastcgi-php.conf a soubor php7.2-fpm.sock, který definuje, jaký soket se má přidružit k php-fpm. Tento příkaz kontroluje stav php-fpm, přičemž specifikujeme verzi 7.2, kterou máme nainstalovanou. Ujistěte se, že provedete kontrolu pro verzi, kterou máte vy:
php status

  • location ~ /\.ht – tato direktiva zpracovává soubory .htaccess, které Nginx nezpracovává. Direktiva deny all zajišťuje, že návštěvníkům nebude poskytnut žádný soubor htaccess.

Po přidání skriptu do souboru test.com stiskněte Ctrl + O a poté stisknutím klávesy Enter soubor uložte. Stisknutím Ctrl + X editor zavřete.

Poté musíte blok serveru povolit zadáním následujícího příkazu, který vytvoří symbolický odkaz do adresáře /etc/nginx/sites-enabled:

Poté zrušte propojení výchozího bloku serveru ze složky sites-enabled zadáním následujícího příkazu:

Otestujte svou novou konfiguraci zadáním následujícího příkazu:

Pokud je syntaxe v pořádku, načtěte znovu Nginx pomocí následujícího příkazu:

V tomto kroku byl váš LEMP stack nainstalován a nakonfigurován. V dalším kroku vytvoříme testovací soubor, abychom se ujistili, že se různé komponenty správně propojují.

Krok 5: Vytvoření PHP souboru pro otestování vašeho LEMP stacku

V tomto kroku vytvoříme soubor .php a spustíme jej na serveru Nginx, abychom ověřili, zda běží správně. K ověření dostupných balíčků PHP použijeme globální funkci phpinfo(). Zadáním následujícího příkazu otevřete soubor .php v editoru nano:

V editoru nano zadejte následující fragment kódu:

Uložte a zavřete soubor. Chcete-li navštívit stránku, kterou jste právě vytvořili, ve svém prohlížeči, najděte svou doménu nebo IP adresu a přejděte na ni následovně:

Měli byste vidět stránku s informacemi o PHP:

php info page

Výše uvedená stránka ukazuje, že jste úspěšně nastavili Nginx. Vzhledem k tomu, že soubor, který jste vytvořili pro testování, obsahuje podrobné informace o vašem serveru, měli byste jej nezapomenout odstranit. Pro odstranění souboru zadejte následující příkaz:

 

Pokud budete v budoucnu potřebovat otestovat své konfigurace, můžete soubor kdykoli znovu vytvořit.

Závěr

V tomto návodu jste nakonfigurovali LEMP stack na svém Ubuntu 20.04, což je jeden z nejvýkonnějších dostupných stacků pro vývoj webových aplikací. Odtud byste měli být schopni hostovat téměř jakýkoli web, webové aplikace nebo serverovou logiku pro vaši mobilní aplikaci. Chcete-li zajistit, aby váš web poskytoval obsah prostřednictvím zabezpečeného připojení SSL, doporučujeme vám podívat se na náš návod na konfiguraci SSL certifikátů na serveru Nginx.

Přejeme příjemnou práci s počítačem!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.