Pull to refresh

Настраиваем VPS у хостинг провайдера Masterhost

Коротко о главном


Несколько дней назад наш отдел убедил руководство о покупке нескольких VPS. По началу нам казалось что это будет долгий и усердный бой разговор с начальством. Нам предстояла задача объяснить доступным языком руководству, для чего нам нужны VPS, т.к. в серверной стоят 7 полноценных мощных сервантов серверов. Объяснять долго не пришлось. Надежды на нас большие так что все для нас. Заказали vps у masterhost(не сочтите за рекламу т.к. работаем с ними уже давно и услуги данной компании нас удовлетворяют полностью). После этого и возникла мысль написать данный топик по настройке т.к. правильная конфигурация сервера залог здоровья сервера успешной работы сервера и можно сказать маршрут который покажет Вам правильное решение что бы не наступить на грабли.

Поехали


После того как заказал VPS (Fedora Core 7, тарифный план VPS Standard, без Plesk). Поддерживать DNS мы предпочли через сервер .masterhost, поэтому зашел в контрольной панели в «Персональные услуги и настройки» и включил там услугу «Поддержка DNS (клиента)». Обходится это в 0,25 доллара независимо от числа доменных зон.

Использовать Plesk мы посчитали невыгодным, так как настроить все можно и без него, а эта панель использует немало ресурсов, что особенно заметно на младших тарифных планах.

Операционную систему Fedora Core 7 выбрали случайным образом (как предлагаемую по умолчанию), и все последующие шаги имеют смысл, скорее всего, только по отношению к ней.

Установка необходимого программного обеспечения.


Изначально мы получаем достаточно голый сервер с установленным Apache 2.x. Естественно, такая конфигурация крайне неэффективна. Поэтому мы установили связку nginx + Apache. Кроме того, обычно нам потребуется также PHP и MySQL.

Сразу после получения в свои руки сервера он еще не был готов к работе, в фоновом режиме выполняется установка минимального набора пакетов, включая yum. Это может занять до 10–30 минут. Поэтому, если вы увидите на экране сообщение, что команда yum неизвестна, просто немного подождите.

Заходим в консоль ssh (под Windows к примеру с помощью putty), далее выполняем команду:

yum install nginx

Для установки nginx с настройками по умолчанию она нам подходит.
Установим PHP:

yum install php

Установим MySQL и расширения MySQL для PHP:

yum install -y mysql-server php-mysql

Установим eAccelerator для PHP (это резко повысит производительность PHP):

yum install php-eaccelerator

Для некоторых сайтов требуется одна из библиотек для работы с изображениями. Нам то для одного из сайтов потребовался ImageMagick, который ставится вот такой командой:

yum install ImageMagick

Если он вам не нужен, лучше не ставить — тянет множество зависимостей.
Кроме того, нам нужно установить mod_rpaf для Apache, чтобы им корректно определялись исходные IP-адреса клиентов. К сожалению, пакета yum для него мы не нашли, пришлось ставить через rpm/apxs:

yum install httpd-devel
cd /usr/local/src/
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar -xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c


Теперь мы имеем необходимый набор программного обеспечения. Осталось его настроить.

Первичная настройка

Настройки мы сделаем, исходя из возможности держать на одном VPS несколько сайтов.
Редактор DNS. Открываем контрольную панель .masterhost, ищем в меню DNS-зоны и переходим к редактированию DNS домена (далее для примера mysite.ru). Создайте такой набор записей:

@ IN A mysite.ru IP-адрес VPS.
www IN CNAME mysite.ru.


Настройка Apache

Все настройки находятся в каталоге /etc/httpd.
Для начала остановим Apache:

service httpd stop

Прослушивание портов. Теперь настроим Apache на прослушивание только локальных запросов, например по порту 8080. Для этого найдем в файле /etc/httpd/conf/httpd.conf строчку, начинающуюся с Listen, и заменим на такую:

Listen 127.0.0.1:8080

Настройка mod_rpaf. В каталоге /etc/httpd/cond.d/ создадим файл mod_rpaf.conf следующего вида:

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On

# Enable reverse proxy add forward RPAFproxy_ips YOUR_PROXY_SERVER_IP_LIST_OR_ONE_IP
# which ips are forwarding requests to us

RPAFsethostname Off

# let rpaf update vhost settings
# allows to have the same hostnames as in the "real"
# configuration for the forwarding Apache

RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP


Небольшая настройка PHP. В файле /etc/httpd/conf.d/php.conf строчку:

AddType text/html .php

заменяем на:

AddType application/x-httpd-php .php

Настройка сайта

Чтобы разрешить именованные сайты, в файле /etc/httpd/conf/httpd.conf заменяем строчку:

#NameVirtualHost *:80

на:

NameVirtualHost *

После этого в каталоге /etc/httpd/cond.d/ создадим файл mysite.ru.conf следующего вида:

<VirtualHost *>
ServerName mysite.ru
ServerAlias www.mysite.ru
DocumentRoot /home/mysite.ru/www
ErrorLog /home/mysite.ru/logs/mysite.ru.error_log
<Directory "/home/mysite.ru/www">
AllowOverride All
Options +Includes

php_admin_value open_basedir /home/mysite.ru/
php_admin_value doc_root /home/mysite.ru/www
php_value session.save_path /home/mysite.ru/sessions
php_admin_value upload_tmp_dir /home/mysite.ru/tmp/
php_value display_errors 1
php_admin_value magic_quotes_gpc 0


Пока мы не настроили пользователей и права, мы должны учитывать, что все действия мы производим от root, в то время как Apache работает от имени другого пользователя. Разбираться с правами мы пока не будем, поэтому служебные папки для Apache создадим с правами для всех:

cd /home
mkdir mysite.ru
cd mysite.ru/
mkdir www tmp sessions logs
chmod 777 logs sessions tmp


Проверка и запуск. Напоследок проверим конфигурацию:

service httpd configtest

Должны получить:

Syntax OK

Запустим Apache:

service httpd start

Настройка nginx

Файлы конфигурации nginx находятся в каталоге /etc/nginx/.
Настройка форвардинга. В файле /etc/nginx/nginx.conf полностью удаляем секцию server (перед ее началом комментарий вида # The default server).

Создадим в каталоге /etc/nginx/conf.d/ файл mysite.ru.conf следующего вида:

#
# A virtual host using mix of IP-, name-, and port-based configuration
#

server {
listen mysite.ru:80;
server_name www.mysite.ru;

location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
log_not_found off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}


Проверка и запуск. Теперь мы (при условии, что изменения DNS, выполненные нами ранее, уже разошлись по серверам DNS) можем проверить работоспособность конфигурации:
service nginx configtest

И запустить nginx:

service nginx start

Проверка настроек

На данном этапе должна уже корректно работать связка nginx + Apache + PHP. Проверить это можно, создав файл /home/mysite.ru/www/index.php следующего содержания:

<?php
phpinfo();
?>


Заходим на сайт. Должна появиться информация PHP о нашей связке.

Проверьте следующее:

1. В секции Apache Environment переменная REMOTE_ADDR указывает на ваш IP. Это означает корректную настройку nginx и mod_rpaf.
2. Секция eAccelerator присутствует. Это означает, что PHP будет работать с высокой производительностью.
3. Присутствуют секции mysql и mysqli. Это означает корректную установку MySQL для PHP.

Настройка MySQL

Все настройки сервера находятся в файле /etc/my.conf.

Первичная настройка. Запускаем MySQL:

service mysqld start

В первую очередь надо сменить пароль администратора для MySQL:

/usr/bin/mysqladmin -u root новый_пароль

Вход по умолчанию. В будущем нам полезно будет заходить на консоль MySQL без указания данных из консоли, поэтому создадим файл /root/.my.cnf с таким содержимым:

[client]
user=root
password=новый_пароль


Подготовка к тюнингу. Скачиваем с www.day32.com/MySQL скрипт MySQL Performance Tuning Primer Script. Положим его в /root и сделаем пробный запуск:

cd
chmod +x tuning-primer.sh
./tuning-primer.sh


В результате должен появится некий набор информации. Пока важно, чтобы самой первой строкой там было:

mysqld is alive

После того как мы запустим сайт, через некоторое время этот скрипт сможет дать хорошие рекомендации по тюнингу нашего MySQL-сервера.

Создание базы данных. Пришла пора создать базу данных:

mysql
CREATE DATABASE mysite;
GRANT ALL PRIVILEGES ON mysite.* TO 'mysite_user'@'localhost' IDENTIFIED BY 'mysite_user_password';
\q


Теперь мы имеем базу данных mysite, доступную только с этой VPS пользователю mysite_user с паролем mysite_user_password.

Можно начинать работать.
Оптимизация
GZip-сжатие

Дописываем эти строки после начала определения сервера в файле /etc/nginx/conf.d/mysite.conf:

gzip on;
gzip_min_length 1024;
gzip_types text/html text/xml text/css application/x-javascript text/javascript;


Теперь выходные данные этих MIME-типов будут сжиматься перед передачей, если клиент способен корректно понять сжатые данные.

Отдача статики через nginx

Предположим, у нас есть три варианта статичных файлов — периодически изменяемые, никогда не изменяемые и редко изменяемые. Периодически изменяемые лучше отдавать без особых ухищрений. Предположим, мы хотим отдавать так скрипты из соответственно ссылок /js, /jss и /jsv. Причем для редко изменяемых файлов запрос к файлу идет, например, как /jsv/myscript.js|v2 (номер версии задается в теге script[@src], и при изменении файла надо этот номер версии каким-то образом инкрементировать), и каждая версия отдается как expires max. Физически мы расположим эти файлы в следующих каталогах:

/home/mysite.ru/static/js
/home/mysite.ru/static/jss
/home/mysite.ru/static/jsv0


Тогда в файле /etc/nginx/conf.d/mysite.conf выше блока

location / {
...
}


разместим следующие строки:

location /jsv/ {
rewrite ^/jsv/(.*)\|.+ /jsv0/$1;
}

location /js/ {
root /home/mysite.ru/static;
access_log off;
}

location /jss/ {
root /home/mysite.ru/static;
access_log off;
expires max;
}

location /jsv0/ {
root /home/mysite.ru/static;
access_log off;
expires max;
internal;
}


Естественно, файлы надо физически поместить в этих каталогах:

cd /home/mysite
mkdir static
cd static
mkdir js jss jsv0


Теперь эти файлы будут грамотно отдаваться через nginx.

После каждой модификации конфигурации нужно отдавать команду на ее перечитывание:
service nginx reload

Увеличение лимитов Apache

В файле /etc/httpd/conf/httpd.conf ищем секцию и немного увеличиваем значения (MaxRequestsPerChild лучше, наоборот, уменьшить). Например, таким образом (по умолчанию настройки слишком зажаты, мы же здесь увеличим лимиты, используя попутно больше оперативной памяти):

StartServers 5
MinSpareServers 5
MaxSpareServers 15
ServerLimit 30
MaxClients 30
MaxRequestsPerChild 200
MaxKeepAliveRequests 50
KeepAliveTimeout 5


И, как, обычно, после этого необходимо выполнить перезапуск:

service httpd restart

Оптимизация MySQL

Через несколько дней после начала работы с базами данных запустите вышеописанный скрипт тюнинга MySQL и следуйте его рекомендациям. Обычно этого достаточно.

Вот в принципе и все. Конечно можно также создать политики резервного копирования данных, FTP доступы и т.д. но это уже немного другая история. Основные настройки были сделаны. Так что удачи в Ваших начинаниях и Вашим проектам.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.