Порой каждый задумывается начать зарабатывать деньги своим умом в интернете. Один из самых простых вариантов для человека обладающего базовыми навыками в администрировании Linux – предоставление виртуального хостинга. Для этого достаточно взять в аренду выделенный сервер, желательно помощнее, и установить на нем ОС + OpenVZ.

0. Введение
А теперь по порядку. Для начала необходимо установить операционную систему на сервер. Мой выбор пал на Ubuntu 9.04 Server, так как это самая свежая стабильная версия. Далее необходимо установить на нее виртуальную машину – OpenVZ. Особенностью OpenVZ является то, что виртуализация происходит на очень низком уровне, за счет чего достигается высокая производительность гостевых систем. Однако для достижения высокой производительности придется использовать специальную версию ядра, так что не бойтесь если при установке OpenVZ предложит скачать новую версию ядра. Далее необходимо скачать образ гостевой системы, которая и будет разворачиваться на виртуальной(гостевой) машине. И еще, для полноценной работы VPS как сервиса, который будет приносить деньги, необходимо каждому виртуальному серверу выдать по IP адресу.
Итак, преимущества виртуальных серверов в том, что они предоставляют изолированное окружение, и клиенты получают рутовый пароль на систему. Так-же следует отметить что в таком случае безопасность внутри виртуальных машин будут отвечать сами клиенты, а злоумышленник с рутовым доступом на виртуальной машине не сможет навредить физическому серверу или соседним виртуальным машинам.
Важно постараться поставить как можно меньше программного обеспечения на физический сервер, в идеале это только OpenVZ и OpenSSH.
Ну а теперь непосредственно процедура установки и настройки OpenVZ (в моих примерах предполагается что у вас установлена свежая Ubuntu 9.04 Server, без дополнительного ПО):
1. Подготовка места на диске для хранения виртуальных машин
Для удобства работы и масштабируемости сервера рекомендуется иметь отдельный жесткий диск ( а лучше два, в рейде, для зеркалирования данных пользователя). Предлагаю в корне создать директорию /vz. В эту директорию монтировать жесткий диск. Для этого в /etc/fstab необходимо добавить строчку:
/dev/sdb1 /vz ext3 defaults 0 0
где /dev/sdb1 – ваш жесткий диск для хранения виртуальных машин.
2. Установка ядра системы с поддержкой виртуализации
Для этого стоит выполнить команду:
# apt-get install vzctl
пакетный менеджер автоматически подтянет ядро с поддержкой openvz нужной версии. В моем случае был установлен linux-image-2.6.26-2-openvz.
После перезагрузки необходимо произвести настройку ядра, редактируем файл /etc/sysctl.conf и меняем следующие строки:
net.ipv4.ip_forward=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
kernel.sysrq = 1
После сохранения файла необходимо применить новые параметры ядра:
# sysctl -p
3. Установка виртуальной машины (гостевой системы)
Для начала необходимо скачать образ операционной системы, которая будет использоваться в гостевой системе. Для этого выбираем на образ на сайте http://openvz.org/download/template/cache/ и скачиваем его в директорию /vz/template/cache:
# mkdir -p /vz/template/cache
# cd /vz/template/cache
# wget http://download.openvz.org/template/precreated/ubuntu-9.04-x86_64.tar.gz
В моем случае для гостевой операционной системы была выбрана Ubuntu 9.04.
Далее необходимо создать непосредственно виртуальную машину, на основе нашего образа. Так как на VPS хостинге эту задачу надо будет повторять неоднократно, удобно использовать скрипт:
root_pw="root_password" # пароль пользователя root в гостевой системе
os_template="ubuntu-9.04-x86_64" # имя образа ОС для гостевой системы
vm_id="1" # идентификатор гостевой системы
/usr/sbin/vzctl create ${vm_id} --ostemplate ${os_template} --config vps.basic #создание гостевой системы на основе образа
/usr/sbin/vzctl set ${vm_id} --onboot yes --save # запускать гостевую при старте системы
/usr/sbin/vzctl set ${vm_id} --hostname vps${vm_id}.domain.com --save #установить hostname гостевой
/usr/sbin/vzctl set ${vm_id} --ipadd 192.168.1.190 --save #установить IP адрес
/usr/sbin/vzctl set ${vm_id} --nameserver 192.168.1.12 --save #установить адрес ДНС сервера
/usr/sbin/vzctl set ${vm_id} --userpasswd root:${root_pw} --save #установить пароль пользователя root
/usr/sbin/vzctl set ${vm_id} --cpulimit 15 --save #установка процессорной квоты 15%
#установка дисковой квоты 9 GB (10 GB в течении промежутка 600 секунд)
/usr/sbin/vzctl set ${vm_id} --diskspace 9000000:10000000 --save
/usr/sbin/vzctl set ${vm_id} --quotatime 600 --save
#установка квоты на виртуальную память 160M (168M в течение quotatime - см.выше)
#с гарантией выделения до 120M (128M)
/usr/sbin/vzctl set ${vm_id} --privvmpages 160M:168M --save
/usr/sbin/vzctl set ${vm_id} --vmguarpages 120M:128M --save
/usr/sbin/vzctl start ${vm_id} #запуск новой гостевой системы
Все, теперь в гостевую систему можно логинится по ssh.

Ubuntu 9.04 Server изначально содержит патч OpenVZ?
и вместо make -p /vz/template/cache должно быть mkdir
Нет, изначально Ubuntu 9.04 Server не содержит патч OpenVZ. mkdir -p /vz/template/cache вставил в статью. Спасибо за поправку.
В статье написано:
«И еще, для полноценной работы VPS как сервиса, который будет приносить деньги, необходимо каждому виртуальному серверу выдать по IP адресу.»…
p-адресс, видимый из интернета? или же в локальной сети? И еще вопрос: Мне оень интересна эта тема, возможно ли как-то связатсяс автором статьи «на прямую»? например, по icq|skype?
IP адреса должны быть видимыми из интернета. Суть в том, что б у каждого виртуального сервера был свой собственный IP к которому можно будет привязать домен. Только тогда, к примеру, сайт на таком сервере станет доступен пользователям интернета.
По поводу связи – можно имейлами boffin (a) ukr.net. А вообще вопросы лучше в коментариях задавать, что б другие посетители тоже видели.
Поясните, пожалуйста вот эту строку:
«/usr/sbin/vzctl set ${vm_id} –cpulimit 15 –save #установка процессорной квоты 15%»
в документации OpenVZ написано что ядра выше 2.6.18 не поддерживают cpulimit, а в ubuntu 9.04 ядро 2.6.28.
Получается что эта строка бесполезна и квота CPU работать не будет.
Да, все верно, ядра выше 2.6.18 не поддерживают cpulimit и следовательно квота CPU работать не будет. При установке OpenVZ все равно необходимо ставить пропатченное ядро. Следовательно на стадии установки можно поставить 2.6.18. На свежих ядрах единственный способ квотировать процессор – использовать cpuunits, хотя это не даст такой точной настройки как cpulimit, но все-же позволит делить процессор между виртуальными машинами.
Разобрался…
В общем-то cpulimit не панацея, cpuunits использовать логичнее в моем случае.
У меня рабочий сервер с хостингом под Debian 5.0 и ядро 2.6.26, откатываться на ядро 2.6.18 стало бы проблематично и не практично.
Водрузил на него openvz и сделаю перераспределение нагрузки через cpuunits, в таком случае у каждой ноды не будет жестко ограничен CPU, а будет плавающее перераспределение нагрузки.
А если кому-то необходимо жесткое выделение %CPU, то следует использовать XEN.
Спасибо за ответ.
а есть вообще какое-то сравнение?
kvm xen openvz quemu… вот такие детали «жесткое выделение %CPU – XEN» особо интересно