Wprowadzenie
W świecie internetu kilka technologii łączy się, tworząc rozwiązanie, które umożliwia użytkownikom internetu dostęp do dynamicznych treści w sieci WWW. Stos LEMP jest jednym z takich rozwiązań. Łączy on cztery technologie, które tworzą kompletne rozwiązanie serwerowe dla wydajnych i dynamicznych stron internetowych. LEMP to akronim od Linux, Nginx, MySQL i PHP. Linux to serwerowy system operacyjny. Nginx (wymawiane jako Engine-X, stąd litera E w akronimie) to oprogramowanie serwera WWW. Następnie MySQL to system bazodanowy, który przechowuje dane stron internetowych i użytkowników. PHP to język skryptowy po stronie serwera do dynamicznego przetwarzania.
W tym poradniku dowiemy się, jak zainstalować i skonfigurować stos LEMP oraz sprawdzić, czy wszystko działa zgodnie z oczekiwaniami. Zaczynajmy!
Krok 1: Konfiguracja serwera z systemem Ubuntu 20.04
Ubuntu 20.04 to system operacyjny oparty na Linuksie. Istnieje kilka opartych na Linuksie serwerowych systemów operacyjnych, zarówno darmowych, jak i premium. Ten przewodnik skupia się na systemie Ubuntu 20.04, który jest darmowy i ma otwarte źródło. Ten krok realizuje pierwsze wymaganie z akronimu stosu LEMP, czyli L. Powinieneś posiadać rzeczywistą instalację Ubuntu 20.04 na swoim VPS, aby przejść do kolejnych kroków. Możesz postępować zgodnie z naszym przewodnikiem dotyczącym konfiguracji serwera Ubuntu. Opcjonalnie, jeśli chcesz postępować zgodnie z tym przewodnikiem na swoim lokalnym komputerze, możesz pobrać obraz instalacyjny serwera Ubuntu 20.04 bezpośrednio ze strony Ubuntu. Należy skonfigurować zwykłego użytkownika innego niż root z uprawnieniami sudo, ponieważ będziemy uruchamiać kilka poleceń wymagających uprawnień sudo.
Krok 2: Instalacja i konfiguracja serwera Nginx
Serwery WWW umożliwiają nam serwowanie treści, takich jak strony internetowe, odwiedzającym witrynę. Nginx to popularny serwer WWW, znajdujący się wśród pięciu najpopularniejszych otwartoźródłowych serwerów WWW preferowanych przez programistów. Ten krok realizuje drugie wymaganie w stosie LEMP, czyli E dla Nginx. Ubuntu posiada domyślne repozytorium pakietów, z którego będziemy pobierać pakiety do użycia w tym przewodniku. Ubuntu bazuje na Debianie, który do zarządzania pakietami wykorzystuje apt lub dpkg. W przypadku pakietów z domyślnego repozytorium będziemy używać apt.
Zgodnie z ogólną zasadą, przed rozpoczęciem jakiejkolwiek instalacji w systemie Linux należy uruchomić polecenie aktualizacji. Zacznij od wpisania w terminalu następującego polecenia:
|
1 |
sudo apt update |
Po zakończeniu aktualizacji możesz zainstalować Nginx za pomocą następującego polecenia:
|
1 |
sudo apt install nginx |
Po zakończeniu instalacji Nginx uruchamia się automatycznie. Następnym krokiem jest skonfigurowanie zapory sieciowej w celu zezwolenia na ruch. Ubuntu używa pakietu ufw (Uncomplicated Firewall) do konfiguracji zapór sieciowych. Po instalacji Nginx rejestruje się jako usługa w ufw. Ubuntu uruchamia usługę zapory sieciowej automatycznie przy rozruchu systemu, ale aby mieć pewność, wpisz następujące polecenie, aby ją włączyć:
|
1 |
sudo ufw enable |
Aby wyświetlić listę konfiguracji aplikacji, na które pozwala ufw, wpisz następujące polecenie:
|
1 |
sudo ufw app list |
Poniżej znajduje się zrzut ekranu przedstawiający wynik powyższego polecenia:

Jak widać, Nginx jest już zarejestrowany w ufw i posiada trzy profile, jak wyjaśniono poniżej:
- Nginx Full – otwiera zarówno port 80, jak i 443. Port 80 służy do normalnego/nieszyfrowanego ruchu, tj. HTTP. Port 443 służy do ruchu szyfrowanego TLS/SSL, tj. https.
- Nginx HTTP – otwiera tylko port 80 – ruch nieszyfrowany.
- Nginx HTTPS – otwiera tylko port 443 – ruch szyfrowany TLS/SSL.
Chociaż Nginx automatycznie rejestruje się w ufw, żaden ruch nie jest dozwolony do Twojego serwera, dopóki sam na to nie zezwolisz. Możesz zezwolić na wszystkie lub dowolne profile, jednak lepiej jest zezwolić na najbardziej restrykcyjny profil, który nadal będzie przepuszczał ruch skonfigurowany dla Twojego serwera WWW. Ponieważ w tym poradniku nie konfigurowaliśmy SSL, zezwolimy tylko na ruch HTTP na porcie 80. Jeśli jesteś ciekawy, mamy przewodnik dotyczący konfiguracji SSL na serwerze Nginx z Let's Encrypt przy użyciu Certbota.
Włączmy ruch na porcie 80, wprowadzając następujące polecenie:
|
1 |
sudo ufw allow 'Nginx HTTP' |
Aby zweryfikować, czy zmiana zakończyła się sukcesem, wpisz następujące polecenie:
|
1 |
sudo ufw status |

Powyższy wynik uruchomienia polecenia pokazuje, że ruch HTTP jest teraz dozwolony. Możesz sprawdzić, czy serwer działa, uzyskując dostęp do swojej domeny lub publicznego adresu IP serwera w przeglądarce. Jeśli nie skonfigurowałeś nazwy domeny i nie masz pewności co do publicznego adresu IP swojego serwera, możesz go znaleźć za pomocą curl uruchamiając następujące polecenie:
|
1 |
curl -4 icanhazip.com |
Skopiuj wynik powyższego polecenia, który jest Twoim publicznym adresem IP, do paska adresowego przeglądarki. Po załadowaniu strony zobaczysz domyślną stronę startową Nginx:

Powyższa strona wskazuje, że pomyślnie zainstalowałeś Nginx.
Krok 3: Instalacja systemu zarządzania bazą danych MySQL
Zarządzanie danymi to kluczowa część każdej dynamicznej strony internetowej. MySQL to system zarządzania bazą danych, który przechowuje dane witryny i zarządza nimi. Ten krok realizuje trzecie wymaganie w stosie LEMP, czyli M. Wprowadź następujące polecenie, aby zainstalować MySQL:
|
1 |
sudo apt install mysql-server |
Po zakończeniu instalacji MySQL musisz go skonfigurować, zanim będzie gotowy do użycia. Część konfiguracji obejmuje zabezpieczenie serwera bazy danych. MySQL zawiera skrypt, który poprowadzi Cię przez proces zabezpieczania i ustawiania haseł. Następujące polecenie uruchamia ten skrypt:
|
1 |
sudo mysql_secure_installation |

Skrypt zapyta, czy chcesz skonfigurować komponent VALIDATE PASSWORD, czy nacisnąć dowolną literę, aby kontynuować bez włączania tego komponentu.
Komponent VALIDATE PASSWORD to funkcja służąca do sprawdzania, czy hasło wprowadzone dla konkretnego użytkownika na serwerze bazy danych spełnia określone kryteria. Możesz go skonfigurować tak, aby sprawdzał takie elementy jak długość, znaki numeryczne, obecność wielkich lub małych liter itp. Jeśli nie jest włączony, możesz skonfigurować dowolne wybrane hasło. Jeśli jednak zostanie włączony, musisz użyć hasła zgodnego z określonymi kryteriami. Włączenie go może powodować problemy z pakietami, które automatycznie konfigurują dane uwierzytelniające użytkownika MySQL, takimi jak pakiet phpMyAdmin dla Ubuntu. To, czy go włączyć, czy nie, to kwestia osobistego wyboru. Twoja baza danych jest nadal bezpieczna, jeśli go nie włączysz, upewnij się tylko, że używasz silnych i unikalnych haseł.
Jeśli nacisnąłeś Y, aby włączyć ten komponent, skrypt poprosi Cię o wybranie poziomu walidacji hasła:

Skrypt oferuje 3 poziomy walidacji hasła. Poziom LOW (niski) wymaga, aby hasło składało się z co najmniej 8 znaków. Poziom MEDIUM (średni) wymaga, aby hasło składało się z co najmniej 8 znaków, które muszą być mieszanką wielkich liter, małych liter i znaków specjalnych. Poziom STRONG (silny) wymaga złożonego hasła składającego się z co najmniej 8 znaków, które muszą być mieszanką wielkich liter, małych liter, znaków specjalnych i słów, oraz nie może być oparte na popularnych słowach słownikowych, w przeciwnym razie wystąpią błędy. Wybierzmy poziom Low, wpisz 0 i naciśnij enter.
Skrypt poprosi Cię o wprowadzenie i ponowne wprowadzenie hasła:

Wpisz y i naciśnij enter, aby zaakceptować wpisane hasło jako hasło użytkownika root. Kolejne monity służą poprawie bezpieczeństwa serwera MySQL. Zaczynają się od usunięcia domyślnych anonimowych użytkowników, z którymi dostarczana jest każda instalacja MySQL, wyłączenia logowania roota z połączeń zdalnych oraz usunięcia testowych baz danych. Ostatni monit prosi o ponowne załadowanie tabeli uprawnień, aby polecenia odniosły skutek. Wpisz y i naciśnij enter przy wszystkich monitach:

Wstępna konfiguracja bezpieczeństwa została zakończona.
Możesz sprawdzić zainstalowaną wersję MySQL, uruchamiając polecenie:
|
1 |
sudo mysql –V |
Oto wersja, której używamy w tym samouczku:
![]()
W systemach Ubuntu z wersją MySQL 5.7 i nowszą, użytkownik root jest skonfigurowany do uwierzytelniania za pomocą wtyczki auth_socket, a nie hasła. Zapewnia to większe bezpieczeństwo, jednak może stanowić problem w przypadku zewnętrznych pakietów, takich jak phpMyAdmin. Jeśli wolisz kontynuować korzystanie z wtyczki auth_socket, przejdź do kroku 4.
Jeśli zamiast tego chcesz łączyć się za pomocą hasła, musisz skonfigurować metodę uwierzytelniania tak, aby korzystała z mysql_native_password.
Uruchom wiersz poleceń MySQL, wprowadzając następujące polecenie:
|
1 |
sudo mysql |
MySQL zawiera kilka domyślnych baz danych. Możesz wyświetlić listę domyślnych baz danych, wprowadzając w terminalu następujące zapytanie:
|
1 |
show databases; |

Baza danych o nazwie mysql przechowuje różne konfiguracje związane z MySQL. Ta baza danych zawiera tabelę o nazwie users, która zawiera szczegółowe informacje o użytkownikach oraz metodę uwierzytelniania dla każdego z nich. Możemy użyć zapytań SQL do pobierania, modyfikowania i usuwania informacji z tabeli. Wprowadź w terminalu następujące zapytanie, aby uzyskać szczegółowe informacje o tym, z jakiej metody uwierzytelniania korzysta każdy użytkownik:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

Powyższy wynik pokazuje, że użytkownik root faktycznie uwierzytelnia się za pomocą wtyczki auth_socket. Aby zmienić metodę uwierzytelniania dla użytkownika root, wprowadź w terminalu następujące polecenie. Pamiętaj, aby dostosować je do średniego poziomu siły hasła, który ustawiliśmy w poprzednim kroku, w przeciwnym razie wystąpi błąd:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
Po pomyślnym wykonaniu zapytania uruchom polecenie flush privileges, aby zmiany weszły w życie natychmiast:
|
1 |
FLUSH PRIVILEGES; |
Uruchom ponownie poniższe zapytanie select, aby sprawdzić, czy zmiany weszły w życie:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

Z wyniku wynika, że użytkownik root będzie teraz uwierzytelniał się za pomocą mysql_native_password. Możesz wyjść z wiersza poleceń mysql, wpisując exit i naciskając enter.
Możesz spróbować zalogować się za pomocą ustawionego hasła, wprowadzając następujące polecenie:
|
1 |
mysql -u root –p |
Wiersz poleceń poprosi Cię o hasło. Jeśli będzie poprawne, zobaczysz wiersz poleceń MySQL. Pomyślnie skonfigurowałeś swój serwer z MySQL. Następnie wyjdź z wiersza poleceń MySQL.
Krok 4: Instalacja PHP i konfiguracja Nginx do korzystania z procesora PHP
PHP to akronim od PHP: Hypertext Preprocessor. Jest to powszechnie stosowany język skryptowy o otwartym kodzie źródłowym, działający po stronie serwera, przeznaczony dla stron i aplikacji internetowych. PHP realizuje czwarte wymaganie w stosie LEMP. PHP pomaga w generowaniu dynamicznej zawartości na stronie internetowej. Może być używany jako pośrednik między stronami internetowymi a systemem bazy danych. Odczytuje dane z bazy danych i prezentuje je odwiedzającym Twoją stronę. Ponadto może wstawiać, aktualizować i usuwać dane z bazy danych.
Nginx nie posiada natywnych wtyczek do przetwarzania PHP, tak jak inne serwery WWW, dlatego musisz zainstalować php-fpm, aby przekazywać żądania z Nginx do PHP w celu przetworzenia. Najpierw dodaj repozytorium Ubuntu universe, które zawiera darmowe oprogramowanie o otwartym kodzie źródłowym utrzymywane przez społeczność Ubuntu. Wprowadź w terminalu następujące polecenie:
|
1 |
sudo add-apt-repository universe |
Następnie zainstaluj pakiet php-fpm wraz z pakietem pomocniczym php-mysql, aby umożliwić komunikację PHP z MySQL, używając następującego polecenia:
|
1 |
sudo apt install php-fpm php-mysql |
W momencie pisania tego poradnika wersja PHP instalowana za pomocą powyższego polecenia to 7.2.24. W związku z tym instaluje ona pakiet php-fpm7.2. Pamiętaj o tym podczas aktualizacji bloków serwera i upewnij się, że wpisujesz poprawną wersję, w przeciwnym razie Twoja strona się nie załaduje.
Możesz sprawdzić wersję PHP, wprowadzając następujące polecenie:
|
1 |
php -v |

W tym momencie wszystkie komponenty stosu LEMP zostały zainstalowane. Następnym krokiem jest skonfigurowanie serwera Nginx tak, aby kierował żądania do procesora PHP. W Nginx konfiguracja odbywa się wewnątrz bloków serwera. Bloki serwera są odpowiednikami wirtualnych hostów w Apache. Aby uzyskać więcej informacji, możesz zapoznać się z naszym poradnikiem dotyczącym bloków serwera Nginx.
Na potrzeby tego poradnika utwórzmy blok serwera dla domeny test.com o tej samej nazwie (możesz wybrać dowolną inną nazwę). Bloki serwera znajdują się w katalogu /etc/nginx/sites-available/. Użyj edytora nano, aby utworzyć plik bloku serwera, wprowadzając następujące polecenie:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
Wpisz następujący skrypt w pliku:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
Oto krótki opis działania poszczególnych dyrektyw:
- listen – definiuje port, na którym Nginx będzie nasłuchiwać. Port 80 jest portem domyślnym, jednak w przypadku skonfigurowania SSL należy wpisać 443.
- root – zawiera katalog, w którym będzie przechowywany katalog witryny.
- index – instruuje Nginx, aby traktował priorytetowo serwowanie plików index.php, jeśli są one dostępne na żądanie.
- server_name – definiuje nazwę bloku serwera, zawiera publiczny adres IP lub nazwę domeny Twojego serwera.
- location/ – pierwszy blok location zawiera dyrektywę try_files. Sprawdza ona istnienie plików pasujących do żądania URI, a jeśli ich nie znajdzie, zwracany jest błąd 404.
- location ~ \.php$ – ta dyrektywa obsługuje przetwarzanie PHP poprzez kierowanie żądań Nginx przez plik fastcgi-php.conf oraz plik php7.2-fpm.sock, który definiuje, jakie gniazdo powiązać z php-fpm. To polecenie sprawdza status php-fpm, określamy wersję jako 7.2, czyli taką, jaką posiadamy. Upewnij się, że sprawdzasz wersję, którą sam posiadasz:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – ta dyrektywa obsługuje pliki .htaccess, które nie są przetwarzane przez Nginx. Dyrektywa deny all zapewnia, że żaden plik htaccess nie zostanie udostępniony odwiedzającym.
Po dodaniu skryptu do pliku test.com naciśnij Ctrl + O, a następnie Enter, aby zapisać plik. Naciśnij Ctrl + X, aby zamknąć edytor.
Następnie musisz włączyć blok serwera, wprowadzając poniższe polecenie w celu utworzenia dowiązania symbolicznego do /etc/nginx/sites-enabled:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
Następnie odlinkuj domyślny blok serwera z sites-enabled, wprowadzając następujące polecenie:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
Przetestuj nową konfigurację, wprowadzając następujące polecenie:
|
1 |
sudo nginx -t |
Jeśli składnia jest poprawna, przeładuj Nginx za pomocą następującego polecenia:
|
1 |
sudo systemctl reload nginx |
Na tym etapie Twój stos LEMP został zainstalowany i skonfigurowany. W następnym kroku utworzymy plik testowy, aby upewnić się, że poszczególne komponenty łączą się prawidłowo.
Krok 5: Tworzenie pliku PHP w celu przetestowania stosu LEMP
W tym kroku utworzymy plik .php i uruchomimy go na serwerze Nginx, aby sprawdzić, czy działa poprawnie. Użyjemy globalnej funkcji phpinfo(), aby sprawdzić dostępne pakiety PHP. Wprowadź następujące polecenie, aby otworzyć plik .php w edytorze nano:
|
1 |
sudo nano /var/www/html/test.php |
W edytorze nano wpisz następujący fragment kodu:
|
1 |
<?php phpinfo(); |
Zapisz i zamknij plik. Aby odwiedzić nowo utworzoną stronę w przeglądarce, znajdź swoją domenę lub adres IP i przejdź do niego w następujący sposób:
|
1 |
http://your_server_domain_or_IP/test.php |
Powinieneś zobaczyć stronę z informacjami o PHP:

Powyższa strona pokazuje, że pomyślnie skonfigurowałeś Nginx. Ponieważ utworzony do testów plik zawiera szczegółowe informacje o Twoim serwerze, pamiętaj o jego usunięciu. Wprowadź następujące polecenie, aby usunąć plik:
|
1 |
sudo rm /var/www/html/test.php |
Jeśli w przyszłości zajdzie potrzeba przetestowania konfiguracji, zawsze możesz ponownie utworzyć ten plik.
Podsumowanie
W tym samouczku skonfigurowałeś stos LEMP na systemie Ubuntu 20.04, który jest jednym z najpotężniejszych dostępnych stosów do tworzenia aplikacji internetowych. Od tego momentu powinieneś być w stanie hostować niemal każdą stronę internetową, aplikacje webowe lub logikę serwerową dla swojej aplikacji mobilnej. Aby upewnić się, że Twoja witryna serwuje treści za pośrednictwem bezpiecznego połączenia SSL, polecamy zapoznanie się z naszym samouczkiem dotyczącym konfiguracji certyfikatów SSL na serwerze Nginx.
Miłego korzystania!
Komentarze
Brak komentarzy. Bądź pierwszy.