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. :)
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;)
A możesz mi podać ;) nazwę aplikacji, z której korzytasz? :)
Ja zawsze korzystałem z phpmyadmin, oraz z pakietu mysql-admin i mysql-query-browser ale neistety te 2 ostatnie nie są już oficjalnie wspierane. Stąd też ktoś przedłużył życie i stworzył właśnie oddzielne repo.
Ja korzystam (za namową Matiego) z HeidiSQL: http://www.heidisql.com/ :)
Jak dobrze kojarze to platny soft?;(
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?
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.
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ę ;)