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
}
_________________________________________________________________________________________
(Если что то не пошло - моё мыло не бомбить !!!!!
Все вопросы ставить ТОЛЬКО здесь !!!!
И "дурь каждого видна будет", и другие "стеснительные" найдут ответы на свои вопросы.
Как построить вебсайт на этом сервере будет сказано в продолжении
- 4783 просмотра

Ещё проще сделать можно
Ещё проще сделать можно так:
При существовании 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
Большое спасибо за статью,
Большое спасибо за статью, очень помогла.
Но есть один вопрос.
При указании $host в файле nginx, и создании папки сайта site.ru он не будет откликаться на www.site.ru
Что можно сделать в данной ситуации ?
По поводу
По поводу примочек,Вы написали:
>Это на потом, потому что ни одна из тех примочек ещё у тебя не установлена. Мы это сделаем позже.
хотел бы разобраться с этими примочками, если не трудно напишите.
Очень
Очень пожалуйста !! Рад за то, что эта строчка облегчила Вам жизнь ;))
Выкрою время, напишу про memcached подробно. Просто его поставить ещё мало. Надо заставить его работать как он может и должен.
Спасибо за
Спасибо за строку:
extension = memcache.so
что-то я видимо совсем перегрелся пока nginx и php-fpm ставил :) час мучался, пока не нашел ваш сайт. Спасиб )
Отправить комментарий