Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

LAMP Stack — instalacja i konfiguracja na Ubuntu

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Hosting

LAMP (Linux + Apache + MySQL + PHP) to klasyczny i sprawdzony stos technologiczny do hostowania aplikacji webowych. Napędza większość instalacji WordPress, Drupal, Joomla i niezliczone aplikacje PHP na świecie. Mimo że Nginx zyskuje popularność, Apache wciąż wyróżnia się elastycznością (zwłaszcza .htaccess) i szeroką kompatybilnością. Ten przewodnik przeprowadzi Cię przez pełną instalację na Ubuntu 22.04/24.04.

Krok 1: Instalacja Apache

apt update
apt install -y apache2

# Sprawdzenie statusu
systemctl status apache2

# Firewall — otwórz port 80 i 443
ufw allow 'Apache Full'
ufw status

# Test — otwórz http://IP_TWOJEGO_VPS w przeglądarce

Krok 2: Instalacja MySQL

apt install -y mysql-server

# Zabezpieczenie instalacji (URUCHOM KONIECZNIE!)
mysql_secure_installation
# Kreator pyta o:
# - poziom walidacji hasła (2 = silne)
# - nowe hasło roota
# - usunięcie anonimowych użytkowników (Y)
# - wyłączenie zdalnego logowania root (Y)
# - usunięcie bazy test (Y)
# - reload uprawnień (Y)

# Sprawdzenie wersji
mysql --version
# Tworzenie bazy i użytkownika dla aplikacji
mysql -u root -p

CREATE DATABASE moja_aplikacja CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'silne-haslo-bazy';
GRANT ALL PRIVILEGES ON moja_aplikacja.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Krok 3: Instalacja PHP

# PHP 8.2 z najpopularniejszymi modułami
apt install -y php8.2 php8.2-cli php8.2-fpm \
    php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring \
    php8.2-xml php8.2-zip php8.2-intl php8.2-bcmath

# Sprawdzenie wersji
php --version

# Moduł Apache dla PHP (mod_php)
apt install -y libapache2-mod-php8.2

# Restart Apache
systemctl restart apache2

Krok 4: Apache Virtual Host

Każda domena powinna mieć własny plik VirtualHost w /etc/apache2/sites-available/:

# /etc/apache2/sites-available/moja-domena.pl.conf

<VirtualHost *:80>
    ServerName moja-domena.pl
    ServerAlias www.moja-domena.pl
    DocumentRoot /var/www/moja-domena.pl/public

    <Directory /var/www/moja-domena.pl/public>
        AllowOverride All          # zezwól na .htaccess
        Require all granted
        Options -Indexes           # wyłącz listowanie katalogów
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/moja-domena-error.log
    CustomLog ${APACHE_LOG_DIR}/moja-domena-access.log combined
</VirtualHost>
# Utwórz katalog i ustaw uprawnienia
mkdir -p /var/www/moja-domena.pl/public
chown -R www-data:www-data /var/www/moja-domena.pl

# Aktywacja VirtualHost
a2ensite moja-domena.pl.conf

# Wyłączenie domyślnej konfiguracji (opcjonalne)
a2dissite 000-default.conf

# Włącz mod_rewrite (wymagany przez WordPress)
a2enmod rewrite

# Sprawdzenie konfiguracji
apache2ctl configtest

# Przeładowanie Apache
systemctl reload apache2

PHP-FPM z mpm_event (wydajność)

Domyślna konfiguracja Apache używa mod_php z mpm_prefork — stara architektura, która tworzy nowy proces na każde połączenie. Lepszym rozwiązaniem jest mpm_event + PHP-FPM:

# Przełącz z prefork na event
a2dismod php8.2 mpm_prefork
a2enmod mpm_event proxy_fcgi setenvif

# Włącz PHP-FPM handler
a2enconf php8.2-fpm

# Uruchom PHP-FPM
systemctl enable php8.2-fpm
systemctl start php8.2-fpm

# Restart Apache
systemctl restart apache2

# Sprawdzenie czy PHP-FPM jest aktywny
systemctl status php8.2-fpm

Testowanie instalacji PHP

# Utwórz testowy plik PHP
echo "<?php phpinfo(); ?>" > /var/www/moja-domena.pl/public/info.php

# Otwórz http://moja-domena.pl/info.php
# Powinnaś zobaczyć stronę z informacjami o PHP

# Po teście USUŃ plik — ujawnia konfigurację serwera!
rm /var/www/moja-domena.pl/public/info.php

Bezpieczeństwo Apache

# /etc/apache2/conf-available/security.conf

# Ukryj wersję Apache
ServerTokens Prod
ServerSignature Off

# Wyłącz TRACE (ochrona przed XST)
TraceEnable Off

# Nagłówki bezpieczeństwa
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
# Włącz moduł headers (dla nagłówków bezpieczeństwa)
a2enmod headers
systemctl reload apache2

LAMP vs LEMP — kiedy co wybrać

Cecha LAMP (Apache) LEMP (Nginx)
.htaccess Pełne wsparcie Brak (trzeba przepisać na server block)
Wydajność statycznych plików Dobra Lepsza
Zużycie RAM Wyższe (prefork) Niższe (event-driven)
WordPress Działa natywnie Wymaga konfiguracji fastcgi
Dokumentacja i support Bardzo duże community Duże community

Najczęstsze pytania

Czym jest LAMP stack? +
LAMP to akronim od: Linux (system operacyjny), Apache (serwer HTTP), MySQL/MariaDB (baza danych) i PHP (język skryptowy). To najpopularniejszy stos technologiczny do hostowania aplikacji webowych — używany przez WordPress, Drupal, Joomla i miliony innych aplikacji PHP. Działa na większości dystrybucji Linuxa i jest domyślnym stackiem na wielu hostingach współdzielonych.
Jaka jest różnica między LAMP a LEMP? +
LEMP zastępuje Apache serwerem Nginx (stąd "E" — wymawiane "engine-x"). Nginx jest szybszy przy obsłudze wielu równoczesnych połączeń i plików statycznych, zużywa mniej RAM niż Apache. Jednak Apache ma lepsze wsparcie dla .htaccess (przydatne dla WordPress/starych aplikacji). LAMP sprawdza się lepiej dla prostych migracji i aplikacji z rozbudowanym .htaccess; LEMP dla nowych projektów i dużego ruchu.
Jak skonfigurować wiele domen na jednym serwerze Apache? +
Użyj Apache Virtual Hosts. Utwórz plik /etc/apache2/sites-available/domena.conf z sekcją VirtualHost zawierającą ServerName, DocumentRoot i logi. Aktywuj przez a2ensite domena.conf, dezaktywuj domyślny przez a2dissite 000-default.conf, przeładuj Apache. Każda domena ma własny katalog i logi. DocumentRoot to katalog z plikami strony (np. /var/www/domena.pl/public).
Jak zabezpieczyć instalację MySQL na serwerze produkcyjnym? +
Po instalacji uruchom mysql_secure_installation — kreator zadaje pytania: ustawienie hasła roota, usunięcie anonimowych użytkowników, wyłączenie zdalnego logowania root, usunięcie testowej bazy danych. Odpowiedz Yes na wszystkie pytania na serwerze produkcyjnym. Dodatkowo: twórz dedykowane konta dla każdej aplikacji z minimalnymi uprawnieniami (GRANT SELECT, INSERT, UPDATE, DELETE ON baza.* TO user@localhost), nigdy nie używaj root w aplikacji.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.