Instalacja stosu LAMP na Debianie 13 i Debianie 12: Apache2, PHP 8, MariaDB i phpMyAdmin

Opublikowano Zaktualizowano 7 min czytania

Apache2, PHP 8, MariaDB i phpMyAdmin na Debianie 13 lub Debianie 12: pełna konfiguracja krok po kroku, razem z zabezpieczeniem i rozwiązaniami typowych błędów.

Chcesz zainstalować Apache2, PHP 8, bazę danych MySQL i phpMyAdmin, czyli kompletny stos LAMP, na swoim serwerze z systemem Debian 13 (Trixie) lub Debian 12 (Bookworm)? Ten poradnik przeprowadzi cię krok po kroku przez całą konfigurację, od serwera WWW aż po zabezpieczony dostęp do bazy danych.

Ważna uwaga o serwerze bazy danych: Debian nie zawiera pakietu mysql-server, w żadnej aktualnej wersji. Na Debianie zawsze instalujesz MariaDB. MariaDB wywodzi się z MySQL, mówi tym samym protokołem i tym samym językiem zapytań, a narzędzia takie jak phpMyAdmin czy rozszerzenie PHP php-mysql pracują z nią bez żadnych zmian. Jeśli więc w tym poradniku mowa o bazach danych MySQL, pod spodem działa MariaDB.

Wymagania

Potrzebujesz dostępu SSH z uprawnieniami roota (albo użytkownika z uprawnieniem sudo) na aktualnym Debianie. Zalecamy Debiana 13 „Trixie” i Debiana 12 „Bookworm”. Debian 10 zakończył okres wsparcia w czerwcu 2024 roku i nie otrzymuje już regularnych aktualizacji bezpieczeństwa, więc nie nadaje się do pracy produkcyjnej.

Najpierw zaktualizuj listę pakietów i wgraj 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 apache2

Otwórz następnie w przeglądarce http://<IP-twojego-serwera>/. Jeśli pojawi się domyślna strona Apache2, serwer WWW już działa.

Instalacja PHP 8

To, którą wersję PHP dostaniesz z repozytoriów, zależy od twojej dystrybucji. Dlatego polecenie ze sztywnym numerem wersji, takie jak apt install php8.4, nie zadziała na Debianie 12, bo tam dostępne jest tylko PHP 8.2. To zestawienie pokazuje wersję dołączoną do poszczególnych wydań (stan na lipiec 2026):

DystrybucjaWersja PHP z repozytoriów
Debian 13PHP 8.4
Debian 12PHP 8.2
Debian 11PHP 7.4

Używaj więc metapakietów bez numeru wersji. Automatycznie pociągną one właściwą wersję dla twojej dystrybucji i działają tak samo na każdym Debianie:

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 uruchomić PHP przez FPM zamiast przez moduł Apache, obowiązuje ta sama zasada. Także tutaj metapakiet niezawodnie doprowadzi cię do celu, podczas gdy nazwy z numerem wersji, takie jak php8.4-fpm, istnieją tylko na Debianie 13:

apt install -y php-fpm

Którą wersję faktycznie zainstalowano, pokaże ci:

php -v

Jeśli potrzebujesz wersji, której twoje wydanie Debiana nie zawiera (na przykład PHP 8.4 na Debianie 12), podepnij repozytorium PHP Ondřeja Surego. Klucz podpisu instaluje się przy tym jako osobny pakiet keyring, a w linii źródła zostaje przypisany dokładnie temu repozytorium przez signed-by=:

curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb

dpkg -i /tmp/debsuryorg-archive-keyring.deb

echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list

apt update

Dawniej popularna droga przez apt-key add jest wycofywana od Debiana 11 i nie powinno się jej już stosować, ponieważ tak dodany klucz byłby ważny dla wszystkich repozytoriów w systemie.

Dopiero z tego repozytorium nazwy pakietów z numerem wersji są dostępne dla wszystkich wydań Debiana. Następnie zainstaluj wybraną wersję PHP wraz ze zwykłym zestawem rozszerzeń:

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 po tym równolegle pracuje kilka wersji PHP, ustal, której ma używać Apache2:

a2dismod php8.2

a2enmod php8.4

systemctl restart apache2

Poleceniem php -v sprawdzisz, która wersja jest aktywna w wierszu poleceń.

Instalacja i zabezpieczenie serwera bazy danych MariaDB

Jak wspomnieliśmy na początku, na Debianie nie ma pakietu mysql-server. Serwer bazy danych nazywa się tutaj MariaDB, a jego wydanie zależy od wersji Debiana:

DystrybucjaSerwer bazy danych z repozytoriów
Debian 13MariaDB 11.8
Debian 12MariaDB 10.11
Debian 11MariaDB 10.5

Zainstaluj serwer i od razu potem uruchom zabezpieczanie:

apt install -y mariadb-server mariadb-client

mysql_secure_installation

Skrypt 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 y. Ustaw przy tym również mocne hasło do bazy danych.

Sprawdź potem, czy usługa działa:

systemctl status mariadb

Instalacja phpMyAdmin

W przypadku phpMyAdmina masz dwie możliwości. Pakiet phpmyadmin znajduje się w repozytoriach wszystkich aktualnych wersji Debiana i instaluje się w jednym kroku:

apt install phpmyadmin -y

Wygodnie, ale ta wersja często odstaje od aktualnego wydania producenta. Kto chce mieć zawsze najnowszą, pobiera phpMyAdmina 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

Utwórz następnie 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ą szyfruje dane sesji w ciasteczku. Wygeneruj taką wartość:

openssl rand -base64 32

Wpisz ją potem do pliku konfiguracyjnego:

nano /usr/share/phpmyadmin/config.inc.php

Właściwa linia wygląda tak:

$cfg['blowfish_secret'] = 'TUTAJ_WPISZ_WYGENEROWANĄ_WARTOŚĆ';

Podpięcie phpMyAdmina do Apache2

Utwórz własny plik konfiguracyjny Apache2 dla phpMyAdmina:

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>

Włącz 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

Załóż teraz 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 warto 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 stosu LAMP

Otwórz phpMyAdmina pod adresem http://<IP-twojego-serwera>/phpmyadmin i zaloguj się dopiero co utworzonym użytkownikiem. Jeśli logowanie się powiedzie, Apache2, PHP i MariaDB współpracują prawidłowo.

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 stos LAMP nie jest jeszcze zabezpieczony. Te punkty warto uzupełnić:

  • phpMyAdmin to popularny cel ataków. Ogranicz dostęp do własnego adresu IP, wpisując w bloku Directory Require ip 203.0.113.10 zamiast otwartego udostępnienia.
  • Skonfiguruj HTTPS, żeby hasła nie były przesyłane otwartym tekstem. Bez szyfrowania Twoje dane dostępowe da się podsłuchać w drodze do serwera.
  • Utrzymuj phpMyAdmina w aktualnej wersji. Skoro instalowałeś go ręcznie, apt upgrade nie zaktualizuje go automatycznie.
  • Rób regularne kopie zapasowe baz danych i przechowuj je poza serwerem.

Częste błędy i ich 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 zrestartuj 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 blowfish_secret. Wygeneruj ją poleceniem openssl rand -base64 32 i wpisz do pliku.

„Access denied for user” przy logowaniu do phpMyAdmina: Użytkownik bazy danych root po wykonaniu mysql_secure_installation korzysta z reguły z uwierzytelniania unix_socket i dlatego nie może logować 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 linii z błędem.

Najczęstsze pytania

Dlaczego Debian instaluje MariaDB zamiast MySQL?
Debian w żadnej aktualnej wersji nie zawiera pakietu o nazwie mysql-server. Dołączonym serwerem bazy danych jest MariaDB, serwer wywodzący się z MySQL, mówiący tym samym protokołem i tym samym językiem zapytań. Debian 13 dostarcza MariaDB 11.8, Debian 12 wersję 10.11, a Debian 11 wersję 10.5.
Którą wersję PHP dostarcza Debian?
Debian 13 zawiera PHP 8.4, Debian 12 PHP 8.2, a Debian 11 jeszcze PHP 7.4. Dlatego używaj metapakietów bez numeru wersji, czyli php albo php-fpm. Polecenie ze sztywnym numerem, takie jak apt install php8.4, nie zadziała na Debianie 12, bo tam ten pakiet nie istnieje.
Jak zainstalować nowszą wersję PHP niż ta z Debiana?
Przez repozytorium PHP Ondřeja Surego. Klucz podpisu trafia przy tym do systemu jako osobny pakiet keyring i zostaje przypisany dokładnie temu repozytorium przez signed-by. Dopiero potem nazwy pakietów z numerem wersji, takie jak php8.4-fpm, są dostępne na każdym wydaniu Debiana.
Dlaczego przeglądarka pobiera plik PHP, zamiast go wykonać?
W takiej sytuacji moduł PHP nie jest aktywny w Apache2. Włącz go poleceniem a2enmod z nazwą twojej wersji PHP, na przykład a2enmod php8.4, a następnie zrestartuj Apache2 poleceniem systemctl restart apache2.
Dlaczego nie mogę zalogować się do phpMyAdmina jako root?
Po wykonaniu mysql_secure_installation użytkownik bazy danych root korzysta z reguły z uwierzytelniania unix_socket i dlatego nie może logować się przez interfejs webowy. Załóż do tego celu własnego użytkownika bazy danych.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Debian 13 Debian