Объявление

Хотите приглашение на сайт? Пишите: niikto@samovarchik.info


 

{{tag>Debian Ngnix}}
===== VDS на Debian GNU/Linux 6.0.5 (squeeze).nginx + php-cgi + mysql + eaccelerator + memcache + phpMyAdmin=====

Перво-наперво обновляем список пакетов:

apt-get update

Ну и заодно и обновляем всю систему

apt-get upgrade

Ставим пакет для сборки пакетов deb пакетов

apt-get install build-essential

Ставим библиотеки, необходимые для установки nginx в той конфигурации, которую мы будем ставить (pcre обязательная всегда, ssl — опционально, если конфигурируем nginx с ней):

apt-get install libpcre3-dev
apt-get install openssl
apt-get install libcurl4-openssl-dev

Если работаете через SSH то openssl скорее всего уже будет в системе.
====NGNIX====
Заходим в темп:

cd /tmp

Качаем связку ключей с сайта ngnix

wget http://nginx.org/keys/nginx_signing.key

Добавим ключ в apt-get

apt-key add nginx_signing.key

Добавляем репозитории ngnix

echo "deb http://nginx.org/packages/debian/ squeeze nginx" >> /etc/apt/sources.list
echo "deb-src http://nginx.org/packages/debian/ squeeze nginx" >> /etc/apt/sources.list


После добавления обновим список пакетов

apt-get update

Ну и собственно ставим nginx

apt-get install nginx

Запускаем его

/etc/init.d/nginx start

Заходим в браузер, набираем наш ip/домен и видим: **Welcome to nginx!**\\ 
Теперь мы можем управлять нашим http-сервером с помощью следующих команд:

/etc/init.d/nginx start
/etc/init.d/nginx restart
/etc/init.d/nginx stop

====PHP-FASTCGI====
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 в автозагрузку. Для чего cоздаем скрипт '/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====
Создадим папку для сайтов, например, '/var/www'. \\ 
А в ней папку для своего сайта.

mkdir /var/www
mkdir /var/www/corp

Редактируем '/etc/nginx/nginx.conf'. Указываем под кем будем запускать nginx:

user www-data www-data;

Для нашего сайта переименуйте /etc/nginx/conf.d/default.conf в corp.conf \\
Файл /etc/nginx/conf.d/corp.conf приведем следующему виду:

server {
    listen       80;
    server_name  localhost;

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

    location ~* \.(gif|jpg|png)$ {
            expires 30d;
    }


    location ~ \.php$ {
        root /var/www/corp;
        fastcgi_pass   localhost:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }

}

====MYSQL====
Ставим:

apt-get install mysql-server mysql-client

В процессе будет предложено установить пароль рута, который можно всегда поменять так:

mysqladmin -u root password tralala

====EACCELERATOR====
Печально, но eAccelerator вообще отсутствует в установочных пакетах Debian. Будем ставить руками. Предварительно нам потребуется установить библиотеку php-developer:

apt-get install php5-dev

Теперь скачиваем и устанавливаем eAccelerator. \\
Я устанавливаю актуальную версию на момент написания статьи. \\
Просмотреть какие версии есть можно по ссылке https://github.com/eaccelerator/eaccelerator/downloads

cd /tmp
wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2
tar -xvf ./eaccelerator-0.9.6.1
cd eaccelerator-0.9.6.1
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

У меня на виртуальной машине пришлось параметр eaccelerator.shm_size выставить в 16, ;-)
====MEMCACHE====
Устанавливаем:

apt-get install memcached

Перезапускаем php ещё разок:

/etc/init.d/php-fastcgi restart

====phpMyAdmin====
Ставим phpmyadmin через **aptitude**

aptitude install phpmyadmin

Перезапускаем php ещё разок:

aptitude install phpmyadmin

В появившемся окне "Configuring phpmyadmin" не выбираем ни одного web сервера и просто жмем Enter. \\
Дописываем в файл /etc/nginx/conf.d/corp.conf

    location ^~ /phpmyadmin {
        alias /usr/share/phpmyadmin;
        index index.php;
        location ~ /phpmyadmin(/.*\.php) {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin/$1;
        fastcgi_pass localhost:9000;
        fastcgi_index index.php;
        }
    } 

Перезапустите ngnix

/etc/init.d/nginx restart

По адресу вашIP/phpmyadmin должно всё заработать
====Резюме====
Не претендую на точность изложения материала. Статья может содержать ошибки. ;-) \\
Получившийся сервер по производительности в разы превосходит аналогичные конфигурации с применением http сервера Apache. \\
Рекомендую использовать в локальных сетях для тестирования web приложений. \\
В данной статье не освещены вопросы взаимодействия с сайтом по FTP. Но это тема отдельной статьи. \\

Список источников информации для статьи.
  - http://habrahabr.ru/post/67557/ основа для статьи
  - http://nginx.org сайт по моему мнению лучшего на сегодняшний день http сервера

~~DISCUSSION~~

Редактировался mosadif (15.04.2013, 18:03:01)

Жалко что движок не поддерживает форматирование ДокуВики.
Редактор и форматирование слабовато.
Плавно перепилю статью. что бы было всё красиво. Времени жалко. Слишком долго.
Навряд ли буду ещё что либо сюда писать. Предлагаю сменить формат.
Кого заинтересовало Вам сюда.

Редактировался mosadif (15.04.2013, 18:05:18)

Кстати идейный вдохновитель этого движка, Artoodetoo, предлагал дать в профиле пользователю самому выбирать парсер, кто хочет - выбирает bb-code, другой - wiki-синтаксис, и прочее - т.е. можно просот подключать разметки по вкусу

Кстати идейный вдохновитель этого движка, Artoodetoo, предлагал дать в профиле пользователю самому выбирать парсер, кто хочет - выбирает bb-code, другой - wiki-синтаксис, и прочее - т.е. можно просот подключать разметки по вкусу

Да кто против. Где это всё.

пока - только в роадмапе. но я не слышал что где то это уже реализовано ещё...

Да там работы дня на 3 восьми часовых если бамбук курить. Это что бы сделать дополнительную кнопку аля конверта тор из вики в  формат разметки форума.

По существу статьи, у меня остались очень неприятные впечатления от php-fastcgi, на нем крутился один большой форум на phpBB, постоянные утечки памяти просто приводили к тому, что его надо было дергать хотя-бы раз в день :(

У меня тоже php-fpm гораздо больше понравился

 

Дизайн сайта отсутствует
оформление: Группа «САМОВАРчик»

[ Сгенерировано за 0.016 сек, 8 запросов выполнено - Использовано памяти: 1.95 MiB (Пик: 2.03 MiB) ]