Данная заметка является шпаргалкой для новичков в установке нормально работающего комплекса, описанного в заголовке. Все пункты установки протестированы несколько раз на разных vds, поэтому проблем с нехваткой чего-то быть не должно, как это обычно бывает, когда ставишь что-то по мануалам, надерганных из разных источников. Подробно описания настроек и «тюнинга» в заметке нет, т.к. это всё очень индивидуально и требует понимания что, как и зачем делается, а это невозможно охватить в одной даже очень большой шпоре. 🙂
Перво-наперво обновляем список пакетов:
apt-get update
Ставим необходимое для ручной установки и некоторых других хитрым манипуляций:
apt-get install build-essential
NGINX
Ставим библиотеки, необходимые для установки nginx в той конфигурации, которую мы будем ставить (pcre обязательная всегда, ssl — опционально, если конфигурируем nginx с ней):
apt-get install libpcre3-dev
apt-get install openssl
apt-get install libcurl4-openssl-dev
В пакетах Дебиана, к сожалению, в стабильном варианте валяется очень старая версия nginx, поэтому будем ставить сервер вручную. Заходим в темп:
cd /tmp
Качаем последнюю стабильную версию nginx, распаковываем и заходим в папку установки:
wget https://sysoev.ru/nginx/nginx-0.7.61.tar.gz
tar -zxvf nginx-0.7.61.tar.gz
cd nginx-0.7.61
Конфигурим и устанавливаем:
./configure \
—user=www-data \
—group=www-data \
—with-http_ssl_module \
—with-http_realip_module \
—with-http_addition_module \
—with-http_sub_module \
—with-http_dav_module \
—with-http_flv_module \
—with-http_gzip_static_module \
—with-mail \
—with-mail_ssl_module
make
make install
Запускаем:
/usr/local/nginx/sbin/nginx
Заходим в браузер, набираем наш ip/домен и видим:
Welcome to nginx!
Значит, всё хорошо. Теперь нам нужно добавить nginx в автозагрузку. Для этого создаем файл ‘/etc/init.d/nginx’ следующего содержания:
#! /bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
test -x $DAEMON || exit 0
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
. /etc/default/nginx
fi
set -e
case «$1» in
start)
echo -n «Starting $DESC: »
start-stop-daemon —start —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON — $DAEMON_OPTS
echo «$NAME.»
;;
stop)
echo -n «Stopping $DESC: »
start-stop-daemon —stop —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON
echo «$NAME.»
;;
restart|force-reload)
echo -n «Restarting $DESC: »
start-stop-daemon —stop —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON
sleep 1
start-stop-daemon —start —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON — $DAEMON_OPTS
echo «$NAME.»
;;
reload)
echo -n «Reloading $DESC configuration: »
start-stop-daemon —stop —signal HUP —quiet —pidfile /usr/local/nginx/logs/nginx.pid —exec $DAEMON
echo «$NAME.»
;;
*)
N=/etc/init.d/$NAME
echo «Usage: $N {start|stop|restart|force-reload}» >&2
exit 1
;;
esac
exit 0
Делаем исполняемым и добавляем nginx в автозагрузку:
chmod 755 /etc/init.d/nginx
update-rc.d nginx defaults
Теперь мы можем управлять нашим http-сервером с помощью следующих команд:
/etc/init.d/nginx start
/etc/init.d/nginx restart
/etc/init.d/nginx stop
PHP-FASTCGI
PHP я предлагаю ставить из коллекции пакетов. Сейчас там лежит стабильная версия 5.2.6 — да, не последняя из 5.2, но зато не глючит. Я пробовал ставить 5.2.10 из тестовых пакетов, в связке с nginx работало не стабильно. 🙁 Устанавливаем PHP с некоторыми обязательными расширениями (необходимые именно вам расширения вы можете добавить сразу или позже):
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-json php5-mcrypt php5-memcache
Далее заходим в ‘/etc/php5/cgi/php.ini’, где добавляем строку в конец файла:
cgi.fix_pathinfo = 1
Добавим php в автозагрузку. Для чего оздаем скрипт ‘/etc/init.d/php-fastcgi’ следующего содержания:
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description: Start and stop php-cgi in external FASTCGI mode
### END INIT INFO
# Author: Kurt Zankl <kz@xon.uni.cc>
# Do NOT «set -e»
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=»php-cgi in external FASTCGI mode»
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
scriptNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x «$DAEMON» ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
# If the daemon is not enabled, give the user a warning and then exit,
# unless we are stopping the daemon
if [ «$START» != «yes» -a «$1» != «stop» ]; then
log_warning_msg «To enable $NAME, edit /etc/default/$NAME and set START=yes»
exit 0
fi
# Process configuration
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS=»-q -b $FCGI_HOST:$FCGI_PORT»
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon —start —quiet —pidfile $PIDFILE —exec $DAEMON —test > /dev/null || return 1
start-stop-daemon —start —quiet —pidfile $PIDFILE —exec $DAEMON —background —make-pidfile —chuid $EXEC_AS_USER —startas $DAEMON — $DAEMON_ARGS || return 2
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon —stop —quiet —retry=TERM/30/KILL/5 —pidfile $PIDFILE > /dev/null # —name $DAEMON
RETVAL=»$?»
[ «$RETVAL» = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon —stop —quiet —oknodo —retry=0/30/KILL/5 —exec $DAEMON
[ «$?» = 2 ] && return 2
# Many daemons don’t delete their pidfiles when they exit.
rm -f $PIDFILE
return «$RETVAL»
}
case «$1» in
start)
[ «$VERBOSE» != no ] && log_daemon_msg «Starting $DESC» «$NAME»
do_start
case «$?» in
0|1) [ «$VERBOSE» != no ] && log_end_msg 0 ;;
2) [ «$VERBOSE» != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ «$VERBOSE» != no ] && log_daemon_msg «Stopping $DESC» «$NAME»
do_stop
case «$?» in
0|1) [ «$VERBOSE» != no ] && log_end_msg 0 ;;
2) [ «$VERBOSE» != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg «Restarting $DESC» «$NAME»
do_stop
case «$?» in
0|1)
do_start
case «$?» in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo «Usage: $scriptNAME {start|stop|restart|force-reload}» >&2
exit 3
;;
esac
Делаем исполяемым:
chmod 755 /etc/init.d/php-fastcgi
Создаем другой файл ‘/etc/default/php-fastcgi’, чтобы мы могли контролировать php-fastcgi (слушать порты, получать количество дочерних процессов и другие запросы), такого содержания:
#
# Settings for php-cgi in external FASTCGI Mode
#
# Should php-fastcgi run automatically on startup? (default: no)
START=yes
# Which user runs PHP? (default: www-data)
EXEC_AS_USER=www-data
# Host and TCP port for FASTCGI-Listener (default: localhost:9000)
FCGI_HOST=localhost
FCGI_PORT=9000
# Environment variables, which are processed by PHP
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000
Запускаем php-fastcgi:
/etc/init.d/php-fastcgi start
Добавляем в автозагрузку:
update-rc.d php-fastcgi defaults
Дружим NGINX и PHP
Создадим папку для сайтов, например, ‘/home/www’.
Редактируем ‘/usr/local/nginx/conf/nginx.conf’. Указываем под кем будем запускать nginx:
user www-data www-data;
В контейнере server {} изменим/раскоментируем следующие строки:
location / {
root /home/www;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /home/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param script_FILENAME /home/www$fastcgi_script_name;
include fastcgi_params;
}
Перезапускаем nginx:
/etc/init.d/nginx restart
Создаем файл для теста ‘/home/www/info.php’ следующего содержания:
<?php
phpinfo();
?>
Проверяем в браузере — httр://ваш-адрес/info.php
MYSQL
Ставим:
apt-get install mysql-server mysql-client
В процессе будет предложено установить пароль рута, который можно всегда поменять так:
mysqladmin -u root password tralala
EACCELERATOR
Печально, но eAccelerator вообще отсутствует в установочных пакетах Debian. Будем ставить руками. Предварительно нам потребуется установить библиотеку php-developer:
apt-get install php5-dev
Теперь скачиваем и устанавливаем eAccelerator:
cd /tmp
wget httр://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
tar xvfj eaccelerator-0.9.5.3.tar.bz2
cd eaccelerator-0.9.5.3
phpize
./configure
make
make install
Создаем конфигурационный файл ‘/etc/php5/conf.d/eaccelerator.ini’ следующего содержания:
extension="eaccelerator.so"
eaccelerator.shm_size=»64″
eaccelerator.cache_dir=»/var/cache/eaccelerator»
eaccelerator.enable=»1″
eaccelerator.optimizer=»1″
eaccelerator.check_mtime=»1″
eaccelerator.debug=»0″
eaccelerator.filter=»»
eaccelerator.shm_max=»0″
eaccelerator.shm_ttl=»3600″
eaccelerator.shm_prune_period=»1800″
eaccelerator.shm_only=»0″
eaccelerator.compress=»1″
eaccelerator.compress_level=»9″
Создаем папку для хранения файлов eAccelerator’а:
mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator
Перезапускаем php:
/etc/init.d/php-fastcgi restart
MEMCACHE
Устанавливаем:
apt-get install memcached
Перезапускаем php ещё разок:
/etc/init.d/php-fastcgi restart
Удачной работы! 🙂
btw, кому интересно, здесь вы можете посмотреть тесты работы этого комплекса на vds: 480 MHz / 256 Mb и 1280 MHz / 1024 Mb.
Просмотров: 1245
В команде wget httр://sysoev.ru/nginx/nginx-0.7.61.tar.gz (httр) р — русская, если кто копирует, а не сам пишет — загрузит не получится.
Спасибо поправил!