Techniczne

nginx + php5-fpm: instalacja i konfiguracja serwera


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 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. :)

Przydatne linki

Techniczne
Blog w pełni bezpieczny – włączyłem SSL
Techniczne
Console2 – całkiem udany wiersz poleceń w Windows
Techniczne
A może tak Windows Phone?
  • phpMyAdmin to zło! Już od lat do łączenia z bazą używam normalnej aplikacji, która daje o niebo więcej możliwości od prymitywnego phpMyAdmina (i działa od niego o dwa nieba szybciej;)

  • Tutoriale Marcina znam i według nich próbowałem już postawić VPSa. Jednak nie trącą już świeżością.

    Z tego to brak większych zmian względem Debiana, tak więc tutek też powinien działać w Debianie?

    • bobiko

      Musiałbyś uderzyć do niego, żeby upewnić. Fakt, ze przez ten czas wiele się zmieniło ale stare sprawdzone metody dalej działają. :)

  • Bobiko, tylko nie MatiPL ;) Od 1996 roku kiedy korzystam z tego nicka pisane jest po prostu matipl. Thx.

    Cieszę się, że sobie poradziłeś. Jednakże nie polecam “apt-get install php5-*” – przecież zainstaluje Ci mnóstwo niepotrzebnych rozszerzeń, niby na domowej maszynie to bez różnicy ale PHP będzie kobyłą. Małe jest piękne, instaluj to co naprawdę potrzebujesz.
    HeidiSQL, o którym wspomniał Łukasz jest bezpłatne, zerknij sobie na stronę. BTW: Możesz też skorzystać z aplikacji okienkowej od MySQL.

    • Jakie komponenty php5 zalecasz instalować?

      • żadnych ;) a na poważnie dokładnie takich jakich potrzebujesz. Ja podczas kompilowania zawsze pakuje:
        fpm, cli, mbstring, sqlite-utf8, mysql/pdo, gettext, curl, gd, jpeg, pneg, freetype, xsl, soap, pcntl, mcrypt, pera
        Połowa z nich jak nie w większości jest w pojedynczej paczce dystrybucyjnej. Jak extension w php najczęściej mam dorzucone memcacheD oraz APC.

    • bobiko

      PO zastanowieniu, przyznaję rację – ja tak w tym przypadku zrobiłem ze sobie wybrałem te moduły, które mogą być przydatne, głównie curl, gd itp. Zaraz poprawię ;)

%d bloggers like this: