Zestaw oprogramowania LEMP jest grupą programów wykorzystywanych do obsługi dynamicznych stron oraz aplikacji internetowych. Jest to skrót opisujący system operacyjny Linux z serwerem www Nginx. Dane w tej paczce znajdują się w bazie danych MySQL, a ich dynamiczne przetwarzanie jest obsługiwane przez PHP.
Pokażemy Ci jak zainstalować zestaw LEMP na serwerze Ubuntu 16.04. System operacyjny Ubuntu od razu się aktywuje, a instalacje i uruchomienie innych komponentów opiszemy poniżej.
Na początek powinieneś mieć zwykłe konto użytkownika innego niż root na serwerze z uprawnieniami sudo
.
Po uzyskaniu namiarów użytkownika – zaloguj się na serwerze poprzez jego nazwę użytkownika i hasło/klucz. Zaczniemy.
Instalowanie serwera www Nginx
Wykorzystanie nowoczesnego, wydajnego serwera Nginx pozwoli na wyświetlenie stron internetowych dla naszych gości.
Oprogramowanie, którego użyjemy, pochodzi bezpośrednio z repozytorium domyślnych pakietów Ubuntu. Tak więc, możemy użyć apt
z menadżerów pakietów w celu zakończenia instalacji.
Z uwagi na fakt, że jest to pierwsze użycie apt
w tej sesji powinniśmy zacząć od aktualizacji lokalnych indeksów. Następnie możemy przystąpić do instalacji serwera www:
sudo apt-get update
sudo apt-get install nginx
Na Ubuntu 16.04 Nginx jest tak skonfigurowany, aby rozpocząć pracę podczas instalacji.
Jeżeli masz uruchomiony firewall ufw
, musisz zezwolić na połączenie się z Nginx. Nginx samodzielnie wpisze się do ufw
podczas instalacji, co znacznie upraszcza procedurę.
Powinieneś włączyć najbardziej restrykcyjny profil pozwalający na stały ruch. Z uwagi na fakt, że jeszcze nie skonfigurowaliśmy SSL dla naszego serwera, musimy jedynie umożliwić ruch na porcie 80.
Zrobisz to w następujący sposób:
sudo ufw allow 'Nginx HTTP'
Zmiany sprawdzisz wpisując:
sudo ufw status
Sprawdź też dozwolony ruch HTTP w wyświetlonym poniżej miejscu:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Dodanie nowej reguły do zapory sieciowej pozwoli na weryfikację, czy serwer został uruchomiony i czy działa on poprzez dostępną domenę serwera lub publiczny adres IP na Twojej przeglądarce internetowej.
Jeżeli nie masz przydzielonej domeny na serwerze i nie znasz swojego publicznego adresu IP, możesz to znaleźć wpisując następne polecenie w swoim terminale:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Pozwoli to na wydrukowanie kilku adresów IP. Możesz sprawdzić każdy z nich po kolei w swojej przeglądarce.
Alternatywą jest sprawdzenie, który adres IP jest dostępny i widoczny z innych miejsc w Internecie:
curl -4 icanhazip.com
Wpisz jeden z adresów, który otrzymałeś ze swojej przeglądarki. W tym celu powinieneś przejść do domyślnej strony docelowej Nginx:
http://domena_serwera_czy_IP
Jeżeli widzisz wyżej przedstawioną stronę, to znaczy, że skutecznie zainstalowałeś Nginx.
Instalowanie MySQL w celu zarządzania danymi strony
Teraz, gdy mamy serwer WWW, musimy zainstalować MySQL, system zarządzania bazą danych przeznaczony do przechowywania i zarządzania danymi na naszej stronie.
Łatwo tego dokonasz poprzez wpisanie:
sudo apt-get install mysql-server
Zostaniesz poproszony o hasło root (administracyjne), którego będziesz używać w ramach systemu MySQL.
Oprogramowanie bazy danych MySQL zostało już zainstalowane, lecz jego konfiguracja nie jest jeszcze kompletna.
W celu zabezpieczenia instalacji możemy uruchomić prosty skrypt bezpieczeństwa, który spyta, czy chcemy zmodyfikować niektóre niebezpieczne wartości domyślne. Odpal skrypt wpisując:
sudo mysql_secure_installation
Zostaniesz poproszony o wpisanie hasła stworzonego dla konta root MySQL.
Następnie zostaniesz zapytany, czy chcesz skonfigurować VALIDATE PASSWORD PLUGIN.
Uwaga: Włączenie wspomnianej funkcji pozostawiamy do Twojej decyzji. Jeżeli opcja zostanie włączona, to hasła, które nie pasują do podanych kryteriów, zostaną odrzucone przez MySQL z błędem. Będzie to powodować problemy, jeżeli używasz słabego hasła w połączeniu z oprogramowaniem, które automatycznie konfiguruje poświadczenia użytkownika MySQL, na przykład pakiety instalacyjne phpMyAdmin. Bezpiecznie będzie pozostawić walidację wyłączoną, jednak zawsze powinieneś używać mocnych, unikatowych haseł do uwierzytelnień bazy danych.
Odpowiedz y dla tak, lub inny przycisk w celu kontynuacji bez uruchomienia tego polecenia.
VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No:
Jeżeli zdecydowałeś się na kontrolę bezpieczeństwa, zostaniesz poproszony o wybranie poziomu weryfikacji hasła. Pamiętaj, że po wpisaniu 2 dla najsilniejszego poziomu, będziesz otrzymywać błędy podczas próby ustawienia hasła, które nie zawiera numerów, dużych i małych liter, a także znaków specjalnych lub bazujących się na ogólnych słowach słownikowych.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Po włączeniu kontroli hasła dostaniesz upomnienie dotyczące istniejącego hasła root oraz zostaniesz zapytany, czy chcesz zmienić to hasło. Jeżeli dotychczasowe hasło Ci pasuje, wpisz n dla „nie” w wierszu:
Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Dla reszty pytań przyciśnij Y oraz klawisz Enter w każdym wierszu. Spowoduje to usunięcie niektórych anonimowych użytkowników oraz testowej bazy danych, wyłączenie zdalnego hasła root oraz załadowanie nowych reguł, tak aby MySQL od razu przyjął wprowadzone zmiany.
Gratulacje! Twój system bazy danych został zainstalowany.
Instalowanie PHP dla przetwarzania danych
Teraz mamy zainstalowany Nginx, który obsługuje naszą stronę, oraz MySQL przeznaczony do przechowywania i zarządzania danymi. Jednak wciąż nie mamy niczego, co mogłoby generować dynamiczną zawartość strony. W tym celu możemy użyć PHP.
Z uwagi na to, że Nginx nie posiada wewnętrznego procesora PHP jak na innych serwerach internetowych, będziemy musieli zainstalować php-fpm
będący skrótem od “fastCGI process manager”. Polecimy Nginx przekazywać żądania PHP do wspomnianego oprogramowania w celu przetwarzania.
Zainstalujmy ten moduł i pobierzmy dodatkowy pakiet pomocniczy, który pozwoli PHP komunikować się z działającą w tle bazą danych. Instalacja wciągnie niezbędne jądrowe pliki PHP. Dokonaj tego poprzez wpisanie:
sudo apt-get install php-fpm php-mysql
Konfigurowanie procesora PHP
Teraz mamy zainstalowane komponenty PHP. Niemniej jednak musimy dokonać niewielkiej zmiany konfiguracji w celu lepszego zabezpieczenia naszych ustawień.
Otwórz główny plik konfiguracyjny php-fpm
z uprawnieniami root:
sudo nano /etc/php/7.0/fpm/php.ini
W tym pliku interesują nas parametry ustawiające cgi.fix_pathinfo
. Będzie to skomentowane ze średnikiem (;) oraz ustawione domyślne na „1”.
Jest to dość niebezpieczne ustawienie ponieważ nakazuje PHP spróbować uruchomić najbliższy znaleziony plik, jeżeli wymaganego przez PHP pliku nie udaje się znaleźć. Przede wszystkim pozwoli to użytkownikom tworzyć żądania PHP w sposób pozwalający im na wykonywanie skryptów, co nie powinno być dozwolone.
Zmienimy obydwa te warunki odkomentowując wiersz i ustawiając go na „0” w następujący sposób:
cgi.fix_pathinfo=0
Zapisz i zamknij plik.
Teraz musimy jedynie zrestartować procesor PHP wprowadzając:
sudo systemctl restart php7.0-fpm
Pozwoli to na zastosowanie wprowadzonych zmian.
Konfiguracja Nginx w celu użycia procesora PHP
Tak więc zainstalowaliśmy wszystkie niezbędne komponenty. Jedyną konfiguracją, której potrzebujemy jest zlecenie Nginx wykorzystania naszego procesora PHP dla dynamicznej zawartości.
Dokonamy tego na poziomie bloku serwera (bloki serwera są takie same jak w przypadku wirtualnego hostu Apache). Otwórz domyślny konfiguracyjny plik bloku serwera Nginx wprowadzając:
sudo nano /etc/nginx/sites-available/default
Teraz, po usunięciu komentarzy, domyślny plik bloku serwera Nginx wygląda następująco:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } }
Dla naszej strony musimy dokonać kilku zmian w tym pliku
- Po pierwsze, musimy dodać
index.php
jako pierwszą wartość naszej dyrektywyindex
, tak by plik o nazwieindex.php
był obsługiwany, kiedy będzie tego wymagać katalog. - Możemy zmodyfikować dyrektywę
server_name
w celu wskazania domeny naszego serwera lub publicznego adresu IP. - Dla aktualnego przetwarzania PHP musimy jedynie odkomentować segment pliku obsługującego żądania PHP. Będzie to blok lokalizacji
location ~\.php$
, zawarty urywekfastcgi-php.conf
oraz gniazdo związane zphp-fpm
. - Odkomentujemy też blok lokalizacji współdziałający z plikami
.htaccess
. Nginx nie przetwarza tych plików. Jeżeli któremukolwiek z tych plików udało się znaleźć drogę do dokumentu root, nie powinny one być przedstawiane odwiedzającym.
Zmiany, których powinieneś dokonać, są zaznaczone na czerwono:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; nazwa_serwera adresa_IP; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } location ~ /\.ht { deny all; } }
Po dokonaniu powyższych zmian, zachowaj i zamknij plik.
Sprawdź swój plik konfiguracyjny w zakresie błędów syntaktycznych wpisując:
sudo nginx -t
Po wykryciu jakichkolwiek błędów, powróć i sprawdź ponownie swój plik.
Kiedy będziesz gotowy, uruchom ponownie Nginx w celu wprowadzenia niezbędnych zmian:
sudo systemctl reload nginx
Stworzenie pliku PHP w celu przetestowania konfiguracji
Twój LEMP powinien teraz być w pełni skonfigurowany. Możemy go przetestować, aby potwierdzić, że Nginx może poprawnie przekazywać pliki .php
do naszego procesora PHP.
Dokonamy tego poprzez stworzenie testowego pliku PHP w naszym dokumencie root.
Otwórz nowy plik o nazwie info.php
w domencie root w Twoim redaktorze tekstowym:
sudo nano /var/www/html/info.php
Wpisz lub wklej poniższe wiersze do nowego pliku. Jest to poprawny kod PHP, który zwraca informacje dotyczące naszego serwera:
<?php phpinfo(); ?>
Po zakończeniu, zachowaj i zamknij plik.
Teraz możesz odwiedzić tą stronę na twojej przeglądarce internetowej poprzez odwiedzenie domeny Twojego serwera lub publicznego adresu IP z końcówką /info.php
:
http://domena_serwera_czy_IP/info.php
Powinieneś zobaczyć stronę internetową, która została wygenerowana przez PHP z informacjami dotyczącymi Twojego serwera:
Jeżeli widzisz podobną stronę, to znaczy, że skutecznie ustawiłeś przetwarzanie PHP z Nginx.
Po upewnieniu się, że Nginx odtwarza stronę poprawnie, najlepiej będzie jak usuniesz stworzony plik, ponieważ może on udostępnić nieautoryzowanym użytkownikom niektóre wskazówki dotyczące twoich konfiguracji, co pozwali na ich złamanie. Zawsze możesz wygenerować ten plik później w razie konieczności.
Usuń plik wpisując:
sudo rm /var/www/html/info.php
Podsumowanie
Gratulacje! Teraz masz skonfigurowany LEMP na serwerze Ubuntu 16.04. To daje bardzo elastyczną podstawę do przedstawienia treści internetowych dla odwiedzających. Zamówić serwer VPS na dyskach SSD aby przetestować i uruchomić swoją witrynę możesz u nas.
Comments 2 komentarze
Fragli
Super artykuł - gratuluje.
W końcówce troszkę namieszałeś w dwóch miejscach wiec proszę popraw dla potomnych :
piszesz o stworzeniu pliku info.php a w dalszej czasci odwołujesz się do i.php, oraz w jego zawartości brak poprawnego zamknięcia ?>
admin
Super, że się przydał :)
Dziękuję bardzo za uwagi, poprawione!