WordPress na platformie Amazon AWS EC2 – cz.5

Apache, PHP, MySQL

Do uruchomienia wordpressa będziemy potrzebować kilku dodatkowych narzędzi. Po pierwsze musimy zainstalować serwer, który będzie oczekiwał na żądania z przeglądarek użytkowników i zwracał im gotowe strony. W tej roli wystąpi Apache. Ponieważ wordpress napisany jest w PHP, potrzebujemy zainstalować interpreter tego języka. Na koniec konieczna jest instalacja serwera baz danych bez której nasz blog nie będzie działał. WordPress zaprojektowany jest aby współdziałać z MySQL, dlatego też taką bazę musimy zainstalować.

Instalacja Apache

W celu zainstalowania apache-a musimy połączyć się z naszą instancją przez SSH, a następnie wykonać następujące polecenie:

sudo apt-get update && sudo apt-get install apache2

Tak jak opisywałem w poprzedniej części sudo apt-get update spowoduje pobranie informacji o najnowszych dostępnych wersjach pakietów z repozytorium ubuntu. Operator && oznacza: „jeśli polecenie po lewej stronie wykona się poprawnie wykonaj polecenie po prawej stronie”. Część sudo apt-get install apache2 uruchamia instalację pakietu apache2.

Po tej operacji wpisanie w przeglądarce adresu IP naszego serwera, powinno dać nam taki wynik jak poniżej, co oznacza, że nasz serwer działa. 🙂

ec2_apache

Przed przejściem dalej warto upewnić się, że nasz apache używa modułu mpm-events, a nie mpm-prefork. Jest to podyktowane wydajnością. U mnie ten moduł był domyślnie zainstalowany i włączony po instalacji apache-a. Możesz to sprawdzić przy pomocy komendy, która wypisze wszystkie aktywne moduły:

sudo apache2ctl -M

W razie potrzeby możesz doinstalować ten moduł:

sudo apt-get install apache2-mpm-event
sudo a2enmod mpm_event
sudo service apache2 restart

Instalacja PHP

W repozytorium ubuntu 14.04 najnowsza wersja PHP nosi numer 5.5.9. Jeśli chcielibyśmy zainstalować nowszą wersję, np. 5.6.x konieczne będzie skorzystanie z dodatkowych repozytoriów.

Przejdźmy zatem do instalacji. Tak jak zaznaczyłem na początku tej serii, będę chciał skorzystać z PHP5-FPM. Wybór ten podyktowany jest głównie wydajnością. Tutaj można przeczytać porównanie mod_php i php-fpm. Wydajemy polecenie:

sudo apt-get install php5-fpm

Żeby taka instalacja PHP chciała współpracować z apachem musimy doinstalować do niego dodatkowy moduł. Ze względu na zawiłości licencyjne, jest on dostępny w repozytorium multiverse, które domyślnie jest wyłączone, więc najpierw musimy je włączyć. O różnicach między repozytoriami można poczytać tutaj. Otwórzmy w ulubionym edytorze tekstowym plik /etc/apt/sources.list (ja korzystam z nano)…

sudo nano /etc/apt/sources.list

… i odkomentujmy odpowiednie linijki (adresy URL mogą różnić się w zależności od regionu):

ec2_sources

Po zapisaniu zmian w pliku możemy już wydać polecenia:

sudo apt-get update
sudo apt-get install libapache2-mod-fastcgi

Po instalacji moduł powinien zostać automatycznie włączony, a apache zrestartowany.

ec2_fcgi

Jeśli tak się jednak nie stało, zawsze możemy przeprowadzić aktywację modułu i restart serwera ręcznie wydając następujące polecenia:

sudo a2enmod fastcgi
sudo service apache2 restart

UWAGA!
Jeśli miałeś wcześniej zainstalowane mod_php, musisz je wyłączyć. Możesz to zrobić w analogiczny sposób:

sudo a2dismod php5
sudo service apache2 restart

Przed nami jeszcze odrobina konfiguracji. Zakładam, że na naszej instancji będzie uruchomiona tylko jedna witryna, zatem przedstawiona poniżej konfiguracja jest prawdopodobnie najprostszą z możliwych. Zacznijmy od włączenia jeszcze dwóch modułów, które będą nam potrzebne:

sudo a2enmod alias actions
sudo service apache2 restart

Teraz musimy stworzyć plik konfiguracyjny, który powie apache-owi co powinien zrobić z plikami PHP. Wszystkie pliki konfiguracyjne przechowywane są w folderze /etc/apache2/conf-available, dlatego tam też stworzymy nasz plik. Ja nazwę go php5-fpm.conf. Możemy to zrobić na przykład przy pomocy nano:

sudo nano /etc/apache2/conf-available/php5-fpm.conf

Następnie umieszczamy w nim następują treść:

Krótkie wyjaśnienie dla chętnych 🙂
IfModule sprawdza czy moduł jest aktywny i jeśli jest, wykonuje polecenia zawarte w bloku.
AddHandler powoduje, że dla podanych rozszerzeń plików wykonywana będzie zadana akcja – w tym przypadku dla plików .php, wykonana zostanie akcja „php5-fcgi”.
Action definiuje program do którego zostanie przesłane żądanie, kiedy zostanie wykonana akcja – w tym przypadku dla akcji php5-fcgi żądanie zostanie skierowane na ścieżkę /php5-fcgi
Alias służy do mapowania ścieżek – w tym przypadku definiujemy, że ścieżka /php5-fcgi z poprzedniej linijki, to tak naprawdę /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer wskazuje w jaki sposób obsłużyć plik, który złapaliśmy powyższymi linijkami – w tym przypadku zostanie on wykonany przez serwer nasłuchujący na gnieździe unixowym na ścieżce /var/run/php5-fpm.sock. Ta ścieżka jest zdefiniowana w pliku konfiguracyjnym php-fpm. Możesz to sprawdzić – znajdziesz go tutaj: /etc/php5/fpm/pool.d/www.conf. Opcja -pass-header daje nam możliwość przekazania do skryptu nagłówków HTTP, które normalnie nie zostałyby przekazane, np. ujętego w powyższej konfiguracji nagłówka Authorization.
Directory określa ścieżkę, którą obejmą ustawienia zdefiniowane w bloku
Require all granted pozwala na odczyt lokalizacji przez wszystkich – musimy dodać tą linijkę, w innym wypadku zamiast efektów działania dowolnego skryptu PHP zobaczymy w przeglądarce odmowę dostępu.

Nie pozostało nam nic innego, jak zapisać konfigurację, włączyć ją i przetestować czy wszystko działa. Zapisujemy plik, wychodzimy z edytora, wydajemy polecenia:

sudo a2enconf php5-fpm
sudo service apache2 reload

Teraz utwórzmy plik php, dzięki któremu przetestujemy to, co do tej pory zrobiliśmy. Domyślna konfiguracja apache-a kieruje nas na ścieżkę /var/www/html, więc tam też utworzymy nasz plik:

sudo nano /var/www/html/info.php

o treści:

Po zapisaniu pliku przechodzimy pod adres naszego serwera – w moim przypadku będzie to: http://52.29.70.252/info.php. Powinniśmy zobaczyć znajomą stronę PHP Info. 🙂

ec2_phpinfo

Instalacja MySQL

Teraz będzie już z górki. Uruchamiamy instalację serwera MySQL i modułu php, który będzie używany do komunikacji z bazą danych. Wydajemy polecenie:

sudo apt-get install mysql-server php5-mysql

W trakcie instalacji zostaniemy poproszeni o utworzenie hasła dla głównego użytkownika (root) naszej bazy danych. Możemy je wprowadzić teraz, albo zostawić pole hasła puste. Za chwilę wrócimy do tego kroku.

Po zakończonej instalacji uruchamiamy skrypt, który przygotuje do działania naszą bazę, między innymi stworzy odpowiednią strukturę folderów.

sudo mysql_install_db

Na koniec uruchamiamy skrypt, który przeprowadzi nas przez kilka kroków prowadzących do lepszego zabezpieczenia naszego serwera.

sudo mysql_secure_installation

W pierwszym kroku zostaniemy zapytani o aktualne hasło dla użytkownika root. Jeśli ustawiliśmy je podczas instalacji, wpiszmy je teraz. Jeśli nie, naciskamy po prostu enter.

Drugi krok to ustawienie hasła roota. Jeśli mamy już hasło, w tym kroku możemy je zmienić.

Krok trzeci pozwala nam na usunięcie anonimowego użytkownika, czyli możliwości logowania się bez faktycznego posiadania konta. Oczywiście usuwamy.

W kroku czwartym możemy określić, że użytkownik root może zalogować się tylko z komputera, na którym uruchomiony jest serwer (localhost). Potwierdzamy wyłącznie zdalnego logowania.

W kroku piątym możemy usunąć bazę ‚test’, która domyślnie jest utworzona na etapie instalacji i jest dostępna dla wszystkich. Potwierdzamy chęć usunięcia.

Ostatnim etapem jest przeładowanie tabeli uprawnień. Potwierdzamy.

Uff… Dobrnęliśmy do końca. Mamy już prawie wszystko, czego potrzebujemy do uruchomienia naszego wordpressa. Do zobaczenia w następnym odcinku. 🙂

Część 1
Część 2
Część 3
Część 4
Część 6
Część 7
Część 8

2 myśli na temat “WordPress na platformie Amazon AWS EC2 – cz.5”

  1. Mała literówka. Zamiast
    sudo nano /etc/apach2/conf-available/php5-fpm.conf

    powinno być

    sudo nano /etc/apache2/conf-available/php5-fpm.conf

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *