Instalacja stacku LAMP na Ubuntu 24.04 i 22.04: Apache2, PHP 8, MySQL i phpMyAdmin
Apache2, PHP 8, MySQL lub MariaDB i phpMyAdmin na Ubuntu 24.04 LTS albo 22.04 LTS: cała konfiguracja krok po kroku, łącznie z późniejszym zabezpieczeniem.
Chcesz zainstalować Apache2, PHP 8, MySQL i phpMyAdmin, czyli kompletny stack LAMP, na swoim serwerze Ubuntu 24.04 LTS albo Ubuntu 22.04 LTS? Ten poradnik przeprowadzi cię krok po kroku przez całą konfigurację, od serwera WWW aż po zabezpieczony dostęp do bazy danych.
Przewaga nad Debianem: Ubuntu ma w repozytoriach oba serwery baz danych, zarówno mysql-server, jak i mariadb-server. Masz więc wolny wybór. Debian dostarcza natomiast wyłącznie MariaDB. Ten poradnik pokazuje oba warianty, wszystkie pozostałe kroki są identyczne.
Wymagania
Potrzebujesz dostępu SSH z uprawnieniami roota (albo użytkownika z uprawnieniem sudo) na aktualnym Ubuntu. Zalecane są Ubuntu 24.04 LTS „Noble Numbat” oraz Ubuntu 22.04 LTS „Jammy Jellyfish”. Ubuntu 20.04 LTS zakończyło regularne wsparcie w maju 2025 roku i nie powinno już być używane produkcyjnie.
Najpierw zaktualizuj listę pakietów i zainstaluj dostępne aktualizacje:
apt update && apt upgrade -y
Instalacja Apache2 i pakietów podstawowych
Zainstaluj serwer WWW razem z pakietami pomocniczymi, których będziesz potrzebować w kolejnych krokach:
apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg software-properties-common apache2
Następnie otwórz w przeglądarce http://<IP-TWOJEGO-SERWERA>/. Jeśli pojawi się domyślna strona Apache2, serwer WWW już działa.
Jeśli na serwerze działa firewall, otwórz porty serwera WWW:
ufw allow "Apache Full"
Instalacja PHP 8
To, którą wersję PHP dostaniesz z repozytoriów, zależy od twojej dystrybucji. Polecenie ze sztywnym numerem wersji, takie jak apt install php8.3, kończy się dlatego na Ubuntu 22.04 LTS błędem. To zestawienie pokazuje wersję dostarczaną w poszczególnych wydaniach (stan na lipiec 2026):
| Dystrybucja | Wersja PHP z repozytoriów |
|---|---|
| Ubuntu 24.04 LTS | PHP 8.3 |
| Ubuntu 22.04 LTS | PHP 8.1 |
Używaj dlatego metapakietów bez numeru wersji. Automatycznie pociągają one odpowiednią wersję dla twojej dystrybucji i działają tak samo na każdym Ubuntu:
apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php
Jeśli chcesz uruchamiać PHP przez FPM zamiast przez moduł Apache, obowiązuje ta sama zasada. Również tutaj metapakiet niezawodnie prowadzi do celu, natomiast nazwa z numerem wersji, taka jak php8.3-fpm, istnieje tylko w Ubuntu 24.04 LTS:
apt install -y php-fpm
Która wersja rzeczywiście została zainstalowana, pokaże ci:
php -v
Jeśli potrzebujesz wersji, której twoje wydanie Ubuntu nie zawiera (na przykład PHP 8.4), podłącz znane repozytorium PHP Ondřeja Surý:
add-apt-repository ppa:ondrej/php
apt update
add-apt-repository zapisuje klucz podpisu automatycznie jako osobny plik keyring i przypisuje go dokładnie do tego repozytorium. Rozpowszechnione dawniej polecenie apt-key jest wycofane i nie powinno już być używane, ponieważ zapisany w ten sposób klucz obowiązywałby dla wszystkich repozytoriów w systemie.
Dopiero przez to repozytorium nazwy pakietów z numerem wersji stają się dostępne dla wszystkich wydań Ubuntu. Następnie instalujesz wybraną wersję PHP wraz z typowymi rozszerzeniami:
apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4
Jeśli działa potem kilka wersji PHP równolegle, ustal, której ma używać Apache2:
a2dismod php8.3
a2enmod php8.4
systemctl restart apache2
Poleceniem php -v sprawdzisz, która wersja jest aktywna w wierszu poleceń.
Instalacja i zabezpieczenie serwera bazy danych
Ubuntu oferuje ci oba popularne serwery baz danych, w tych wydaniach:
| Pakiet | Ubuntu 24.04 LTS | Ubuntu 22.04 LTS |
|---|---|---|
| mysql-server | MySQL 8.0.46 | MySQL 8.0.46 |
| mariadb-server | dostępny | dostępny |
Dla MySQL, czyli oryginału od Oracle:
apt install -y mysql-server mysql-client
mysql_secure_installation
Dla MariaDB, serwera wywodzącego się z MySQL, który mówi tym samym protokołem i tym samym językiem zapytań:
apt install -y mariadb-server mariadb-client
mysql_secure_installation
Zainstaluj tylko jeden z tych dwóch wariantów, ponieważ oba zajmują ten sam port. Dla dalszych kroków tego poradnika nie ma znaczenia, który wybierzesz.
Skrypt mysql_secure_installation zadaje kilka pytań. Aktualne wersje MariaDB pytają najpierw, czy przełączyć się na uwierzytelnianie unix_socket. Ta opcja ma sens, ponieważ użytkownik bazy danych root może się wtedy logować już tylko jako użytkownik systemowy root. Na wszystkie pozostałe pytania (usunięcie anonimowych użytkowników, zablokowanie zdalnego logowania dla roota, usunięcie testowej bazy danych, przeładowanie uprawnień) odpowiadaj za każdym razem y. Ustaw poza tym silne hasło do bazy danych.
Sprawdź potem, czy usługa działa. Nazwa jednostki systemd zależy od wybranego serwera:
systemctl status mysql
systemctl status mariadb
Instalacja phpMyAdmin
W przypadku phpMyAdmin masz dwie możliwości. Pakiet phpmyadmin znajduje się w repozytoriach wszystkich aktualnych wersji Ubuntu i instaluje się go w jednym kroku:
apt install phpmyadmin -y
Wygodne, ale wersja często pozostaje w tyle za stanem u producenta. Kto chce mieć zawsze najnowsze wydanie, pobiera phpMyAdmin bezpośrednio. Dokładnie tę drogę opisują kolejne kroki:
cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin
Następnie utwórz plik konfiguracyjny:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
phpMyAdmin potrzebuje losowej wartości jako blowfish_secret, którą szyfrowane są dane sesji w ciasteczku. Wygeneruj taką wartość:
openssl rand -base64 32
Wpisz ją potem do pliku konfiguracyjnego:
nano /usr/share/phpmyadmin/config.inc.php
Odpowiedni wiersz wygląda tak:
$cfg['blowfish_secret'] = 'WPISZ_TUTAJ_WYGENEROWANĄ_WARTOŚĆ';
Powiązanie phpMyAdmin z Apache2
Utwórz osobny plik konfiguracyjny Apache2 dla phpMyAdmin:
nano /etc/apache2/conf-available/phpmyadmin.conf
Zawartość pliku phpmyadmin.conf:
#Konfiguracja PHPMyAdmin dla Apache2
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
</Directory>
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>
Aktywuj konfigurację, przeładuj Apache2 i utwórz katalog tymczasowy z odpowiednimi uprawnieniami:
a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/
Tworzenie użytkownika bazy danych
Zaloguj się do bazy danych jako użytkownik systemowy root:
mysql -u root
Teraz utwórz własnego użytkownika bazy danych. Nie używaj przy tym nazw „root”, „admin”, „user” ani „username”, tylko własnej nazwy użytkownika i długiego, losowego hasła:
#WAŻNE! ZASTĄP USER I PASSWORD WŁASNYMI DANYMI DOSTĘPOWYMI.
CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Dla poszczególnych aplikacji powinieneś dodatkowo zakładać użytkowników z ograniczonymi uprawnieniami, którzy mają dostęp wyłącznie do własnej bazy danych:
CREATE DATABASE mojaaplikacja;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON mojaaplikacja.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
Konsolę bazy danych opuścisz w każdej chwili poleceniem:
exit
Test stacku LAMP
Otwórz phpMyAdmin pod adresem http://<IP-TWOJEGO-SERWERA>/phpmyadmin i zaloguj się przed chwilą utworzonym użytkownikiem. Jeśli logowanie się uda, Apache2, PHP i twój serwer bazy danych współpracują poprawnie.
Połączenie z PHP sprawdzisz dodatkowo krótkim plikiem testowym:
echo "<?php phpinfo();" > /var/www/html/info.php
Po otwarciu http://<IP-TWOJEGO-SERWERA>/info.php koniecznie usuń ten plik, ponieważ zdradza on szczegóły konfiguracji twojego serwera:
rm /var/www/html/info.php
Wskazówki bezpieczeństwa dla środowiska produkcyjnego
Świeżo zainstalowany stack LAMP nie jest jeszcze zabezpieczony. Te punkty warto uzupełnić:
- phpMyAdmin to popularny cel ataków. Ogranicz dostęp do własnego adresu IP, używając w bloku Directory
Require ip 203.0.113.10zamiast otwartego udostępnienia. - Skonfiguruj HTTPS, żeby hasła nie były przesyłane jawnym tekstem. Bez szyfrowania Twoje dane dostępowe da się odczytać po drodze do serwera.
- Utrzymuj phpMyAdmin w aktualnej wersji. Skoro zainstalowałeś go ręcznie,
apt upgradenie zaktualizuje go automatycznie. - Twórz regularne kopie zapasowe baz danych i przechowuj je poza serwerem.
Częste błędy i rozwiązania
Przeglądarka pobiera plik PHP zamiast go wykonać: moduł PHP nie jest aktywny w Apache2. Włącz go poleceniem a2enmod php8.4 i uruchom ponownie serwer WWW poleceniem systemctl restart apache2.
phpMyAdmin zgłasza „The configuration file now needs a secret passphrase”: w pliku config.inc.php brakuje wartości dla blowfish_secret. Wygeneruj ją poleceniem openssl rand -base64 32 i wpisz do pliku.
„Access denied for user” przy logowaniu do phpMyAdmin: użytkownik bazy danych root po wykonaniu mysql_secure_installation korzysta z reguły z uwierzytelniania unix_socket i dlatego nie może zalogować się przez interfejs webowy. Użyj dodatkowo utworzonego użytkownika.
Apache2 nie startuje po zmianie konfiguracji: sprawdź konfigurację poleceniem apachectl configtest, w wyniku znajdziesz plik i numer wiersza z błędem.
Najczęstsze pytania
Instalować na Ubuntu MySQL czy MariaDB?
Jaką wersję PHP zawiera Ubuntu?
Jak zdobyć nowszą wersję PHP niż ta z Ubuntu?
Dlaczego przeglądarka pobiera plik PHP zamiast go wykonać?
Dlaczego nie mogę zalogować się do phpMyAdmin jako root?
2022-2026 KernelHost GmbH. Wszelkie prawa zastrzeżone. Ten poradnik jest chroniony prawem autorskim. Publikowanie go w innych serwisach, w całości, we fragmentach lub w zmienionej formie, wymaga naszej pisemnej zgody. Cytaty z podaniem źródła i z linkiem są jak najbardziej mile widziane.

