Jak zainstalować stos Linux, Nginx, MySQL, PHP (LEMP) na Ubuntu: Kompletny przewodnik
Stos LEMP — akronim od Linux, Nginx, MySQL i PHP — to jedna z najczęściej stosowanych konfiguracji serwerów internetowych do zasilania dynamicznych stron internetowych i wysokowydajnych aplikacji webowych. Łącząc solidną stabilność Linux, błyskawiczną szybkość Nginx, solidne możliwości zarządzania danymi MySQL i wszechstronność PHP, stos LEMP zapewnia potężne, skalowalne i efektywne pod względem zasobów środowisko hostingowe.
Niezależnie od tego, czy wdrażasz osobisty blog, stronę biznesową czy złożoną aplikację korporacyjną, prawidłowo skonfigurowany stos LEMP zapewnia lepszą skalowalność, szybsze czasy ładowania stron i efektywne zarządzanie pamięcią — szczególnie w warunkach dużego ruchu.
Jeśli potrzebujesz niezawodnej podstawy do uruchomienia tego stosu, VPS Hosting AlexHost zapewnia wysokowydajne serwery wirtualne oparte na Linux z pełnym dostępem root, dając Ci pełną kontrolę nad każdym komponentem Twojego środowiska LEMP. Połącz to z Certyfikatem SSL, aby zabezpieczyć swoją aplikację od pierwszego dnia.
W tym kompleksowym przewodniku przeprowadzimy Cię przez każdy krok instalacji i konfiguracji pełnego stosu LEMP na serwerze Ubuntu — od przygotowania systemu do testowania Twojego aktywnego środowiska PHP.
1. Wymagania wstępne
Przed rozpoczęciem upewnij się, że masz następujące elementy:
- Serwer z systemem Ubuntu 18.04, 20.04 lub 22.04 LTS
- Konto użytkownika z uprawnieniami sudo
- Dostęp SSH lub bezpośredni dostęp do terminala serwera
- Zarejestrowaną nazwę domeny (opcjonalnie, ale zalecane dla wdrożeń produkcyjnych — możesz ją zarejestrować za pośrednictwem Rejestracji Domen AlexHost)
> Wskazówka Pro: Dla czystego, izolowanego środowiska z gwarantowanymi zasobami, plan Hosting VPS jest idealnym punktem wyjścia dla każdego wdrożenia LEMP.
2. Aktualizuj swój system
Przed zainstalowaniem jakichkolwiek pakietów, kluczowe jest odświeżenie indeksu pakietów i zastosowanie wszystkich oczekujących aktualizacji. Zapewnia to pracę z najnowszymi, najbezpieczniejszymi wersjami całego oprogramowania.
Otwórz terminal i uruchom:
sudo apt update && sudo apt upgrade -yTa komenda aktualizuje lokalną bazę danych pakietów i uaktualnia wszystkie zainstalowane pakiety do ich najnowszych dostępnych wersji.
3. Zainstaluj Nginx
Nginx (wymawiane “engine-x”) to wysokowydajny, oparty na zdarzeniach serwer WWW i odwrotny proxy. W przeciwieństwie do Apache, Nginx obsługuje jednoczesne połączenia przy minimalnym zużyciu pamięci, co czyni go preferowanym wyborem dla środowisk o wysokim ruchu.
Krok 1: Zainstaluj Nginx
sudo apt install nginx -yKrok 2: Uruchom i włącz Nginx
Po instalacji uruchom usługę Nginx i skonfiguruj ją do automatycznego uruchamiania przy starcie systemu:
sudo systemctl start nginx
sudo systemctl enable nginxKrok 3: Sprawdź, czy Nginx działa
Sprawdź status usługi, aby potwierdzić, że Nginx jest aktywny:
sudo systemctl status nginxPowinieneś zobaczyć dane wyjściowe wskazujące, że usługa jest aktywna (uruchomiona). Możesz również otworzyć przeglądarkę internetową i przejść do adresu IP serwera:
http://your_server_ipJeśli Nginx działa prawidłowo, zostaniesz powitany domyślną stroną “Welcome to nginx!”.
Krok 4: Skonfiguruj zaporę (jeśli dotyczy)
Jeśli masz włączoną zaporę UFW (Uncomplicated Firewall), zezwól na ruch HTTP i HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw status4. Zainstaluj MySQL
MySQL to potężny, otwartoźródłowy relacyjny system zarządzania bazami danych (RDBMS), który stanowi podstawę danych dla większości dynamicznych aplikacji internetowych, w tym WordPress, Joomla i niestandardowych aplikacji PHP.
Krok 1: Zainstaluj serwer MySQL
sudo apt install mysql-server -yKrok 2: Zabezpiecz instalację MySQL
Po zainstalowaniu uruchom wbudowany skrypt wzmacniania bezpieczeństwa. Ten skrypt pomaga ustawić silne hasło root, usunąć użytkowników anonimowych, wyłączyć zdalne logowanie root i usunąć testową bazę danych:
sudo mysql_secure_installationZostaniesz poproszony o odpowiedź na serię pytań. Zalecane odpowiedzi dla serwera produkcyjnego to:
| Pytanie | Zalecana odpowiedź |
|---|---|
| Skonfigurować komponent VALIDATE PASSWORD? | Tak |
| Poziom polityki walidacji hasła | 2 (STRONG) |
| Usunąć użytkowników anonimowych? | Tak |
| Zabronić zdalnemu logowaniu root? | Tak |
| Usunąć testową bazę danych? | Tak |
| Przeładować tabele uprawnień? | Tak |
Krok 3: Sprawdź, czy MySQL jest uruchomiony
sudo systemctl status mysqlKrok 4: Zaloguj się do MySQL (opcjonalna weryfikacja)
sudo mysql -u root -pWpisz hasło root po wyświetleniu monitu. Wpisz exit aby opuścić powłokę MySQL.
5. Zainstaluj PHP
PHP (Hypertext Preprocessor) to język skryptowy po stronie serwera, który przetwarza zawartość dynamiczną i komunikuje się z MySQL, aby serwować strony internetowe oparte na danych. Podczas korzystania z Nginx, PHP jest obsługiwany przez PHP-FPM (FastCGI Process Manager), który przetwarza żądania PHP niezależnie od serwera internetowego w celu poprawy wydajności.
Krok 1: Zainstaluj PHP-FPM i rozszerzenie MySQL
sudo apt install php-fpm php-mysql -yMożesz również zainstalować powszechnie używane rozszerzenia PHP dla szerszej kompatybilności aplikacji:
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -yKrok 2: Skonfiguruj PHP-FPM dla bezpieczeństwa
Otwórz plik konfiguracyjny PHP-FPM. Zastąp 8.1 zainstalowaną wersją PHP (sprawdź za pomocą php -v):
sudo nano /etc/php/8.1/fpm/php.iniZlokalizuj dyrektywę cgi.fix_pathinfo i ustaw ją na 0 aby zapobiec krytycznej luce w zabezpieczeniach:
cgi.fix_pathinfo=0> Dlaczego to jest ważne: Jeśli cgi.fix_pathinfo jest ustawione na 1, PHP będzie próbować wykonać najbliższy plik, który może znaleźć, jeśli żądany plik PHP nie istnieje. To zachowanie może być wykorzystane przez atakujących do wykonania dowolnego kodu.
Zapisz i zamknij plik (Ctrl+X, następnie Y, następnie Enter).
Krok 3: Uruchom ponownie PHP-FPM
Zastosuj zmiany konfiguracji, uruchamiając ponownie usługę PHP-FPM:
sudo systemctl restart php8.1-fpm6. Konfiguracja Nginx do przetwarzania PHP
Domyślnie Nginx nie wie, jak obsługiwać pliki PHP. Musisz utworzyć blok serwera (odpowiednik wirtualnego hosta Apache w Nginx), który instruuje Nginx, aby przekazywał żądania PHP do PHP-FPM do przetworzenia.
Krok 1: Utwórz katalog główny witryny
Utwórz katalog, w którym będą przechowywane pliki Twojej witryny:
sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainZastąp your_domain swoją rzeczywistą nazwą domeny lub opisową nazwą projektu.
Krok 2: Utwórz nowy blok serwera Nginx
Utwórz nowy plik konfiguracyjny Nginx dla Twojej witryny:
sudo nano /etc/nginx/sites-available/your_domainDodaj następujący blok konfiguracyjny. Uważnie przeczytaj komentarze wbudowane — wyjaśniają, co robi każda dyrektywa:
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain; # Replace with your domain or server IP
root /var/www/your_domain; # Document root — where your files live
index index.php index.html index.htm; # Default files to serve
# Handle all requests; return 404 if file not found
location / {
try_files $uri $uri/ =404;
}
# Pass PHP scripts to PHP-FPM for processing
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Adjust PHP version as needed
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Deny access to hidden files (e.g., .htaccess)
location ~ /.ht {
deny all;
}
}> Ważne: Zastąp your_domain swoją rzeczywistą nazwą domeny i dostosuj php8.1-fpm.sock do zainstalowanej wersji PHP.
Krok 3: Włącz blok serwera
Utwórz dowiązanie symboliczne z sites-available do sites-enabled w celu aktywacji konfiguracji:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Aby uniknąć potencjalnego problemu z pamięcią hash bucket, dobrą praktyką jest otwarcie głównej konfiguracji Nginx i upewnienie się, że dyrektywa server_names_hash_bucket_size jest odkomentowana:
sudo nano /etc/nginx/nginx.confZnajdź i odkomentuj:
server_names_hash_bucket_size 64;Krok 4: Przetestuj konfigurację Nginx
Przed ponownym uruchomieniem Nginx zawsze przetestuj konfigurację pod kątem błędów składni:
sudo nginx -tJeśli dane wyjściowe pokazują:
nginx: configuration file /etc/nginx/nginx.conf test is successfulMożesz przystąpić dalej.
Krok 5: Uruchom ponownie Nginx
Zastosuj wszystkie zmiany, uruchamiając ponownie usługę Nginx:
sudo systemctl restart nginx7. Utwórz i przetestuj plik PHP Info
Aby potwierdzić, że Nginx prawidłowo przekazuje żądania PHP do PHP-FPM, utwórz prosty plik testowy PHP w katalogu głównym dokumentów.
Krok 1: Utwórz plik PHP Info
sudo nano /var/www/your_domain/info.phpDodaj następującą zawartość:
<?php
phpinfo();
?>Zapisz i zamknij plik.
Krok 2: Uzyskaj dostęp do strony PHP Info
Otwórz przeglądarkę internetową i przejdź do:
http://your_domain/info.phpLub, jeśli nie skonfigurowałeś jeszcze domeny:
http://your_server_ip/info.phpPowinieneś zobaczyć stronę informacji PHP — szczegółowy przegląd instalacji PHP, załadowanych modułów, wartości konfiguracyjnych i zmiennych środowiskowych. To potwierdza, że wszystkie trzy komponenty (Nginx, PHP-FPM i MySQL) pracują razem prawidłowo.
Krok 3: Usuń plik PHP Info (Krytyczny krok bezpieczeństwa)
Po potwierdzeniu, że wszystko działa, usuń plik info.php natychmiast. Ten plik ujawnia wrażliwe szczegóły konfiguracji serwera, które mogą być wykorzystane przez złośliwych aktorów:
sudo rm /var/www/your_domain/info.php8. Następne kroki: Wzmocnij i zoptymalizuj stos LEMP
Mając stos LEMP uruchomiony i działający, rozważ następujące dodatkowe kroki, aby przygotować serwer do produkcji:
Włącz HTTPS za pomocą bezpłatnego certyfikatu SSL
Zabezpiecz swoją witrynę szyfrowaniem TLS/SSL przy użyciu Certbot i Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domainAlternatywnie, zapoznaj się z Certyfikatami SSL AlexHost dla premium, komercyjnie zweryfikowanych certyfikatów, które zapewniają wyższe poziomy zaufania dla aplikacji biznesowych i e-commerce.
Zoptymalizuj wydajność Nginx
Dodaj następujące dyrektywy do konfiguracji Nginx, aby poprawić wydajność:
# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}Skonfiguruj dedykowanego użytkownika MySQL
Unikaj używania konta root MySQL dla swoich aplikacji. Utwórz dedykowanego użytkownika bazy danych z ograniczonymi uprawnieniami:
CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;Rozważ panel sterowania dla łatwiejszego zarządzania
Jeśli wolisz graficzny interfejs do zarządzania stosem LEMP, hostami wirtualnymi Nginx, bazami danych i kontami e-mail, rozważ wdrożenie panelu sterowania. AlexHost oferuje VPS z cPanel i szereg innych Paneli sterowania VPS, aby uprościć administrację serwerem bez poświęcania wydajności lub kontroli.
9. Podsumowanie
Pomyślnie zainstalowałeś i skonfigurowałeś kompletny stos LEMP (Linux, Nginx, MySQL, PHP) na swoim serwerze Ubuntu. Oto krótkie podsumowanie tego, co osiągnąłeś:
- ✅ Nginx zainstalowany, uruchomiony i skonfigurowany jako serwer WWW
- ✅ MySQL zainstalowany i zabezpieczony za pomocą skryptu hartowania
- ✅ PHP-FPM zainstalowany z konfiguracją skoncentrowaną na bezpieczeństwie
- ✅ Blok serwera Nginx skonfigurowany do kierowania żądań PHP do PHP-FPM
- ✅ Przetwarzanie PHP zweryfikowane za pośrednictwem strony testowej
phpinfo()
Ten stos zapewnia gotową do produkcji podstawę do hostowania praktycznie dowolnej aplikacji opartej na PHP — od WordPress i Laravel po platformy zbudowane na zamówienie. Kombinacja architektury sterowanej zdarzeniami Nginx i zarządzania procesami PHP-FPM sprawia, że jest szczególnie dobrze dostosowany do obciążeń o wysokiej współbieżności.
Aby uzyskać najlepszą wydajność i niezawodność, hostuj swój stos LEMP w dedykowanym środowisku Linux. Plany VPS Hosting AlexHost oferują magazyn wspierany przez SSD, gwarantowaną RAM, pełny dostęp root i wsparcie techniczne 24/7 — wszystko, czego potrzebujesz do uruchomienia szybkiej, bezpiecznej i skalowalnej aplikacji internetowej.
Pamiętaj, aby regularnie aktualizować wszystkie komponenty, monitorować dzienniki serwera i wdrażać zaporę sieciową oraz system wykrywania włamań w ramach bieżącej postawy bezpieczeństwa.
na wszystkich usługach hostingowych