Nginx+Php-Fpm+Eaccelerator = Perfect Linux Server !
Цель: Построить быстрый и надёжный сервер, способный обслуживать несколько больших динамичных вебсайтов основанных на современных 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ом от Игоря Сысоева, уже пользуются миллионы админов по всему миру, несмотря на то, что мало кто из из них говорит и понимает по русски и что отсутствует подробная документация. Золото видно издалека …. И цена его понятна на любых языкахMoney mouth )
sudo gedit /usr/local/etc/php-fpm.conf
(линия 63 убрать стрелки и тире перед и за кодом и поменять nobody на)
www-data
( то же самое для линии 66)
www-data
(Устанавливаем NGINX web server)
cd /usr/local/src
wget sysoev.ru/nginx/nginx-0.7.61.tar.gz
tar xzvf nginx-0.7.61.tar.gz
cd nginx-0.7.61
(нам не нужны почтовые функции 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
(Вставить этот код в пустой файл сохранить и закрыть)
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
}