Za każdym razem, jak tylko stawiałem na nowo system operacyjny, to instalowałem i konfigurowałem apache2 + php. W końcu to najpopularniejsze rozwiązanie na linuksowych (i nie tylko) serwerach w sieci. Tym razem postanowiłem pójść dalej i przetestować inne, wprawdzie mniej popularne (ale do czasu), z którym wiąże się trochę więcej zabawy z konfiguracją. Dzisiejszy wpis (z serii do zapamiętania) dotyczy instalacji i konfiguracji serwera HTTP NGINX z PHP5-FPM oraz z bonusami (mysql+phpmyadmin) na Ubuntu.
Instalacja
Na sam początek należy odświeżyć repozytoria i zainstalować dostępne aktualizacje.
sudo apt-get update && sudo apt-get upgrade
Następnie instalujemy pakiet: nginx (czytaj engine x), php5-fpm, mysql i phpmyadmin:
sudo apt-get install nginx php5-fpm mysql phpmyadmin
Ubuntu odpowiednio dobierze brakujące pakiety i pojedzie z koksem. Kilka następujących uwag:
- w trakcie instalacji mysql, zostaniemy poproszeni o podanie hasła dla konta root i jego powtórzenie
- w trakcie instalacji phpmyadmin wyskoczy komunikat o rekonfiguracji serwa i do wyboru będzie m.in. apache; w tym przypadku nic nie zaznaczamy, no chyba ze bedzie opcja nginx (konfiguracja będzie tu)
- w przypadku instalacji php5-fpm, warto dociągnąć inne potrzebne biblioteki, takie jak GD, curl etc, robiąc to za pomocą synaptica lub polecenia (zgodnie z tą sugestią matipl rzeczywiście warto wybrać te potrzebne :):
sudo apt-get install php5-*
- Marcin Kasperski zwraca uwagę na możliwość instalacji ↗, totalnie przez przypadek, pakietu apache, który standardowo rezerwuje port 80. Wprawdzie wpis pochodzi z 2008 roku a ja nie spotkałem sie z takim problemem, to uwaga może być nieaktualna.
Konfiguracja
Kolejny etap to oczywiście konfiguracja nginx + php5-fpm, która początkowo może przerażać (mnie przeraziła, ale to z powodu niewystarczającej wiedzy) ale po czasie może okazać się trywialna.
Na początek krótkie komendy do restartowania usług nginx i php5-fpm:
/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart
Wszelkie konfiguracje dla nginx znajdują sie w katalogu /etc/nginx (warto sobie odpalic mc na prawach roota), nas interesuje default w katalogu sites-available. Gotowa konfiguracja domyślnego VH jest dostępna na githubie ↗. Ogólnie całość konfiguracji, znajduje się na Githubie ↗ i możecie forkować/modyfikować/adaptować pod swoje wymagania. Oczywiście krytyka i uwagi mile widziane.
Pozwolę sobie wyjaśnić kilka spraw. Po pierwsze, domyślny plik default w sites-available, nie jest uporządkowany i zostawiłem tak by każdy mógł zobaczyć jak wyglądał mój początkowy kod. Następnie, np. wp.local zawiera zdecydowanie ładniejszą i zrozumiałą strukturę, z dołączonymi (include) plikami z zewn. Pozwoliłem sobie utworzyć katalog rules i tam umieścić powtarzajace reguły / fragmenty kodu, wspólne dla wszystkich konfiguracji - tutaj wielkie dzięki dla MatiPL ↗ za sugestie:).
Dalsze informacje na temat tworzenia samych konfiguracji i jak ich możliwości dalszej optymalizacji, znajdziecie u Marcina Kasperskiego w tym wpisie ↗ (ogólnie polecam cały cykl tworzenia VPS od podstaw).
Następnym krokiem jest tworzenie dowiązań symbolicznych configów, znajdujacych się w sites-available do katalogu sites-enabled:
sudo ln -s /etc/nginx/sites-available/sql.local /etc/nginx/sites-enabled/sql.local
Jak utworzyliśmy odpowiednie konfiguracje i utworzyliśmy dowiązania symboliczne, należy zrestartować nginx’a i zobaczyć, czy terminal wypluwa jakieś błędy. Gdyby nie było zrozumiałe, warto zajrzeć do logów (ścieżki są podane w konfiguracjach). Gdy wszystko jest ok, następnym i ostatnim krokiem jest dopisanie lokalnych domen (odwołań do stron) w pliku /etc/hosts np:
127.0.0.1 localhost sql.local wp.local
Niczego nie trzeba restartować, wystarczy wpisać w przeglądarce adresy takie jak wp.local, żeby zobaczyć zawartość strony.
I po co to wszystko?
W warunkach domowych, do czystej developerki na własnym sprzęcie, wybór między nginx a apache2 nie ma znaczenia. W innych, bardziej otwartych warunkach (tj. praca zespołowa, testy publiczne) różnica jest już spora, co doskonale opisał Marcin ↗ - poczytajcie, ja nie będę dublował wpisu, zwłaszcza tak fajnie opisującego różnice.
Co z tego mam? Po prostu kolejna ważna porcja wiedzy. :)