Установка: nginx + php-cgi + mysql + eaccelerator + memcache на Debian 5.0 «lenny»
Данная заметка является шпаргалкой для новичков в установке нормально работающего комплекса, описанного в заголовке. Все пункты установки протестированы несколько раз на разных vds, поэтому проблем с нехваткой чего-то быть не должно, как это обычно бывает, когда ставишь что-то по мануалам, надерганных из разных источников. Подробно описания настроек и «тюнинга» в заметке нет, т.к. это всё очень индивидуально и требует понимания что, как и зачем делается, а это невозможно охватить в одной даже очень большой шпоре. :)
Перво-наперво обновляем список пакетов:
Ставим необходимое для ручной установки и некоторых других хитрым манипуляций:
Ставим библиотеки, необходимые для установки nginx в той конфигурации, которую мы будем ставить (pcre обязательная всегда, ssl — опционально, если конфигурируем nginx с ней):
В пакетах Дебиана, к сожалению, в стабильном варианте валяется очень старая версия nginx, поэтому будем ставить сервер вручную. Заходим в темп:
Качаем последнюю стабильную версию nginx, распаковываем и заходим в папку установки:
Конфигурим и устанавливаем:
Запускаем:
Заходим в браузер, набираем наш ip/домен и видим:
Welcome to nginx!
Значит, всё хорошо. Теперь нам нужно добавить nginx в автозагрузку. Для этого создаем файл '/etc/init.d/nginx' следующего содержания:
Делаем исполняемым и добавляем nginx в автозагрузку:
Теперь мы можем управлять нашим http-сервером с помощью следующих команд:
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', где добавляем строку в конец файла:
Добавим php в автозагрузку. Для чего оздаем скрипт '/etc/init.d/php-fastcgi' следующего содержания:
Делаем исполяемым:
Создаем другой файл '/etc/default/php-fastcgi', чтобы мы могли контролировать php-fastcgi (слушать порты, получать количество дочерних процессов и другие запросы), такого содержания:
Запускаем php-fastcgi:
Добавляем в автозагрузку:
Создадим папку для сайтов, например, '/home/www'.
Редактируем '/usr/local/nginx/conf/nginx.conf'. Указываем под кем будем запускать nginx:
В контейнере server {} изменим/раскоментируем следующие строки:
Перезапускаем nginx:
Создаем файл для теста '/home/www/info.php' следующего содержания:
Проверяем в браузере — httр://ваш-адрес/info.php
Ставим:
В процессе будет предложено установить пароль рута, который можно всегда поменять так:
Печально, но eAccelerator вообще отсутствует в установочных пакетах Debian. Будем ставить руками. Предварительно нам потребуется установить библиотеку php-developer:
Теперь скачиваем и устанавливаем eAccelerator:
Создаем конфигурационный файл '/etc/php5/conf.d/eaccelerator.ini' следующего содержания:
Создаем папку для хранения файлов eAccelerator'а:
Перезапускаем php:
Устанавливаем:
Перезапускаем php ещё разок:
Перво-наперво обновляем список пакетов:
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 httр://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
- +1
- 28 октября 2010, 21:37
- android
Комментарии (0)
RSS свернуть / развернуть