Předchozí verzi tohoto návodu napsal Brennan Bearnes.

Úvod

Stack „LAMP“ je skupina softwaru s otevřeným zdrojovým kódem, který se obvykle instaluje společně, aby server mohl hostovat dynamické webové stránky a webové aplikace. Tento termín je vlastně zkratka, která představuje operační systém Linux spolu s webovým serverem Apache. Data webu jsou uložena v databázi MySQL a dynamický obsah je zpracováván pomocí jazyka PHP.

V tomto návodu nainstalujeme zásobník LAMP na server Ubuntu 18.04.

Předpoklady

Pro dokončení tohoto návodu budete potřebovat server Ubuntu 18.04 s uživatelským účtem bez oprávnění root sudo a základní bránu firewall. Ten lze nakonfigurovat pomocí našeho průvodce úvodním nastavením serveru pro Ubuntu 18.04.

Krok 1 – Instalace Apache a aktualizace brány firewall

Webový server Apache patří mezi nejoblíbenější webové servery na světě. Je dobře zdokumentovaný a široce používaný po většinu historie webu, což z něj činí skvělou výchozí volbu pro hostování webových stránek.

Instalace Apache pomocí správce balíčků Ubuntu, apt:

  • sudo apt update
  • sudo apt install apache2

Protože se jedná o příkaz sudo, jsou tyto operace prováděny s právy roota. Požádá vás o heslo běžného uživatele, aby ověřil vaše záměry.

Po zadání hesla vám apt sdělí, které balíčky plánuje nainstalovat a kolik místa na disku navíc zaberou. Stiskněte Y a stiskněte ENTER pro pokračování a instalace bude pokračovat.

Nastavte bránu firewall tak, aby povolovala webový provoz

Pokračujte dále, za předpokladu, že jste postupovali podle pokynů pro počáteční nastavení serveru a povolili bránu firewall UFW, a ujistěte se, že brána firewall povoluje provoz HTTP a HTTPS. Můžete zkontrolovat, zda má UFW aplikační profil pro Apache takto:

  • sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Podíváte-li se na profil Apache Full, mělo by být vidět, že povoluje provoz na portech 80 a 443:

  • sudo ufw app info "Apache Full"
Output
Profile: Apache FullTitle: Web Server (HTTP,HTTPS)Description: Apache v2 is the next generation of the omnipresent Apache webserver.Ports: 80,443/tcp

Povolit příchozí provoz HTTP a HTTPS pro tento profil:

  • sudo ufw allow in "Apache Full"

Můžete hned provést namátkovou kontrolu, abyste si ověřili, že vše proběhlo podle plánu, a to tak, že ve webovém prohlížeči navštívíte veřejnou IP adresu svého serveru (pokud tuto informaci ještě nemáte, zjistíte ji v poznámce pod dalším nadpisem):

http://your_server_ip

Uvidíte výchozí Ubuntu 18.04 Apache, která je zde pro informační a testovací účely. Měla by vypadat nějak takto:

Výchozí stránka Ubuntu 18.04 Apache

Pokud vidíte tuto stránku, pak je váš webový server nyní správně nainstalován a přístupný přes firewall.

Jak zjistit veřejnou IP adresu vašeho serveru

Pokud nevíte, jaká je veřejná IP adresa vašeho serveru, můžete ji zjistit několika způsoby. Obvykle se jedná o adresu, kterou používáte pro připojení k serveru prostřednictvím SSH.

Existuje několik různých způsobů, jak to provést z příkazového řádku. Za prvé můžete použít nástroje iproute2 a zjistit svou IP adresu zadáním tohoto příkazu:

  • ip addr show eth0 | grep inet | awk '{ print ; }' | sed 's/\/.*$//'

Tím získáte zpět dva nebo tři řádky. Všechny jsou správné adresy, ale váš počítač může být schopen použít pouze jednu z nich, takže neváhejte a vyzkoušejte každou z nich.

Alternativní metodou je použít nástroj curl a kontaktovat externí stranu, aby vám sdělila, jak vidí váš server. To se provádí tak, že se konkrétního serveru zeptáte, jaká je vaše IP adresa:

  • sudo apt install curl
  • curl http://icanhazip.com

Nezávisle na metodě, kterou použijete k získání vaší IP adresy, zadejte ji do adresního řádku webového prohlížeče a zobrazte výchozí stránku Apache.

Krok 2 – Instalace MySQL

Když máte webový server zprovozněný, je čas nainstalovat MySQL. MySQL je systém pro správu databází. V podstatě bude organizovat a poskytovat přístup k databázím, do kterých mohou vaše stránky ukládat informace.

Pro získání a instalaci tohoto softwaru opět použijte příkaz apt:

  • sudo apt install mysql-server

Poznámka: V tomto případě nemusíte před příkazem sudo apt update spouštět příkaz sudo apt update. Je to proto, že jste jej nedávno spustili ve výše uvedených příkazech pro instalaci Apache. Index balíčků ve vašem počítači by již měl být aktuální.

Tento příkaz vám také zobrazí seznam balíčků, které budou nainstalovány, spolu s množstvím místa, které zaberou na disku. Pro pokračování zadejte Y.

Po dokončení instalace spusťte jednoduchý bezpečnostní skript dodávaný s MySQL, který odstraní některá nebezpečná výchozí nastavení a uzamkne přístup k databázovému systému. Interaktivní skript spustíte spuštěním:

  • sudo mysql_secure_installation

Tento skript se vás zeptá, zda chcete nakonfigurovat VALIDATE PASSWORD PLUGIN.

Poznámka: Povolení této funkce je tak trochu na posouzení. Pokud je povolena, hesla, která neodpovídají zadaným kritériím, budou systémem MySQL odmítnuta s chybou. To způsobí problémy, pokud použijete slabé heslo ve spojení se softwarem, který automaticky konfiguruje přihlašovací údaje uživatele MySQL, například balíčky Ubuntu pro phpMyAdmin. Je bezpečné ponechat ověřování vypnuté, ale vždy byste měli používat silná, jedinečná 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 PLUGIN can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure enough. Would you like to setup VALIDATE PASSWORD plugin?Press y|Y for Yes, any other key for No:

Pokud odpovíte „ano“, budete vyzváni k výběru úrovně ověření hesla. Mějte na paměti, že pokud zadáte 2 pro nejsilnější úroveň, zobrazí se chyby při pokusu o nastavení jakéhokoli hesla, které neobsahuje čísla, velká a malá písmena a speciální znaky nebo které je založeno na běžných slovníkových slovech.

There are three levels of password validation policy:LOW Length >= 8MEDIUM Length >= 8, numeric, mixed case, and special charactersSTRONG Length >= 8, numeric, mixed case, special characters and dictionary filePlease enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Bez ohledu na to, zda jste zvolili nastavení VALIDATE PASSWORD PLUGIN, vás server dále požádá o výběr a potvrzení hesla pro uživatele root MySQL. Jedná se o administrátorský účet v MySQL, který má zvýšená oprávnění. Představte si jej podobně jako účet root pro samotný server (i když ten, který nyní nastavujete, je specifický účet pro MySQL). Ujistěte se, že se jedná o silné a jedinečné heslo, a nenechávejte ho prázdné.

Pokud jste povolili ověřování hesel, zobrazí se vám síla hesla pro právě zadané heslo roota a server se vás zeptá, zda chcete toto heslo změnit. Pokud jste se svým současným heslem spokojeni, zadejte na výzvu N pro „ne“:

Using existing password for root.Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Pro ostatní otázky stiskněte Y a při každé výzvě stiskněte klávesu ENTER. Tím odstraníte některé anonymní uživatele a testovací databázi, zakážete vzdálené přihlašování uživatele root a načtete tato nová pravidla, takže systém MySQL bude okamžitě respektovat provedené změny.

Poznamenejte, že v systémech Ubuntu se systémem MySQL 5.7 (a novějšími verzemi) je uživatel root MySQL ve výchozím nastavení nastaven na ověřování pomocí zásuvného modulu auth_socket, nikoli pomocí hesla. To v mnoha případech umožňuje určitou vyšší bezpečnost a použitelnost, ale může to také komplikovat situaci, když potřebujete umožnit přístup k uživateli externímu programu (např. phpMyAdmin).

Pokud při připojování k MySQL jako root preferujete použití hesla, budete muset přepnout jeho způsob ověřování z auth_socket na mysql_native_password. Chcete-li to provést, otevřete z terminálu příkazový řádek MySQL:

  • sudo mysql

Následujícím příkazem zkontrolujte, jakou metodu ověřování používají jednotlivé uživatelské účty MySQL:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | | auth_socket | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

V tomto příkladu vidíte, že uživatel root se skutečně ověřuje pomocí doplňku auth_socket. Chcete-li účet root nakonfigurovat tak, aby se ověřoval pomocí hesla, spusťte následující příkaz ALTER USER. Nezapomeňte změnit password na silné heslo podle vlastního výběru:

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

Poté spusťte příkaz FLUSH PRIVILEGES, který serveru řekne, aby znovu načetl tabulky přidělení a provedl vaše nové změny:

  • FLUSH PRIVILEGES;

Znovu zkontrolujte metody ověřování používané jednotlivými uživateli a potvrďte, že root se již neověřuje pomocí zásuvného modulu auth_socket:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+| user | authentication_string | plugin | host |+------------------+-------------------------------------------+-----------------------+-----------+| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost || mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost || debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |+------------------+-------------------------------------------+-----------------------+-----------+4 rows in set (0.00 sec)

V tomto ukázkovém výstupu vidíte, že uživatel root MySQL se nyní ověřuje pomocí hesla. Jakmile toto potvrdíte na vlastním serveru, můžete ukončit shell MySQL:

  • exit

V tomto okamžiku je váš databázový systém nastaven a můžete přejít k instalaci PHP, poslední součásti zásobníku LAMP.

Krok 3 – Instalace PHP

PHP je součást vašeho nastavení, která bude zpracovávat kód pro zobrazení dynamického obsahu. Může spouštět skripty, připojovat se k databázím MySQL a získávat informace a zpracovaný obsah předávat webovému serveru k zobrazení.

Při instalaci PHP opět využijte systém apt. Tentokrát navíc připojte několik pomocných balíčků, aby kód PHP mohl běžet pod serverem Apache a komunikovat s vaší databází MySQL:

  • sudo apt install php libapache2-mod-php php-mysql

Tím by se měl PHP nainstalovat bez problémů. Za chvíli to vyzkoušíme.

Ve většině případů budete chtít upravit způsob, jakým Apache obsluhuje soubory při požadavku na adresář. V současné době, pokud uživatel požádá server o adresář, bude Apache nejprve hledat soubor s názvem index.html. Chceme webovému serveru říci, aby upřednostňoval soubory PHP před ostatními, a proto přimějeme Apache, aby nejprve hledal soubor index.php.

Proto zadejte tento příkaz a otevřete soubor dir.conf v textovém editoru s právy roota:

  • sudo nano /etc/apache2/mods-enabled/dir.conf

Bude vypadat takto:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm</IfModule>

Přesuňte indexový soubor PHP (zvýrazněný výše) na první pozici za specifikaci DirectoryIndex takto:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm</IfModule>

Po dokončení soubor uložte a zavřete stisknutím CTRL+X. Uložení potvrďte zadáním Y a poté stisknutím ENTER ověřte umístění uloženého souboru.

Poté restartujte webový server Apache, aby byly vaše změny rozpoznány. Uděláte to zadáním tohoto příkazu:

  • sudo systemctl restart apache2

Stav služby apache2 můžete také zkontrolovat pomocí systemctl:

  • sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start

Stisknutím Q tento stavový výstup ukončíte.

Pro rozšíření funkčnosti PHP máte možnost nainstalovat některé další moduly. Chcete-li zobrazit dostupné možnosti modulů a knihoven PHP, přepište výsledky příkazu apt search do less, což je pager, který umožňuje procházet výstupy jiných příkazů:

  • apt search php- | less

Pomocí kláves se šipkami procházejte nahoru a dolů a ukončete stisknutím Q.

Výsledky jsou všechny volitelné komponenty, které můžete nainstalovat. U každé z nich se zobrazí krátký popis:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64 Tracks usage of TCP/IP and builds html files with graphsbluefish/bionic 2.2.10-1 amd64 advanced Gtk+ text editor for web and software developmentcacti/bionic 1.1.38+ds1-1 all web interface for graphing of monitoring systemsganglia-webfrontend/bionic 3.6.1-3 all cluster monitoring toolkit - web front-endgolang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all PHP-like Compression and Archive Extensions in Gohaserl/bionic 0.9.35-2 amd64 CGI scripting program for embedded environmentskdevelop-php-docs/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-phpkdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all transitional package for kdevelop-php-l10n…:

Chcete-li se dozvědět více o tom, co jednotlivé moduly dělají, můžete si o nich vyhledat více informací na internetu. Případně se můžete podívat na dlouhý popis balíčku zadáním:

  • apt show package_name

Výstupů bude mnoho, přičemž v jednom poli s názvem Description bude delší vysvětlení funkcí, které modul poskytuje.

Chcete-li například zjistit, co dělá modul php-cli, můžete zadat toto:

  • apt show php-cli

Společně s velkým množstvím dalších informací najdete něco, co vypadá takto:

Output
…Description: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Ubuntu's default PHP version (currently 7.2).…

Pokud se po prozkoumání rozhodnete, že byste chtěli balíček nainstalovat, můžete tak učinit pomocí příkazu apt install, jako jste to dělali u ostatního softwaru.

Pokud jste se rozhodli, že potřebujete php-cli, můžete zadat:

  • sudo apt install php-cli

Pokud chcete nainstalovat více než jeden modul, můžete to udělat tak, že za příkazem apt install uvedete jednotlivé moduly oddělené mezerou takto:

  • sudo apt install package1 package2 ...

V tomto okamžiku je váš zásobník LAMP nainstalován a nakonfigurován. Než začnete dělat cokoli dalšího, doporučujeme nastavit virtuálního hostitele Apache, kam můžete ukládat podrobnosti o konfiguraci serveru.

Krok 4 – Nastavení virtuálních hostitelů (doporučeno)

Při použití webového serveru Apache můžete použít virtuální hostitele (podobně jako bloky serverů v Nginxu) k zapouzdření konfiguračních detailů a hostování více než jedné domény z jednoho serveru. My nastavíme doménu s názvem your_domain, ale měli byste ji nahradit vlastním názvem domény. Další informace o nastavení doménového jména v systému DigitalOcean naleznete v našem Úvodu do DigitalOcean DNS.

Apache v Ubuntu 18.04 má ve výchozím nastavení povolen jeden blok serverů, který je nakonfigurován tak, aby obsluhoval dokumenty z adresáře /var/www/html. To sice funguje dobře pro jeden web, ale pokud hostujete více webů, může to být nepřehledné. Místo úpravy adresáře /var/www/html vytvoříme adresářovou strukturu v rámci adresáře /var/www pro náš web your_domain a adresář /var/www/html ponecháme na místě jako výchozí adresář, který bude obsluhován, pokud požadavek klienta neodpovídá žádnému jinému webu.

Vytvořte adresář pro vaši_doménu následujícím způsobem:

sudo mkdir /var/www/your_domain

Poté přiřaďte vlastnictví adresáře pomocí proměnné prostředí $USER:

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

Právomoci kořenů vašeho webu by měly být správné, pokud jste nezměnili hodnotu unmask, ale můžete se ujistit zadáním:

  • sudo chmod -R 755 /var/www/your_domain

Dále vytvořte ukázkovou stránku index.html pomocí nano nebo svého oblíbeného editoru:

  • nano /var/www/your_domain/index.html

Vnitř přidejte následující ukázku HTML:

/var/www/vaše_doména/index.html
<html> <head> <title>Welcome to Your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body></html>

Po dokončení soubor uložte a zavřete.

Aby mohl Apache tento obsah obsluhovat, je nutné vytvořit soubor virtual host se správnými direktivami. Namísto přímé úpravy výchozího konfiguračního souboru umístěného na adrese /etc/apache2/sites-available/000-default.conf vytvoříme nový soubor na adrese /etc/apache2/sites-available/your_domain.conf:

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Vložte následující konfigurační blok, který je podobný výchozímu, ale aktualizovaný pro náš nový adresář a název domény:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName your_domain ServerAlias www.your_domain DocumentRoot /var/www/your_domain ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

Všimněte si, že jsme aktualizovali DocumentRoot na náš nový adresář a ServerAdmin na e-mail, ke kterému má přístup správce webu your_domain. Přidali jsme také dvě směrnice: ServerName, která určuje základní doménu, která by měla odpovídat této definici virtuálního hostitele, a ServerAlias, která definuje další názvy, které by měly odpovídat, jako by byly základním názvem.

Po dokončení soubor uložte a zavřete.

Povolíme soubor pomocí nástroje a2ensite:

  • sudo a2ensite your_domain.conf

Zakážeme výchozí stránku definovanou v 000-default.conf:

  • sudo a2dissite 000-default.conf

Dále otestujeme, zda nedošlo k chybám konfigurace:

  • sudo apache2ctl configtest

Měli byste vidět následující výstup:

Output
Syntax OK

Restartujte Apache a proveďte změny:

  • sudo systemctl restart apache2

Apache by nyní měl obsluhovat název vaší domény. Můžete to otestovat přechodem na http://your_domain, kde by se mělo zobrazit něco takového:

Příklad virtuálního hostitele Apache

S tím je váš virtuální hostitel plně nastaven. Před provedením dalších změn nebo nasazením aplikace by však bylo vhodné proaktivně otestovat konfiguraci PHP pro případ, že by se vyskytly nějaké problémy, které je třeba řešit.

Krok 5 – Testování zpracování PHP na webovém serveru

Pro otestování, zda je váš systém správně nakonfigurován pro PHP, vytvořte zcela základní skript PHP s názvem info.php. Aby Apache tento soubor našel a správně obsloužil, musí být uložen v kořenovém adresáři webu.

Vytvořte soubor v kořenovém adresáři webu, který jste vytvořili v předchozím kroku, příkazem:

  • sudo nano /var/www/your_domain/info.php

Tím se otevře prázdný soubor. Dovnitř souboru přidejte následující text, který je platným kódem PHP:

info.php
<?phpphpinfo();?>

Po dokončení soubor uložte a zavřete.

Nyní můžete otestovat, zda je váš webový server schopen správně zobrazit obsah vygenerovaný tímto skriptem PHP. Chcete-li to vyzkoušet, navštivte ve webovém prohlížeči tuto stránku. Budete opět potřebovat veřejnou IP adresu svého serveru.

Adresa, kterou budete chtít navštívit, je:

http://your_domain/info.php

Stránka, na kterou přijdete, by měla vypadat nějak takto:

Ubuntu 18.04 default PHP info

Tato stránka poskytuje základní informace o vašem serveru z pohledu PHP. Je užitečná pro ladění a pro ujištění, že jsou vaše nastavení aplikována správně.

Pokud tuto stránku vidíte v prohlížeči, pak vaše PHP funguje podle očekávání.

Po tomto testu pravděpodobně budete chtít tento soubor odstranit, protože by skutečně mohl poskytnout informace o vašem serveru neoprávněným uživatelům. Chcete-li to provést, spusťte následující příkaz:

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

Pokud budete později potřebovat znovu získat přístup k informacím, můžete tuto stránku vždy znovu vytvořit.

Závěr

Teď, když máte nainstalovaný stack LAMP, máte mnoho možností, co dělat dál. V podstatě jste nainstalovali platformu, která vám umožní instalovat na server většinu druhů webových stránek a webového softwaru.

Jako další bezprostřední krok byste měli zajistit zabezpečení připojení k webovému serveru tím, že je budete obsluhovat prostřednictvím protokolu HTTPS. Nejjednodušší možností je zde použít Let’s Encrypt k zabezpečení webu pomocí bezplatného certifikátu TLS/SSL.

Několik dalších oblíbených možností je:

  • Nainstalovat WordPress nejoblíbenější systém pro správu obsahu na internetu.
  • Nastavit PHPMyAdmin, který vám pomůže spravovat databáze MySQL z webového prohlížeče.
  • Naučit se používat SFTP k přenosu souborů na server a ze serveru.

Nainstalovat PHPMyAdmin, který vám pomůže spravovat databáze MySQL z webového prohlížeče.