Powered by CodeIgniter

Советы и решения

(55)
10
10 голосов
Решаем проблемы вместе и передаем друг другу полезные знания.

Как то закралась у меня идея установки Cogear на Nginx.
Nginx как я слышал, используется в множестве высоконагруженных проектов, и он менее прожорлив в ресурсах нежели apache, что для меня было довольно ощутимым аргументом в пользу него.
Связку устанавливал на VDS:588Mhz\200Mb debian-5.0-x86_64 стоимостью 6$/мес.

UPD. Добавил сайт для теста. Постов(2996), юзеров(1001), сообществ(1000), комментариев(5980), связей между юзерами и сообществами(11881).
Оценить можно здесь.

Все доступные мне образы шли с уже установленным веб-сервером apache, поэтому первым делом я его удалю.
/etc/init.d/apache2 stop apt-get remove --purge apache2
Далее обновляем список пакетов.
apt-get update

Установка пакетов.


Общие пакеты, необходимые для установки Nginx и eAccelerator.
apt-get install build-essential libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev libperl-dev

Nginx.

Устанавливаем:
cd /tmp wget http://sysoev.ru/nginx/nginx-0.7.67.tar.gz tar zxvf nginx-0.7.67.tar.gz cd nginx-0.7.67 ./configure --prefix=/usr/local/nginx --with-cc-opt="-I /usr/include" --with-ld-opt="-L /usr/lib" --with-http_stub_status_module --with-http_realip_module --with-http_perl_module --with-http_ssl_module make make install
Создаем файл "/etc/init.d/nginx",
с таким содержимым:
#! /bin/sh 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 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
Заменяем содержимое "/usr/local/nginx/conf/nginx.conf",
на такое(обязательно измените site.com):
user www-data www-data; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 80; server_name site.com; charset utf-8; access_log logs/www.access.log; root /var/www; location = / { rewrite ^ /index.php/ last; } location = /index.php { rewrite ^ /index.php/ last; } location / { try_files $uri /index.php$uri; } location /index.php { internal; root /var/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_ignore_client_abort off; fastcgi_buffers 300 5K; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } location ~* \.php$ { root /var/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_ignore_client_abort off; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_buffers 300 5K; include fastcgi_params; } } }
Делаем исполняемым, добавляем в автозагрузку и запускаем:
chmod 755 /etc/init.d/nginx update-rc.d nginx defaults /etc/init.d/nginx start

PHP.

Устанавливаем:
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-json php5-mcrypt php5-memcache php5-dev
Открываем "/etc/php5/cgi/php.ini".
Меняем
;cgi.fix_pathinfo=0 на
cgi.fix_pathinfo=1
Создаем "/etc/init.d/php-fastcgi".
Запишем туда:
#! /bin/sh 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 [ -x "$DAEMON" ] || exit 0 [ -r /etc/default/$NAME ] && . /etc/default/$NAME . /lib/init/vars.sh . /lib/lsb/init-functions if [ "$START" != "yes" -a "$1" != "stop" ]; then log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes" exit 0 fi export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT" do_start() { 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() { start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 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 ;; *) log_end_msg 1 ;; esac ;; *) log_end_msg 1 ;; esac ;; *) echo "Usage: $scriptNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac
Создаем еще один файл "/etc/default/php-fastcgi"
START=yes EXEC_AS_USER=www-data FCGI_HOST=localhost FCGI_PORT=9000 PHP_FCGI_CHILDREN=5 PHP_FCGI_MAX_REQUESTS=1000
Делаем исполняемым, добавляем в автозагрузку и запускаем:
chmod 755 /etc/init.d/php-fastcgi update-rc.d php-fastcgi defaults /etc/init.d/php-fastcgi start

MySQL.

Устанавливаем:
apt-get install mysql-server mysql-client

eAccelerator.

Устанавливаем:
cd /tmp wget http://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

Memcached.

Устанавливаем:
apt-get install memcached
Перезапускаем PHP и Nginx.
/etc/init.d/php-fastcgi restart /etc/init.d/nginx restart

Установка Cogear.


Эта часть подробно расписана на сайте, поэтому углубляться не буду.
cd /var/www/ wget http://cogear.ru/download/get/1/ -O cogear.zip unzip cogear.zip cp -R cogear/* ./ rm -r cogear find . -type f -exec chmod 0644 {} \; find . -type d -exec chmod 0755 {} \; chmod -R 0777 ./engine/cache ./uploads/ chown -R www-data:www-data * mysql -u root -p >mysql CREATE DATABASE `cogear` CHARACTER SET utf8 COLLATE utf8_general_ci; >mysql exit
Переименовываем "./gears/global/global.info.default" в "./gears/global/global.info" и вносим необходимые изменения. Готово! Можно пройти по адресу сайт и завершить установку.

p.s. Если тема будет интересна, можно заняться оптимизацией конфигов и сделать сравнительное тестирование.

Установка для «чайников»: nginx + php-cgi + mysql + eaccelerator + memcache на Debian 5.0 «lenny» — пост с хабра, многое взято оттуда.
Документация Nginx — сайт разработчика Nginx, Игоря
Сысоева.
19:58 ← 10 июля 2010 Отправить в Твиттер graidGraid  RSS comments 11

Комментарии (11) ↓

agoodis agoodis time 12:43 ← 11 июля 2010 #
Вообще я делаю связку нигс — апачи (фронтед и бакэнд).
Автор
Graid Graid time 14:27 ← 11 июля 2010 #
А что на сервере будет? Cogear?
agoodis agoodis time 19:12 ← 11 июля 2010 #
Да и другие cms)
Автор
Graid Graid time 21:05 ← 11 июля 2010 #
Если будут и другие cms, то лучше в связке с apache, может понадобиться рерайты для них допиливать…
agoodis agoodis time 19:12 ← 11 июля 2010 #
ну и статику nginx плохо вроде отдает.
Автор
Graid Graid time 21:09 ← 11 июля 2010 #
Как раз для статики он хорош. Иногда статикой занимается только nginx, а apache занимается динамикой. Хотя и в этом по тестам он проигрывает.
agoodis agoodis time 21:28 ← 11 июля 2010 #
Я перепутал) действительно нигс хорош в статике, но настройка рерайта у него особенная)
admin admin time 15:47 ← 19 июля 2010 #
Сайт для теста закрыт :-)
Автор
Graid Graid time 17:33 ← 19 июля 2010 #
Да извините, запустил свой сайт, экономлю ресурсы.
admin admin time 18:06 ← 19 июля 2010 #
Посмотреть сайт можно?
Автор
Graid Graid time 18:11 ← 19 июля 2010 #
Лучше через месяцок.
Немного заполню, подпилю дизайн, настрою как надо и допишу шестеренку. Вот тогда можно будет показывать ;)