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
}
Our Developer eBook, Maximizing Your Java Application Development, will help you in understanding these issues and how you can get the most out of your Java code, whether it’s porting from another language, working in the best IDE or optimizing for today’s multi-core computing environments.