25 maj

Instalowanie Linux, Nginx, MySQL, PHP (zestaw LEMP) w systemie Ubuntu 16.04

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

nginx_default[1] - zestaw lemp

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:

/etc/php/7.0/fpm/php.ini
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:

/etc/nginx/sites-available/default
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 dyrektywy index, tak by plik o nazwie index.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 urywek fastcgi-php.conf oraz gniazdo związane z php-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:

/etc/nginx/sites-available/default
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:

/var/www/html/info.php
<?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:
php_info[1] - zestaw lemp

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.