Территория выпускников  Военного Краснознамённого Института  Министерства Обороны СССР ! 

 
ВКИМО ! Был когда-то такой - Военный Краснознамённый Институт МО СССР
 

Nginx+Php-Fpm+Eaccelerator = Perfect Linux Server !

Просьба, при использовании ставить активную ссылку на источник.

Внимание !!!  От 1 Октября 2009 г.  Этот урок устарел в части сборки и установки PHP + Php-Fpm. Скоро появится новый.

 

 

Декабрь 2009 . Всё Работает.    Продолжаем пользоватся ....  

Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных CMS (системах управления содержанием) и базе данных MySQL

Cредства; 1, Достаточно мощный компьютер: - процессор+оперативная память+обьёмный винчестер+сетевая карта = должны быть хорошими по характеристикам и достаточно современными, 2, Постоянное соединение с быстрым интернетом, 3. Зарегестрированное имя домена и наличие DNS (Domain Name Server). на котором этот домен припаркован,

Начали: Грузим OS http://www.ubuntu.com/getubuntu/download Здесь надо выбрать OS соответствующую архитектуре железа: x86 или AMD64. Я буду писать для AMD64, что впрочем подходит с небольшими изменениями и для x86 После того, как файл загрузился, надо записать его в том же формате т.е. .iso, чтобы с него можено было запускать компьютер.

Надеюсь всё прошло хорошо и сомпьютер запустился с СДишки. Предупреждаю, компьютер должен быть отведен специально для цели служить СЕРВЕРОМ. Т.е. всё, что было в нём прежде, будет утрачено !!!

Ubuntu установить очень просто, достаточно выбрать язык установки и следовать указаниям. Важно сделать правильную разметку диска. Для root или "/" достаточно 8 ГБ , swap расчитывается по формуле active RAM x 2. т.е. если общий размер оперативной памяти составляет 1 ГБ, то swap должен быть не меньше 2 ГБ. Остальное пространство отдадим /home. Там будет сидеть всё хозяйство сервера.

После того как система задышала и ты в неё вошёл первым делом добавь терминал на панель. Ну и понеслись: (Я буду писать коды для терминала, тебе надо их скопировать, вставить и нажать "enter". Свои пояснения я буду отделять запятыми, скобками или кавычками, чтобы программа их не распознала, даже если ты их по ошибке и введешь)

sudo apt-get update

sudo apt-get upgrade

(процесс получения обновлений, надо будет ввести пароль)

sudo aptitude install mysql-server

(ждём пока установится)

sudo mysql_secure_installation

(на все вопросы - yes и устанавливаем пароль, очень важно его не забыть и сделать достаточно сложныи)

(Установим дополнительные библиотеки)

sudo aptitude install build-essential libtool libltdl3-dev libgd-dev libmcrypt-dev libxml2-dev libmysqlclient15-dev flex m4 awk automake autoconf bison make libbz2-dev libpcre3-dev libssl-dev zlib1g-dev vim re2c libjpeg-dev libpng-dev

(Мы будем собирать PHP с PHP-FPM заплаткой из источника.)

cd /usr/local/src

wget http://us.php.net/get/php-5.2.10.tar.gz/from/ru.php.net/mirror

 tar xzvf php-5..10.tar.gz

wget php-fpm.org/downloads/php-5.2.10-fpm-0.5.13.diff.gz

 gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1

 cd php-5.2.10

./configure --enable-fastcgi --enable-fpm --enable-exif --with-mcrypt --with-zlib --enable-mbstring --with-openssl --with-mysql --with-mysql-sock --with-gd --with-gettext --with-jpeg-dir=/usr/lib --enable-gd-native-ttf --without-sqlite --disable-pdo --disable-reflection --with-libdir=lib64 --with-pgsql=/usr/lib/pgsql --with-mysql=/usr/lib64/mysql

(Если сборка будет жаловаться, что не хватает чего то, то можно будет найти и установить недостающее через Synaptic)

make all install

strip /usr/local/bin/php-cgi

( Теперь отрегулируем PHP-FPM, о котором хочу сказать особо. Php-fpm - это продукт напряжённого бескорыстного труда нашего соотечественника Андрея Нигматулина, И этим продуктом, как и NGINXом от Игоря Сысоева, уже пользуются миллионы админов по всему миру, несмотря на то, что мало кто из из них говорит и понимает по русски и что отсутствует подробная документация. Золото видно издалека .... И цена его понятна на любых языках )

sudo gedit /usr/local/etc/php-fpm.conf


(линия 63 убрать стрелки и тире перед и за кодом и поменять nobody на)


www-data


( то же самое для линии 66)


www-data

(Устанавливаем NGINX web server)

cd /usr/local/src

wget  http://sysoev.ru/nginx/nginx-0.7.64.tar.gz

tar xzvf nginx-0.7.64.tar.gz

cd nginx-0.7.64

(нам не нужны почтовые функции NGINX потому, что мы будем использовать внешний почтовый агент чтобы не нагружать сервер)

./configure --sbin-path=/usr/local/sbin --with-http_ssl_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module

make

make install

(настроим NGINX)

sudo gedit /usr/local/nginx/conf/nginx.conf

(см. прикрерплённый файл)

http://vkimo.org/files/nginx.txt
(Обрати внимание на "root /home/TVOI FOLDER/$host;" - здесь надо указать путь к папке, где будет сидеть всё содержание сайта. "$host" это абсолютное значение, которое вытащит и опубликует любой сайт если он зарегестрирован, находится на работающем домайн найм сервере и сидит в отдельной папке в твоей домашней папке "TVOI FOLDER" под названием твоего сайта т.е. "moisite.com". А также на "server_name " Символ " _ " - это Изумительное по простоте и удобству решение автора NGINX Игоря Сысоева http://sysoev.ru/nginx/ способа адресовать виртуальные хосты. Apache и даже Lighttpd здесь отдыхают плотно.

Теперь создадим место для содержимого нашего вебсайта и изменим соответственно /home/TVOI FOLDER/$host

sudo mkdir /home/www

sudo mkdir /home/www/точное название твоего сайта (мойсайт.ru)

sudo chmod -R tvoeimya:tvoeimya /home/www/moisite.ru (tvoeimya надо поменять на имя пользователя, под которым ты работаешь в своём сервере, Это даст тебе возможность управлять содержимым папки сайта без необходимости входить в сервер под привелегированным пользователем - root.

(Создадим также два файла внутри папки сайта)

gedit /home/www/moi site.ru/index.html

(вставить в пустой файл что-нибудь вроде - Это мой первый сайт !!! )

gedit /home/www/moisite.ru/info.php

(Вставить этот код в пустой файл сохранить и закрыть)

 

<?php
phpinfo();
?>

Продолжаем: надо отрегулировать fastcgi_params)

sudo gedit /usr/local/nginx/conf/fastcgi_params

(и в самый верх добавляем)

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

(а также выключаем, ставим "#" перед #fastcgi_param REDIRECT_STATUS 200; примочку для арача потому что мы его здесь не имеем )

(Полируем PHP код)

sudo gedit /usr/local/lib/php.ini

(вставить это в пустой файл)

_________________________________________________________________________________________

magic_quotes_gpc=0
[xcache-common]
#zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so
[xcache]
#xcache.shm_scheme = "mmap"
#xcache.size = 64M
default_charset = “utf-8″
[memcache]
#extension = memcache.so
#memcache.hash_strategy="consistent"
[memcache]
[suhosin]
#extension = suhosin.so
#extension = apc.so
#apc.shm_size = 48
[suhosin]
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -i -t
upload_max_filesize=8M
[eaccelerator]
#zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so"
#eaccelerator.shm_size="16"
#eaccelerator.cache_dir="/tmp/eaccelerator"
#eaccelerator.enable="1"
#eaccelerator.optimizer="1"
#eaccelerator.check_mtime="1"
#eaccelerator.debug="0"
#eaccelerator.filter=""
#eaccelerator.shm_max="0"
#eaccelerator.shm_ttl="0"
#eaccelerator.shm_prune_period="0"
#eaccelerator.shm_only="0"
#eaccelerator.compress="1"
#eaccelerator.compress_level="9"
[eaccelerator]

_________________________________________________________________________________________

(Как видно, большинство примочек выключено. Это на потом, потому что ни одна из тех примочек ещё у тебя не установлена. Мы это сделаем позже)

(Надо попробовать стартануть php-fpm)

php-fpm start

(Теперь NGINX)

nginx

(Если ошибок нет - будь горд собой !!!)

(Надо теперь сделать так чтобы оба сервиса запускались автоматически вместе с запуском сервера)

cd /etc/init.d/

ln -s /usr/local/sbin/php-fpm php-fpm

/usr/sbin/update-rc.d -f php-fpm defaults

(Это было просто для php-fpm, немного сложнее для NGINX)

sudo kill `cat /usr/local/nginx/logs/nginx.pid`
sudo gedit /etc/init.d/nginx

(и вставить этот код в пустой файл)

_________________________________________________________________________________________

### 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/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

_________________________________________________________________________________________

(разумеется его надо сохранить, закрыть и сделать исполняемым)

sudo chmod +x /etc/init.d/nginx
sudo /usr/sbin/update-rc.d -f nginx defaults

(Увидишь примерно такой выход):

Adding system startup for /etc/init.d/nginx ...
/etc/rc0.d/K20nginx -> ../init.d/nginx
/etc/rc1.d/K20nginx -> ../init.d/nginx
/etc/rc6.d/K20nginx -> ../init.d/nginx
/etc/rc2.d/S20nginx -> ../init.d/nginx
/etc/rc3.d/S20nginx -> ../init.d/nginx
/etc/rc4.d/S20nginx -> ../init.d/nginx
/etc/rc5.d/S20nginx -> ../init.d/nginx

(Последнее в этом уроке:

Если мы ожидаем хорошее движение на сайте, то необходимо создать файл для logrotate, который автоматически будет сжимать и удалять старые файлы и давать нам возможность контролировать кто бывал на нашем сайте)
sudo gedit /etc/logrotate.d/nginx

(вставить это в пустой файл и сохранить)

_________________________________________________________________________________________


/usr/local/nginx/logs/*.log {
daily
missingok
rotate 9
compress
delaycompress
notifempty
postrotate
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
endscript
}

_________________________________________________________________________________________

 

(Если что то не пошло - моё мыло не бомбить !!!!!

Все вопросы ставить ТОЛЬКО здесь !!!!

И "дурь каждого видна будет", и другие "стеснительные" найдут ответы на свои вопросы.

Как построить вебсайт на этом сервере будет сказано в продолжении

  Ещё проще сделать можно

 

Ещё проще сделать можно так:

При существовании www и non www домайнов на DNS сервере и необходимости сервить оба, можно пролинковать фолдер /home/www/moisait.ru  так :  ln -s /home/www/moisait.ru  /home/www/www.moisait.ru

тогда при запросах на оба сайта будет выдаваться содержание одной папки  ;)      

Можешь проверить:

http://vkimo.org/

http://www.vkimo.org/

Одна папка на одной базе данных выдает два сайта с одним содержанием. Что и требовалось доказать.

Спс

Спс

Это уже из раздела "rewrite"

Это уже из раздела "rewrite" и "virtual hosts".  Решение  "server_name     _;"   и   "root    /home/www/$host;"  даёт возможность выдавать из папки "WWW" все, что там существует и соответствует DNS данным.  Если есть необходимость сервить оба WWW and non WWW то надо прописать конфиг для этого хоста и включить его в nginx.conf   в таком виде: 

include sites-enabled/*;    создать папку  sites-enabled  в папке nginx и прописать туда файл  site.ru примерно такого содержания:

server {
        listen :80;

server_name                        www.site.ru    site.ru;

         root   /home/www/МОЁВСЁ/;

        access_log /var/log/nginx/blah;

 Здесь мусор любого характера соответствующий твоим потребностям
        # Serve directly: /images/ + /css/ + /js/
        #
        location ^~ /(images|css|js) {
                root /home/www/site.ru/;
                access_log /var/log/nginx/blah.direct.log ;
        }

        #
        # Serve directly: *.js, *.css, *.rdf,, *.xml, *.ico, & etc
        #
        # location ~* ^.+\.(jpe?g|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|avi|mp3)$ {
        #expires 1d;
        location ~* \.(js|css|rdf|xml|ico|txt|gif|jpg|png|jpeg)$ {
                root /home/www/site.ru/;

                access_log /var/log/nginx/blah.ru.log ;
        }

Домен существует, с этим все

Домен существует, с этим все ок.

Я имею ввиду, что если созадть папку site.ru, то на www.site.ru сайт отвечать не будет, ну и наоборот соотвественно.

В первую очередь надо

В первую очередь надо убедиться, что хост существует на  DNS сервере. Примерно так:

 apt-get install whois

потом выясняем так

 whois vkimo.org  (Здесь твой реальный зарегестрированный сервер)

такой выход:   Domain ID:D153393848-LROR

Domain Name:VKIMO.ORG
Created On:19-Jul-2008 03:44:46 UTC
Last Updated On:19-Jul-2009 22:02:25 UTC
Expiration Date:19-Jul-2010 03:44:46 UTC
Sponsoring Registrar:Dynamic Network Services, Inc. (R1450-LROR)
Status:CLIENT TRANSFER PROHIBITED
Status:CLIENT UPDATE PROHIBITED
Registrant ID:DYNSREG4742
Registrant Name:Secret Registration vkimo.org
Registrant Organization:Secret Registration
Registrant Street1:c/o vkimo.org
Registrant Street2:816 Elm Street Box 606
Registrant Street3:
Registrant City:Manchester
Registrant State/Province:NH
Registrant Postal Code:03101
 
И так далее. ...........Много разной другой инфы.
 
Ну а если так:
 
  whois site.ru
 
# By submitting a query to RIPN's Whois Service
# you agree to abide by the following terms of use:
 
domain:     SITE.RU
type:       CORPORATE
nserver:    ns.informika.ru.
nserver:    ns.ins.ru.
state:      REGISTERED, DELEGATED, VERIFIED
org:        AARDVARK Ltd
phone:      +ЧЧЧЧЧЧЧЧЧЧЧЧЧЧЧЧЧЧЧ
phone:      +ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
fax-no:     +ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ
e-mail:     ХХХХХХХХХХХХХХХХХХХХХ
e-mail:     ХХХХХХХХХХХХХХХХХХХХХ
registrar:  RUCENTER-REG-RIPN
created:    1996.11.09
paid-till:  2010.12.01
source:     TCI
Last updated on 2010.01.24 10:44:33 MSK/MSD
 
    Видно что сайт существует и припаркован на DNS. Осталось только выяснить, что DNS сервер указывает на твой реальный IP address. Это уже с контрольной панели твоего DNS service провайдера. Там должна быть функция обновления IP адреса с которого работает твой личный сервер.
 
А чтобы проверить работоспособность системы вообще, поставь в папку сервера папку "localhost" с каким-либо оригинальным содержанием. Eщё можно папку в корневой папке сервера обозвать твоим IP адресом, который ты сконфигурировал для сервера в /etc/hosts и для сети в /etc/network/interfaces. Тогда при запросе localhost или  192.168.0.XXX из браузера, откроется именно то содержание, которое ты туда поставил. Но все запросы на localhost будут правильно обработаны только если они сделаны с той же машины, на которой стоит сервер, а на 192.168.X.XXX только c локальной сети.  Не забывай делать рестарт nginx, если менял нетворк или хост, а также php-fpm, если менял установки в php или ставил какой-либо CMS. Также проверь открыт-ли HTTP порт 80 (или любой другой порт на котором твой сервер), если у тебя стоит раутер или файрвол.
 
Валерий.

Большое спасибо за статью,

Большое спасибо за статью, очень помогла.

Но есть один вопрос.

При указании $host в файле nginx, и создании папки сайта site.ru он не будет откликаться на www.site.ru
Что можно сделать в данной ситуации ?

По поводу

По поводу примочек,Вы написали:
>Это на потом, потому что ни одна из тех примочек ещё у тебя не установлена. Мы это сделаем позже.

хотел бы разобраться с этими примочками, если не трудно напишите.

Очень

Очень пожалуйста !! Рад за то, что эта строчка облегчила Вам жизнь ;))
Выкрою время, напишу про memcached подробно. Просто его поставить ещё мало. Надо заставить его работать как он может и должен.

Спасибо за

Спасибо за строку:
extension = memcache.so

что-то я видимо совсем перегрелся пока nginx и php-fpm ставил :) час мучался, пока не нашел ваш сайт. Спасиб )

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Строки и параграфы переносятся автоматически.
  • Allowed HTML tags: <a> <b> <address> <blockquote> <br> <caption> <center> <code> <dd> <del> <div> <dl> <dt> <em> <font> <h2> <h3> <h4> <h5> <h6> <hr> <i> <img> <li> <ol> <p> <pre> <span> <strong> <sub> <sup> <table> <tbody> <td> <tfoot> <th> <thead> <tr> <u> <ul> <tr>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
CAPTCHA
Покажи что ты человек, пришедший сюда с добрыми намерениями.
9 + 2 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.
 
 
by R & T