Instalace LAMP na Ubuntu 24.04 (Linux, Apache, MySQL, PHP)

By | 02/11/2025

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:

Default Page apache
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)

Pozn. 2: Certifikát ssl-cert-snakeoil je self-signed (vygenerovaný serverem, není ověřen certifikační autoritou). Pro produkční web je lepší použít certifikát od důvěryhodné CA (např. Let’s Encrypt).

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.

Instalace LAMP na Ubuntu 24.04

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

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

Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *