W tych wpisach:
- [Debian] LAMP – 1. Instalacja Apache, PHP, MySQL i phpMyAdmin
- [Debian] LAMP – 2. Hosty wirtualne (vhosty) Apache
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.