Статьи Новости Контакты

26.02.2009
Марат Давлетханов

Настройка VPS в .masterhost — первые шаги

Настройка VPS в .masterhost

В этой статье я расскажу о своих первых шагах по настройке VPS, который я заказал в компании .masterhost. Здесь будут описаны только самые первые шаги по запуску своего сайта на VPS. В дальнейшем мы обязательно затронем вопросы резервирования данных и разделения прав. Не обошлось без скрытых камней, которых я надеюсь помочь вам избежать.

Заказ

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

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

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

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

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

Изначально мы получаем достаточно голый сервер с установленным 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
  </Directory>
  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
</VirtualHost>

Пока мы не настроили пользователей и права, мы должны учитывать, что все действия мы производим от 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=новый_пароль

Подготовка к тюнингу. Скачиваем с http://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-доступов к сайту.

Автор — Акжан Абдулин



Скоро на сайте

  • Wordpress

    Серия статей о плагинах к движку WordPrress
  • AJAX

    Проекты и продукты, ориентированные на AJAX
  • Новые сервисы Google

    Обзор новых сервисов Google
 

Copyright © 2003—2017 Все права защищены

При использовании материалов сайта ссылка на hostinfo.ru обязательна

  • хостинг от .masterhost
  • Rambler's Top100