Instalacja stosu LAMP na Debianie 13 i Debianie 12: Apache2, PHP 8, MariaDB i phpMyAdmin
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):
| Dystrybucja | Wersja PHP z repozytoriów |
|---|---|
| Debian 13 | PHP 8.4 |
| Debian 12 | PHP 8.2 |
| Debian 11 | PHP 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:
| Dystrybucja | Serwer bazy danych z repozytoriów |
|---|---|
| Debian 13 | MariaDB 11.8 |
| Debian 12 | MariaDB 10.11 |
| Debian 11 | MariaDB 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.10zamiast 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 upgradenie 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?
Którą wersję PHP dostarcza Debian?
Jak zainstalować nowszą wersję PHP niż ta z Debiana?
Dlaczego przeglądarka pobiera plik PHP, zamiast go wykonać?
Dlaczego nie mogę zalogować się do phpMyAdmina jako root?
2023-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.

