Stos LAMP (Linux, Apache, MariaDB, PHP) to klasyczna podstawa dla WordPressa, Laravela i większości aplikacji PHP. W tym poradniku zbudujesz go krok po kroku na świeżym VPS Linux Infrawire z Ubuntu 24.04, z osobnym virtual hostem i zaporą otwierającą tylko to, co konieczne.
📋 Wymagania wstępne
- VPS KVM z Ubuntu 24.04 (adres IP i hasło roota znajdziesz w panelu klienta)
- Dostęp SSH jako root lub jako użytkownik z uprawnieniami
sudo - Domena
example.com, której rekordy A (i AAAA) wskazują naVPS_IP
Poniższe polecenia zakładają, że jesteś rootem. W przeciwnym razie poprzedź je sudo.
1. Aktualizacja systemu
Bashapt update && apt upgrade -y
2. Instalacja Apache
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
Usługa startuje od razu i będzie uruchamiana razem z systemem.
3. Instalacja MariaDB
MariaDB jest dostępna w repozytoriach Ubuntu i zastępuje MySQL bez zmian w aplikacji. Jeśli wolisz MySQL od Oracle, zainstaluj mysql-server, ale nigdy obu naraz na jednej maszynie.
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
W kreatorze zachowaj uwierzytelnianie unix_socket dla roota, ustaw silne hasło, jeśli zostaniesz o nie poproszony, usuń anonimowych użytkowników, zablokuj zdalne logowanie roota i usuń bazę testową. Następnie utwórz bazę danych i osobnego użytkownika dla aplikacji:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. Instalacja PHP 8.3
Ubuntu 24.04 zawiera PHP 8.3 w domyślnych repozytoriach, więc dodatkowe PPA nie jest potrzebne.
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
Pakiet libapache2-mod-php automatycznie przełącza Apache na MPM prefork i ładuje moduł PHP.
5. Virtual host i mod_rewrite
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
AllowOverride All włącza pliki .htaccess, na których opierają się ładne adresy URL w WordPressie czy Laravelu. Teraz włącz moduł i witrynę oraz wyłącz stronę domyślną:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
configtest musi zwrócić Syntax OK, zanim przeładujesz usługę.
6. Konfiguracja zapory
Najpierw zezwól na SSH, inaczej odetniesz sobie dostęp po włączeniu zapory.
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
Profil Apache Full otwiera porty 80 i 443. Nie otwieraj portu 3306: MariaDB musi nasłuchiwać wyłącznie lokalnie.
7. Test PHP i usunięcie pliku testowego
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
Powinieneś zobaczyć HTTP/1.1 200 OK. Otwórz http://example.com/info.php w przeglądarce, aby zobaczyć stronę konfiguracji PHP. Strona phpinfo() ujawnia wersje, ścieżki i moduły, dlatego natychmiast ją usuń:
Bashrm /var/www/example.com/public_html/info.php
Sprawdź też pozostałe komponenty:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ Rozwiązywanie problemów
Nadal widać domyślną stronę Apache. Domyślna witryna jest wciąż włączona albo DNS jeszcze się nie rozpropagował. Wykonaj a2dissite 000-default.conf, przeładuj Apache i sprawdź przez curl -I -H 'Host: example.com' http://VPS_IP/.
403 Forbidden. Upewnij się, że katalog ma Require all granted, że www-data może czytać pliki (ls -ld /var/www/example.com/public_html) i zajrzyj do logu /var/log/apache2/example.com-error.log.
Przeglądarka pobiera plik PHP zamiast go wykonać. Moduł PHP nie jest załadowany. Uruchom apache2ctl -M | grep php, potem systemctl restart apache2. Jeśli nic się nie pojawia, zainstaluj ponownie libapache2-mod-php.
Reguły przepisywania są ignorowane (404 na ładnych adresach). Sprawdź, czy wykonano a2enmod rewrite i czy blok <Directory> zawiera AllowOverride All.
🎉 Twój stos LAMP działa: Apache, MariaDB i PHP 8.3 są gotowe do hostowania pierwszej witryny.