01 cze

Instalowanie Linux, Apache, MySQL, PHP (zestaw LAMP) w systemie Ubuntu 16.04

Zestaw oprogramowania „LAMP” jest grupą programów open source, które są zazwyczaj razem instalowane w celu uruchomienia serwera obsługującego dynamiczne strony www oraz aplikacje internetowe. Termin ten jest skrótem opisującym system operacyjny Linux wraz z serwerem www Apache. Dane strony znajdują się w bazie danych MySQL, a ich dynamiczne przetwarzanie jest obsługiwane przez PHP.

Pokażemy Ci jak zainstalować zestaw LAMP na serwerze VPS Ubuntu 16.04. Ubuntu spełni nasze pierwsze wymaganie: system operacyjny Linux.

Zaczynamy

Na początek powinieneś mieć zwykłe konto użytkownika, innego niż root, na serwerze z uprawnieniami sudo.

Instalowanie oraz dodanie Apache w zaporze sieciowej

Serwer Apache jest najpopularniejszym serwerem WWW na świecie. Jest dobrze udokumentowany, posiada szerokie spektrum zastosowania w Internecie, co czyni go doskonałym wyborem dla domyślnego hostingu strony www.

Serwer VPS w Hostovita zawiera darmowe Premium Wsparcie administratorów, które według zgłoszenia zainstalują potrzebne oprogramowanie 🙂

Możemy zainstalować Apache za pomocą menedżera pakietów Ubuntu apt. Menedżer pakietów pozwala na proste zainstalowanie większości programów z repozytorium utrzymywanym przez Ubuntu.

W naszym przypadku możemy zacząć od wpisania następujących poleceń

sudo apt-get update
sudo apt-get install apache2

Z uwagi na fakt, że używamy polecenia sudo, te operacje zostaną wykonane z uprawnieniami roota. Twoje intencje zostaną sprawdzone poprzez hasło zwykłego użytkownika.

Po wprowadzeniu hasła apt podpowie Ci, który z pakietów zostanie zainstalowany oraz ile miejsca na dysku to zajmie. Instalacja rozpocznie się po wciśnięciu Y oraz Enter.

Zakładamy, że początkowe instrukcje konfiguracji serwera pozwalające na włączenie zapory sieciowej UFW, zostały przez Ciebie wykonane. Teraz przekonaj się, że zapora sieciowa zezwala na ruch HTTP oraz HTTPS. Przekonaj się, że UFW posiada profil aplikacji dla Apache w następujący sposób:

sudo ufw app list

Odpowiedź
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Kiedy patrzysz na profil Apache Full, powinieneś zobaczyć, że ruch przez porty 80 i 443 został dozwolony:

sudo ufw app info "Apache Full"

Odpowiedź
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Zezwól na wchodzący ruch dla następującego profilu:

sudo ufw allow in "Apache Full"

Możesz od razu sprawdzić czy wszystko poszło zgodnie z planem wchodząc na publiczny adres IP serwera w przeglądarce internetowej:

http://adres_IP_serwera

Zobaczysz domyślną stronę www Apache Ubuntu 16.04, która znajduje się tam w celach informacyjnych i testowych. Powinno to wyglądać mniej więcej następująco:
small_apache_default[1]

Jeżeli widzisz tę stronę, oznacza to, że serwer został poprawnie zainstalowany i jest dostępny poprzez zaporę.

Jak znaleźć publiczny adres IP serwera

Istnieje wiele sposobów, żeby się dowidzieć jaki jest publiczny adres IP Twojego serwera. Zazwyczaj jest to adres, którego używasz do połączenia się z serwerem poprzez SSH.

Jest kilka sposobów na znalezienie wspomnianego adresu z wiersza poleceń. Jednym z nich jest użycie narzędzi iproute2 wpisując:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Daje to dwa lub trzy wiersze, wszystkie mają poprawne adresy, lecz Twój komputer może korzystać tylko z jednego z nich, więc powinieneś wypróbować każdy.

Alternatywą jest użycie narzędzia curl w celu skontaktowania się z jednostką zewnętrzną, która przedstawi Ci, jaki widzi serwer. Można tego dokonać poprzez zapytanie konkretnego serwera o Twój adres IP:
sudo apt-get install curl
curl http://icanhazip.com

Niezależne od wybranej przez Ciebie metody uzyskania adresu IP, możesz wpisać go w pasku adresu przeglądarki internetowej w celu dostania się do serwera.

Instalowanie MySQL

Teraz, kiedy nasz serwer www został zainstalowany i działa, przyszedł czas na zainstalowanie MySQL. MySQL jest systemem zarządzania bazą danych. Zasadniczo, pozwala on na zorganizowanie i zapewnienie dostępu do baz danych, w których nasza strona może przechowywać informacje.

Możemy też użyć apt  w celu pobrania i zainstalowania oprogramowania. Zainstalujmy również kilka innych pakietów “pomocników”, które pomogą nam w uzyskaniu komponentów do komunikowania się między sobą:
sudo apt-get install mysql-server

Uwaga: W tym przypadku nie musisz uruchamiać sudo apt-get update przed poleceniem, ponieważ zrobiliśmy to wcześniej w trakcie instalowania Apache. Pakiet indeksów na naszym komputerze powinien już być zaktualizowany.

Ponownie zobaczysz listę pakietów, które zostaną zainstalowane wraz z informacją o tym, ile miejsca na dysku będą potrzebowały. Wpisz Y w celu kontynuacji.

W trakcie instalacji serwer poprosi Cię o potwierdzenie hasła dla użytkownika „root” MySQL. Jest to konto administracyjne MySQL z większymi uprawnieniami. Potraktuj go jak konto root dla samego serwera (jednak teraz konfigurujesz konkretne konto MySQL). Upewnij się, że Twoje hasło jest mocne i unikatowe, nie pozostawiaj pustych pól.

Po zakończeniu instalacji możemy uruchomić prosty skrypt zabezpieczeń, który usunie niektóre wartości domyślne i zablokuje dostęp do naszego systemu bazy danych. Uruchom interaktywny skrypt poprzez następujące polecenie:
sudo mysql_secure_installation

Zostaniesz poproszony o wprowadzenie hasła 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

PHP jest elementem konfiguracji przeznaczonej do przetwarzania kodu w celu wyświetlania zawartości dynamicznej. Może on uruchomić skrypty, połączyć się z naszą bazą danych MySQL w celu uzyskania informacji oraz przekazania przetworzonej zawartości do wyświetlenia na serwerze www.

Możemy ponownie wykorzystać system apt, aby zainstalować nasze komponenty. Włączmy niektóre pakiety pomocnicze, żeby można było uruchomić kod PHP w ramach serwera Apache i podłączyć się do naszej bazy danych MySQL:
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

PHP powinien się zainstalować bez żadnych problemów. Za chwilę go przetestujemy.

W większości przypadków, będziemy chcieli zmodyfikować sposób, w który Apache obsługuje pliki, gdy katalog jest wymagany. Obecnie, gdy użytkownik zażąda katalogu z serwera, Apache najpierw będzie szukał pliku o nazwie index.html. Staramy się przekazać naszemu serwerowi www informacje o preferowaniu plików PHP, więc zmusimy Apache szukać plik index.php w pierwszej kolejności.

W związku z powyższym wprowadź następujące polecenie w celu otwarcia pliku dir.conf w edytorze tekstowym z uprawnieniami root:
sudo nano /etc/apache2/mods-enabled/dir.conf

Będzie to wyglądało następująco:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Przenieśmy podkreślony wyżej plik indeksu PHP na pierwsze miejsce po specyfikacji DirectoryIndex w następujący sposób:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Po zakończeniu zapisz i zamknij plik po wciśnięciu Ctrl-X. Zachowanie potwierdzisz wpisując Y, natomiast zachowanie lokalizacji pliku odbędzie się poprzez wciśnięcie Enter.

Następnie musimy zrestartować serwer Apache w celu rozpoznania wprowadzonych zmian. Dokonasz tego wpisując:
sudo systemctl restart apache2

Możemy też sprawdzić status serwisu apache2 używając systemctl:
sudo systemctl status apache2

Przykładowa odpowiedź
apache2.service - LSB: Apache2 web server
   Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
  Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
    Tasks: 6 (limit: 512)
   CGroup: /system.slice/apache2.service
           ├─13623 /usr/sbin/apache2 -k start
           ├─13626 /usr/sbin/apache2 -k start
           ├─13627 /usr/sbin/apache2 -k start
           ├─13628 /usr/sbin/apache2 -k start
           ├─13629 /usr/sbin/apache2 -k start
           └─13630 /usr/sbin/apache2 -k start

Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]:  * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]:  *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

Instalowanie modułów PHP

Aby zwiększyć funkcjonalność PHP, możemy zainstalować dodatkowe moduły.

Aby zobaczyć dostępne opcje dla modułów i bibliotek PHP, możesz zobaczyć wyniki apt-cache searchless, pagerze, który umożliwia przewijanie poprzez wydanie innych poleceń:
apt-cache search php- | less

Użyj strzałek do przewijania w górę i w dół oraz q w celu zamknięcia.

Wyniki są opcjonalnymi składnikami, które można zainstalować. W wyniku otrzymasz krótki opis dla każdego:

libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
…
:

Aby uzyskać więcej informacji na temat tego, co robi każdy moduł, możesz skorzystać z wyszukiwarki internetowej lub przejrzeć długi opis pakietu wpisując:
apt-cache show nazwa_pakietu

Zobaczysz wiele linii z jednym polem o nazwie Description-en z dłuższym opisem funkcjonalności zapewnianej przez Moduł.

Na przykład, aby dowiedzieć się, co robi moduł php-cli możesz wpisać następujące:
apt-cache show php-cli

Wraz z dużą ilością informacji znajdziesz też coś takiego:

Odpowiedź
…
Description-en: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.0).
…

Jeżeli zdecydujesz się na zainstalowanie pakietu, możesz to zrobić wykorzystując polecenie apt-get install.

Jeżeli zdecyduje się na php-cli wpisz:
sudo apt-get install php-cli

Jeśli chcesz zainstalować więcej niż jeden moduł, możesz to zrobić poprzez umieszczenie każdego z nich, rozdzielając spacją, z poleceniem apt-get install na końcu, jak poniżej:
sudo apt-get install pakiet1 pakiet2 ...

Gratulacje! Zestaw LAMP został właśnie zainstalowany i skonfigurowany. Nadal musimy przetestować PHP.

Testowanie PHP na serwerze www

W celu upewnienia się, że system został prawidłowo skonfigurowany dla PHP, stwórzmy podstawowy skrypt PHP.

Możemy nazwać ten skrypt info.php. Aby Apache mógł znaleźć i obsłużyć plik prawidłowo, należy go zapisać do konkretnego katalogu o nazwie “web root “.

W Ubuntu 16.04, ten katalog znajduje się w /var/www/html/. Możemy stworzyć plik w tym miejscu wpisując:
sudo nano /var/www/html/info.php

Otworzy się pusty plik. Umieść następujący tekst, uruchamiający kod PHP, w pliku:

info.php
<?php
phpinfo();

Po zakończeniu zapisz i zamknij plik.

Przyszedł czas na przetestowanie naszego serwera w zakresie poprawnego wyświetlania zawartości generowanej przez skrypt PHP. W tym celu musimy jedynie odwiedzić stronę w naszej przeglądarce internetowej. Ponownie będziesz potrzebować publicznego adresu IP serwera.

Adres, który odwiedzisz będzie następujący:
http://adres_IP_serwera/info.php

Powinieneś zobaczyć stronę podobną do tej poniżej:
small_php_info[1]

Powyższa strona przedstawia informacje o serwerze z perspektywy PHP. Jest to przydatne do debugowania oraz w celu upewnienia się, że ustawienia są stosowane prawidłowo.

Jeżeli wszystko poszło zgodnie z planem, to PHP działa prawidłowo.

Najlepiej usunąć plik po przetestowaniu, ponieważ może on przekazywać informacje o serwerze nieupoważnionym użytkownikom. Możesz to zrobić w następujący sposób:
sudo rm /var/www/html/info.php

Zawsze możesz ponownie stworzyć stronę, jeżeli będziesz potrzebować dostępu do informacji.

Podsumowanie

Po zainstalowaniu zestawu LAMP masz duży wybór następnych działań. Zainstalowałeś podstawową platformę, która pozwoli ci na instalowanie większości stron www oraz oprogramowania internetowego na Twoim serwerze.

Jeżeli nie chcesz walczyć z instalacją pakietów z linii poleceń – możesz zlecić to naszym administratorom po zakupie VPS SSD 😉

Jednym z następujących działań powinno być upewnienie się, że połączenia z Twoim serwerem są bezpieczne. Zrób to poprzez HTTPS. Najprościej będzie użyć Let’s Encrypt w celu zabezpieczenia strony www za pomocą darmowego certyfikatu TLS/SSL.