 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  LAMP Stack — instalacja i konfiguracja na Ubuntu

# 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.

Contabo

VPS z dużym RAM — idealny do LAMP Stack z kilkoma aplikacjami WordPress

VPS LAMP

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

LH.pl

Hosting z gotowym LAMP Stack — bez konfiguracji serwera, Apache+PHP+MySQL w pakiecie

Managed LAMP

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

CyberFolks

LiteSpeed hosting — wydajniejsza alternatywa dla Apache z pełnym wsparciem PHP

LiteSpeed

[Aktywuj rabat →](/out/cyberfolks)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/cyberfolks)

## Powiązane strony

-   [LEMP Stack — Nginx + MySQL + PHP na Ubuntu](/baza-wiedzy/lemp-stack-konfiguracja)
-   [PHP-FPM — konfiguracja i optymalizacja](/baza-wiedzy/php-fpm-konfiguracja-optymalizacja)
-   [MySQL Slow Query Log — optymalizacja zapytań](/baza-wiedzy/mysql-slow-query-log)
-   [SSL Let's Encrypt — automatyzacja](/baza-wiedzy/ssl-lets-encrypt-automatyzacja)
-   [WordPress Multisite — konfiguracja](/baza-wiedzy/wordpress-multisite-konfiguracja)
-   [Wszystkie artykuły](/baza-wiedzy/)