Last Updated on 12/11/2025 by administrator
Instalace LAMP na Ubuntu 24.04 (Linux, Apache, MySQL, PHP)
Instalace LAMP na Ubuntu 24.04 (Linux, Apache, MySQL, PHP)
Motivace:
LAMP stack (Linux, Apache, MySQL/MariaDB, PHP) je jedním z nejrozšířenějších řešení pro provoz webových serverů a vývoj webových aplikací. Je také zkratkou pro Linux, Apache, MySQL a PHP. Poskytuje spolehlivé, flexibilní a otevřené prostředí, které umožňuje snadnou tvorbu a správu dynamických webových stránek.
Díky kombinaci Linuxu jako operačního systému, Apache jako webového serveru, MySQL/MariaDB jako databázového systému a PHP jako serverového skriptovacího jazyka je možné rychle a efektivně nasadit webový projekt jak pro testovací účely, tak i pro produkční prostředí.
Bude provedena Instalace LAMP na Ubuntu 24.04 a konfigurace s ověřením správné funkčnosti jednotlivých komponent a připravit server pro budoucí nasazení webových aplikací, například WordPressu.
OS:
Implementace instalace LAMP stacku byla prováděna na Ubuntu 24.04 LTS.
Implementace [1]:
1. Instalace LAMP na Ubuntu 24.04:
Aktualizace seznamu balíčků z repozitářů:
sudo apt update
Instalace všech potřebných balíčků pro webový server:
sudo apt install apache2 mariadb-server php php-mysql php-cli php-common libapache2-mod-php php-curl php-xml php-gd php-mbstring php-zip php-intl unzip -y
2. Nastavení Firewallu pro HTTP a HTTPS:
Pokud Firewall na serveru nakonfigurovaný není, je možné pokračovat krokem 3 níže. Pokud je nakonfigurovaný firewall (lze zjistit příkazem sudo ufw status), je nutné povolit provoz.
Ujistit se, že firewall má aplikační profil pro Apache:
sudo ufw app list
Výstup příkazu sudo ufw app list by měl obsahovat tyto aplikační profily:
Available applications: Apache Apache Apache Full Apache Secure OpenSSH Postfix Postfix SMTPS Postfix Submission
Profile Apache Full by měl povolovat porty 80 a 443:
sudo ufw app info "Apache Full"
Výstup příkazu sudo ufw app info „Apache Full“:
Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp
Pokud tomu tak není, příkaz níže povoluje příchozí provoz pro HTTP a HTTPS u profilu Apache Full:
sudo ufw allow in "Apache Full"
Ověření funkce Apache se provede zadáním IP adresy serveru do vyhledávače:
http://ip_adresa_serveru
Podobná „Default Page“ by měla být viděna v prohlížeči:

IP adresu lze zjistit pomocí příkazu:
ip a
3. Instalace MySQL databáze:
Spustit jednoduchý „security“ script, který je předinstalovaný s MariaDB. Ten odstraňuje nebezpečná výchozí nastavení a zamyká přístup do databázového systému:
sudo mysql_secure_installation
Výstup příkazu sudo mysql_secure_installation. Tím, že MariaDB byla právě nainstalována bez hesla, stačí stisknout Enter:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none):<enter>
V dalším kroku, stisknout „n“ aby bylo zachováno přihlášení pomocí hesla (čili tímto se bude možné přihlášit do databáze pomocí mysql -u root -p)
OK, successfully used password, moving on... Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have your root account protected, so you can safely answer 'n'. Switch to unix_socket authentication [Y/n] n
V dalším kroku, stisknout „y“ nastavit nové heslo pro MariaDB uživatele root:
You already have your root account protected, so you can safely answer 'n'. Change the root password? [Y/n] y
Securing the MySQL server deployment. New password: n3jak3s1lneh3sl0547 Re-enter new password: n3jak3s1lneh3sl0547 Password updated successfully! Reloading privilege tables.. ... Success!
Další otázky budou, zda si přejeme vymazat anonymní uživatele, zda chceme zakázat přihlášení pod rootem vzdáleně, vymazat testovací databázi i práva k ní a reload nových privilegií tabulek. Všechny tyto otázky potvrdit „y“:
Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] y Remove test database and access to it? [Y/n] y Reload privilege tables now? [Y/n] y
Pozn. Nyní je již možné provést přihlášení pod rootem do MariaDB pomocí mysql -u root -p příkazu.
4. Vytvoření Apache VirtualHost konfigurace:
Koncept virtualhostů je způsob, jak provozovat více webů (virtuálních webů) na jednom stroji pod jedinou IP adresou. Server podle příchozího požadavku HTTP GET v poli Host pozná, o jaký web se jedná.
Apache má defaultně nastaven jeden webový server umístěný v adresáři /var/www/html. To může být nepraktické, pokud je či bude hostováno více webů na jednom serveru. Místo úpravy souboru v /var/www/html, bude vytvořena nová složka doménového jména nového webu v /var/www/ adresáři. Jako příklad bude zvoleno doménové jméno martinuvzivot.cz.
5. Vytvoření složky „martinuvzivot.cz“ a nastavení práv:
Vytvořit nový adresář martinuvzivot.cz (podle doménového jména) v /var/www/ složce:
sudo mkdir -p /var/www/martinuvzivot.cz
Změnit vlastníka složky /var/www/martinuvzivot.cz a její podsložky na www-data:
sudo chown -R www-data /var/www/martinuvzivot.cz
Nastavit oprávnění pro /var/www/martinuvzivot.cz adresář:
sudo chmod -R 755 /var/www/martinuvzivot.cz
Pro vytvoření ukázkové stránky vytvořit soubor index.html ve složce /var/www/martinuvzivot.cz:
vi /var/www/martinuvzivot.cz/index.html
a vložit ukázkový HTML kód:
<html>
<head>
<title>Toto je martinuvzivot.cz</title>
</head>
<body>
<h1>Povedlo se! martinuvzivot.cz funguje!</h1>
</body>
</html>
Aby mohl Apache tento obsah obsluhovat, je nutné vytvořit soubor virtuálního hostitele. Místo přímé úpravy defaultního konfiguračního souboru v /etc/apache2/sites-available/000-default.conf se vytvoří nový soubor martinuvzivot.cz ve složce /etc/apache2/sites-available/:
sudo vim /etc/apache2/sites-available/martinuvzivot.cz.conf
A vložit následující konfigurační blok:
<VirtualHost *:80>
ServerAdmin webmaster@martinuvzivot.cz
ServerName martinuvzivot.cz
ServerAlias www.martinuvzivot.cz
Redirect permanent / https://martinuvzivot.cz/
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmaster@martinuvzivot.cz
ServerName martinuvzivot.cz
ServerAlias www.martinuvzivot.cz
DocumentRoot /var/www/martinuvzivot.cz/
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<Directory /var/www/martinuvzivot.cz>
Options +FollowSymLinks -Indexes
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/martinuvzivot.cz_wordpress_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/martinuvzivot.cz_wordpress_ssl_access.log combined
</VirtualHost>Pozn. 1: V direktivě Redirect permanent / https://martinuvzivot.cz/je lepší na konci URL vždy dát lomítko. To zajistí, že se správně přesměrují všechny podstránky (např. /kontakt)
Legenda:
ServerName – Určuje hlavní doménu virtuálního serveru (Apache rozlišuje servery podle hlavičky HTTP).
ServerAlias – Další možné domény, které mají směřovat na stejný server.
DocumentRoot – Adresář obsahující soubory webu.
ServerAdmin – Email administrátora pro kontaktní účely a chybová hlášení.
Redirect permanent – Přesměrování všech HTTP požadavků na HTTPS.
SSLEngine on – Aktivace SSL pro HTTPS.
SSLCertificateFile – Cesta k SSL certifikátu.
SSLCertificateKeyFile – Cesta k SSL klíči.
<Directory> – Konfigurace přístupu k souborům webu a povolení .htaccess přepisů.
ErrorLog – Soubor s chybovými záznamy webu.
CustomLog – Soubor s přístupovými záznamy webu.
6. Nastavení pořadí výchozího souboru (DirectoryIndex) v Apache:
Otevřít dir.conf ve složce /etc/apache2/mods-enabled/:
sudo vim /etc/apache2/mods-enabled/dir.conf
Defaultně Apache nejdříve vyhledává index.html. Aby preferoval PHP soubory před ostatními, vložit soubor index.php na začátek. Výsledný soubor pak bude vypadat takto:
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
7. Aktivace a správa konfigurace VirtualHost v Apache:
Aktivace konfiguračního souboru martinuvzivot.cz.conf příkazem níže. Tento příkaz aktivuje konkrétní konfiguraci webu ve složce sites-available tím, že vytvoří automaticky symbolický odkaz do složky sites-enabled.
sudo a2ensite martinuvzivot.cz.conf
Ověření, vytvoření symbolického linku ve složce sites-enabled:
ls -la /etc/apache2/sites-enabled/martinuvzivot.cz.conf
Výstup příkazu ls -la /etc/apache2/sites-enabled/martinuvzivot.conf ukazuje, že byl vytvořený symbolicky link:
lrwxrwxrwx 1 root root 37 Nov 2 14:39 /etc/apache2/sites-enabled/martinuvzivot.conf -> ../sites-available/martinuvzivot.conf
Deaktivovat původní konfigurační soubor 000-default.conf. Tímto se zruší i symbolický link ze složky sites-available do složky sites-enabled:
sudo a2dissite 000-default.conf
8. Validace konfigurace a start Apache:
Otestování konfigurace:
sudo apache2ctl configtest
Vystup příkazu sudo apache2ctl configtest by měl ukázat:
Syntax OK
Zobrazí přehled konfigurace všech virtualhostů:
apachectl -S
Nastavit, aby se Apache spouštěl automaticky při startu systému:
sudo systemctl enable apache2
Restartovat Apache:
sudo systemctl restart apache2
Ověření funkce služby Apache:
sudo systemctl status apache2
Výstup příkazu sudo systemctl status apache2 by měl ukázat, že služba Apache server běží:
* apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Sun 2025-11-02 15:10:13 CET; 1h 39min ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 14921 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 14924 (apache2)
Tasks: 7 (limit: 9153)
Memory: 12.3M (peak: 12.6M)
CPU: 522ms
CGroup: /system.slice/apache2.service
|-14924 /usr/sbin/apache2 -k start
|-14926 /usr/sbin/apache2 -k start
|-14927 /usr/sbin/apache2 -k start
|-14928 /usr/sbin/apache2 -k start
|-14929 /usr/sbin/apache2 -k start
|-14930 /usr/sbin/apache2 -k start
`-14931 /usr/sbin/apache2 -k start
9. Testování nového webu lokálně:
Předpokládá se, že webový server jede na privátní IP adrese 192.168.0.143. Je potřeba přesměrovat doménu martinuzivot.cz na nový server 192.168.0.143. To se provede v souboru hosts obvykle ve Windows složce C:\Windows\System32\drivers\etc\, jde je potřeba přidat řádek níže:
192.168.0.143 martinuvzivot.cz
Po změně v souboru hosts je potřeba promazat DNS cache. Na Windows se použije:
ipconfig /flushdns
Doporučené je vymazat cache prohlížeče. Doporučuji použít Firefox, anonymní režim, který umožní načíst web i bez validního SSL certifikátu.
Při otestování funkčnosti doménového jména martinuvzivot.cz by se mělo objevit v prohlížeči něco podobného:
Instalace LAMP na Ubuntu 24.04 je hotova.
Dále je možné provést migraci WordPress serveru, na tu se podíváme příště.
Zdroje:
[1] https://www.digitalocean.com/community/tutorials/how-to-install-lamp-stack-on-ubuntu







