[Debian] LEMP – Instalacja Nginx, PHP, MySQL i phpMyAdmin oraz konfiguracja hostów wirtualnych

W tych wpisach:

opisałem, w jaki sposób zainstalować serwer WWW Apache, wraz z obsługą języka PHP, serwer baz danych MySQL oraz panel phpMyAdmin, służący do administracji bazami danych. Taki zestaw serwerów nazywa się LAMP – Linux, Apache, MySQL i PHP. W tym wpisie chciałbym przedstawić coś podobnego, a mianowicie LEMP. LEMP, czyli Linux, Nginx, MySQL, PHP, to bardzo podobny zestaw serwerów, z tą różnicą, że zamiast Apache, występuje tutaj nginx. E w nazwie oznacza Engine X, bo właśnie tak, po angielsku czyta się nazwę serwera Nginx.

Nginx jest alternatywą dla najpopularniejszego obecnie serwera – Apache. W przypadku serwowania treści statycznych, czyli plików HTML, obrazków itp. jest on szybszy i wydajniejszy. Nginx jest bardzo często wykorzystywany jako server-side proxy, do udostępniania klientom treści statycznych i przekierowywania ruchu dotyczącego treści dynamicznych, takich jak strony PHP do serwera Apache, nasłuchującego na innym porcie. Konfiguracja z tego wpisu przewiduje wykorzystanie w charakterze serwera WWW jedynie Nginx, bez Apache. Nginx, nie posiada wbudowanej, w postaci modułu (jak Apache), obsługi języka PHP, dlatego wykorzystamy FastCGI.

Instalacja i konfiguracja serwerów

1. Logujemy się na serwer przez SSH, na konto użytkownika root.

2. Odświeżamy pamięć cache repozytoriów managera pakietów APT i usuwamy domyślnie zainstalowany na VPS-ie w Nazwa.pl serwer HTTP – Apache, wraz ze wszystkimi składnikami. Następnie, instalujemy serwer HTTP – Nginx, parser języka PHP5, FastCGI, serwer MySQL oraz panel phpMyAdmin.

apt-get update apt-get remove apache2* apt-get install nginx php5-cli php5-cgi spawn-fcgi mysql-server phpmyadmin

3. Podczas instalacji pakietów, instalator poprosi o kilka informacji:

  • hasło użytkownika root, serwera baz danych MySQL – hasło to powinno być inne niż hasło systemowego root-a.
  • powtórzenie ww. hasła
  • wybranie serwera HTTP do przekonfigurowania dla phpMyAdmin – nie wybieramy żadnego – klikamy tabulator, a następnie enter
  • decydujemy, czy chcemy, aby instalator stworzył za nas bazę danych dla phpMyAdmin (jest ona konieczna do jego poprawnego funkcjonowania)
  • ponownie podajemy hasło root-a MySQL
  • wybieramy nowe hasło dla bazy danych phpMyAdmin
  • powtarzamy ww. hasło

4. Jeśli nie mamy zainstalowanego na serwerze edytora nano, to instalujemy go poleceniem:

apt-get install nano

5. Tworzymy i edytujemy plik /usr/bin/php-fastcgi. Będzie on służył do uruchamiania „lokalnego” serwera FastCGI.

a) Uruchamiamy edytor nano

nano /usr/bin/php-fastcgi

b) Zaznaczamy poniższy tekst i kopiujemy go do schowka klikając kombinację klawiszy Ctrl+C.

#!/bin/bash FASTCGI_USER=www-data FASTCGI_GROUP=www-data ADDRESS=127.0.0.1 PORT=9000 PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid CHILDREN=6 PHP5=/usr/bin/php5-cgi /usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

c) Przechodzimy do okienka PuTTY i klikamy prawym przyciskiem myszy na jego środek. Spowoduje to wklejenie tekstu ze schowka.

6. Nadajemy nowo-utworzonemu plikowi atrybut wykonywalny. Umożliwi to uruchomienie go jako programu. Fragment „#!/bin/bash„, oznacza że zawartość skryptu będzie podczas wykonywania przesyłana na wejście do programu /bin/bash, a wynikiem działania skryptu, będzie wyjście tego programu.

chmod +x /usr/bin/php-fastcgi

7. Podobnie jak poprzednio, tworzymy i edytujemy kolejny plik. Tym razem będzie to skrypt startowy uruchamiający, restartujący i zamykający proces FastCGI podczas uruchamiania i zamykania systemu na VPS.

nano /etc/init.d/php-fastcgi
#!/bin/bash PHP_SCRIPT=/usr/bin/php-fastcgi FASTCGI_USER=www-data FASTCGI_GROUP=www-data PID_DIR=/var/run/php-fastcgi PID_FILE=/var/run/php-fastcgi/php-fastcgi.pid RET_VAL=0 case "$1" in start) if [[ ! -d $PID_DIR ]] then mkdir $PID_DIR chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR chmod 0770 $PID_DIR fi if [[ -r $PID_FILE ]] then echo "php-fastcgi already running with PID `cat $PID_FILE`" RET_VAL=1 else $PHP_SCRIPT RET_VAL=$? fi ;; stop) if [[ -r $PID_FILE ]] then kill `cat $PID_FILE` rm $PID_FILE RET_VAL=$? else echo "Could not find PID file $PID_FILE" RET_VAL=1 fi ;; restart) if [[ -r $PID_FILE ]] then kill `cat $PID_FILE` rm $PID_FILE RET_VAL=$? else echo "Could not find PID file $PID_FILE" fi $PHP_SCRIPT RET_VAL=$? ;; status) if [[ -r $PID_FILE ]] then echo "php-fastcgi running with PID `cat $PID_FILE`" RET_VAL=$? else echo "Could not find PID file $PID_FILE, php-fastcgi does not appear to be running" fi ;; *) echo "Usage: php-fastcgi {start|stop|restart|status}" RET_VAL=1 ;; esac exit $RET_VAL

8. Nadajemy mu atrybut umożliwiający uruchamianie i inicjujemy go jako systemowy skrypt startowy.

chmod +x /etc/init.d/php-fastcgi update-rc.d php-fastcgi defaults

9. Edytujemy plik konfiguracyjny domyślnego vhosta. Więcej na temat vhostów opisałem w tym wpisie.

nano /etc/nginx/sites-available/default

a) Odnajdujemy poniższy fragment:

 location / { root /var/www; index index.html index.htm; }

i zamieniamy na:

 location / { root /var/www; index index.php index.html index.htm; }

Spowoduje to, przetwarzanie jako strony startowe, plików index.php, index.html oraz index.html, zamiast tylko index.html i index.htm.

b) Odnajdujemy:

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { #fastcgi_pass	127.0.0.1:9000; #fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #includefastcgi_params; #}

i zamieniamy na:

 location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include /etc/nginx/fastcgi_params; }

Wymusi to przekazywanie wszystkich żądań dotyczących plików PHP, najpierw do serwera FastCGI, a dopiero później, wysyłanie wyniku działania parsera PHP (czyli strony w HTML) do użytkownika.

10. Usuwamy domyślną stronę WWW, jeśli pozostała po Apache i tworzymy własną, wyświetlającą informacje nt. konfiguracji Apache (phpinfo).

rm /var/www/index.html echo "" > /var/www/index.php

11. Tworzymy dowiązanie symboliczne dla phpMyAdmin, tak żeby był on dostępny jako podstrona domyślnego vhosta, pod adresem http://{ADRES_IP_SERWERA}/phpmyadmin.

ln -s /usr/share/phpmyadmin /var/www/phpmyadmin

12. Uruchamiamy usługi – FastCGI i Nginx.

/etc/init.d/php-fastcgi start /etc/init.d/nginx start

Domyślna strona WWW, z katalogu /var/www, powinna być od teraz dostępna pod wszystkimi adresami IP, oraz wszystkimi domenami, które rekordem A wskazują na nasz serwer. Więcej na temat konfiguracji DNS w tym wpisie. phpMyAdmin powinien być dostępny, również pod wszystkimi adresami IP oraz domenami, w podkatalogu phpmyadmin, np. http://e00.eu/phpmyadmin.

Hosty wirtualne aka vhosty

Dzięki hostom wirtualnym możliwy jest hosting wielu stron WWW pod różnymi adresami (domenami DNS) na jednym serwerze z jednym adresem IP. Np. e00.eu, vps-admin.eu, olo-web.eu itp. Każda z domen musi być oczywiście odpowiednio skonfigurowana, tak aby wskazywała rekordem A na adres IP naszego serwera. Więcej nt. działania systemu DNS, opisałem tutaj, a na temat samych vhostów, tutaj, przy okazji ich konfiguracji w serwerze WWW Apache.

1. Tworzymy nowego użytkownika i ustawiamy mu hasło. Oczywiście, zamiast vps-admin.eu podajemy nazwę swojej domeny.

useradd -m vps-admin.eu passwd vps-admin.eu

2. Tworzymy podfoldery w katalogu nowego użytkownika. W htdocs będą znajdowały się pliki strony WWW, a w logs, logi (access i error log).

mkdir /home/vps-admin.eu/htdocs mkdir /home/vps-admin.eu/logs

3. Zmieniamy właściciela utworzonych w poprzednim punkcie folderów na nowego użytkownika.

chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/htdocs chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/logs

4. Piszemy prosty plik index.html i zmieniamy jego właściciela na nowego użytkownika.

echo "test vhosta vps-admin.eu" > /home/vps-admin.eu/htdocs/index.html chown vps-admin.eu:vps-admin.eu /home/vps-admin.eu/htdocs/index.html

5. Tworzymy plik konfiguracyjny nowego vhosta, otwierając go w edytorze, kopiując poniższy fragment tekstu i zapisując plik.

nano /etc/nginx/sites-available/vps-admin.eu
server { server_name vps-admin.eu www.vps-admin.eu; access_log /home/vps-admin.eu/logs/access.log; error_log /home/vps-admin.eu/logs/error.log; root /home/vps-admin.eu/htdocs; location / { index index.php index.html index.htm; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/vps-admin.eu/htdocs$fastcgi_script_name; } }

6. Zmieniamy nazwę pliku konfiguracyjnego domyślnego vhosta z default na 001-default, tak aby był zawsze przetwarzany jako pierwszy. Tą czynność wykonujemy tylko raz.

mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/000-default

7. „Włączamy” plik konfiguracyjny vhosta. Podczas dodawania kolejnych vhostów, zamiast 001, podajemy kolejne numery.

ln -s /etc/nginx/sites-available/vps-admin.eu /etc/nginx/sites-enabled/001-vps-admin.eu

8. Restartujemy serwer Nginx.

/etc/init.d/nginx restart

Autor: Aleksander Kurczyk
Skrypty, uruchamiający i startowy, zostały skopiowane ze strony http://library.linode.com/web-servers/nginx/php-fastcgi/debian-6-squeeze.

Artykuł [Debian] LEMP – Instalacja Nginx, PHP, MySQL i phpMyAdmin oraz konfiguracja hostów wirtualnych pochodzi z serwisu Linux Insider.

Dodaj komentarz