- PVSM.RU - https://www.pvsm.ru -
Доброго времени суток, читатели! В данной статье я опишу структуру, которая получилась у меня в ходе размышлений о настройке виртуального рабочего пространства для сети с небольшим числом пользователей (кафедральной в университете). Основные задачи: кафедрального сайта (Drupal), собственные репозиторий и вики, файлообменник (или сетевой диск), доступ к сети вне помещений кафедры.
Данная работа преследует две цели:
Используемая система — Ubuntu 12.04 Server x64. Конфигурация физического сервера: i5 второго поколения, 8 Гб RAM, HDD 5400 1 Тб.
Drupal [2]. Исторически сложилось (tm), что сайт работает на CMS Drupal. Drupal написан на PHP, предоставляет выбор, какую базу данных использовать для хранения содержимого. Настройка Drupal вместе с MySQL и nginx на Ubuntu 12.04, например, тут [http://bikulov.org/post/49094056366/ubuntu-server-12-04-drupal-7-nginx-mysql]
RhodeCode [3] Веб-приложение для работы с репозиториями Git и Mercurial. У него есть некоторые заморочки во внутреннем строении (например, повесить хук на событие в RhodeCode весьма сложнее, чем в голом Mercurial). Однако, вы не столкнетесь с ними, пока не полезете внутрь, а это может и не понадобиться. Инструкция [4] по настройке для Ubuntu 12.04 с nginx.
DokuWiki [5] Вики-система, не использует базу данных, а хранит страницы в виде файлов на жестком диске. Причем, при добавлении файла на диск, он появляется в вики, и наоборот. Очень удобно, если хочется написать приложение для работы с вики, а разбираться с XML-RPC [6] нет времени и желания. Инструкция [7] по настройке для Ubuntu 12.04 с nginx.
ownCloud [8] Онлайн-хранилище файлов на собственном сервере (то есть «аналог Dropbox»). Позволяет внутри себя просматривать PDF и прослушивать аудиофайлы, имеет клиенты для различных платформ.
nginx [9] В качестве веб-сервера используется nginx. Это менее удобно в плане установки из репозиториев, т.к. тот же Drupal в репах Ubuntu использует Apache, поэтому первого приходится устанавливать руками.
LDAP [10] Аналог домена в Windows. Централизованная работа с учетными записями пользователей. В свое время я намучился с его настройкой (не помню уже, почему). Поэтому предлагаю вам два руководства, которые точно работают: сервера [11] и клиента [12].
VPN [13] Хорошая инструкция [14] по настройке VPN есть в серверном руководстве Ubuntu.
VirtualBox [15] Технология виртуализации роли не играет. В данной работе был выбран VirtualBox по следующим причинам: я не смог найти, почему использование VirtualBox на боевом сервере это плохо — у меня аптайм на нем достигает 2 месяцев (потом перезагрузка для установки обновлений), глюков не встречал. Спорить не буду, как наткнусь на недостатки — сконвертирую [16] vdi в raw и перейду на Xen.
Bittorrent Sync [17] Резервное копирование реализовано [18] с помощью Bittorrent Sync. Для сохранности данных (код-то закрытый!) предлагается использовать гибридное ассиметричное шифрование [19]. Ассиметричное шифрование дорого, поэтому и гибридное: генерируется длинный ключ, который сохраняется в файл. С этим ключом происходит шифрование большого файла. Файл с самим ключом затем шифруется ассиметрично.

В простейшем случае все виртуальные машины размещаются на одном физическом сервере. Этот вариант и будет описываться в дальнейшем. Используется 4 виртуальных системы и одна хостовая (hostserver), установленная непосредственно на железо.
Виртуальные системы, обозначенные на схеме vmserver-web, vmserver-dev и vmserver-drive занимаются только
Виртуальная машина vmserver-net крутит настроенные LDAP и VPN. Сетевое подключение для всех виртуальных машин — NAT. Все виртуальные машины соединены подключены между собой по VPN. Для vmserver-net проброшены заданные VPN и LDAP внутрь порты из хостовой системы.
При запросе по http/https запрос разбирается nginx на хостовой машине и, в зависимости от адреса, пересылается по внутренней VPN на нужную виртуальную машину. Использование VPN позволяет сети оставаться функциональной даже в случае, если vmserver-web, vmserver-dev и vmserver-drive будут физически находиться где-то еще. Просто добавлять новые виртуальные системы, требуется только модификация конфига nginx.
Теперь немного о безопасности: резервное копирование и шифрование. Доступ по ssh для всех машин разрешен только по ключу. Вне VPN наружу торчит только ssh хостовой машины. Доступ к виртуальным машинам по ssh возможен только внутри своей VPN. Резервное копирование представляет собой следующий набор операций на хостовой машине: пауза виртуальной машины, сжатие образа gzip'ом и гибридное шифрование полученного архива. Зашифрованные архив и файл кладутся в папку, синхронизируемую с помощью btsync между несколькими физическими машинами. (По мотивам stackoverflow предлагаю удобные скрипты: инициализация [20] (установка необходимых пакетов и генерация ключа с заданным именем), шифрование и дешифрование [21] (в случае шифрования нужно указать файл, который шифровать, и публичный ключ, оригинальный файл будет удален. В случае дешифрования нужно указать файл и приватный ключ, шифрованный файл будет удален. Имя файла с ключом симметричного шифрования будет определено автоматически.).
При резервном копировании виртуальных машин очень большой оверхед, но разворачивать такую резервную копию очень просто. А синхронизация внутри своей физической сети 3 Гб в сутки представляется незначительной (примерно столько занимает 4 архива систем сейчас).
Описанный подход позволяет, на мой взгляд, достигнуть модульности и безопасности при организации виртуального рабочего пространства. Сохранение функциональности при переносе любой из фиолетовых (vmserver-web, vmserver-dev или vmserver-drive) виртуальных машин на другую физическую машину обеспечивает масштабируемость.
С другой стороны, в комментариях хотелось бы услышать мнение сообщества по поводу такого способа организации виртуальных серверов, использованных инструментов и вопросов, обозначенных во введении.
Автор: Kenarius
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/38284
Ссылки в тексте:
[1] хостинг: https://www.reg.ru/?rlink=reflink-717
[2] Drupal: https://drupal.org/
[3] RhodeCode: http://rhodecode.org/
[4] Инструкция: http://bikulov.org/post/34548785558/setting-up-rhodecode-on-ubuntu-12-04
[5] DokuWiki: https://www.dokuwiki.org/
[6] XML-RPC: https://www.dokuwiki.org/devel:xmlrpc
[7] Инструкция: https://www.dokuwiki.org/install:nginx
[8] ownCloud: http://owncloud.org/
[9] nginx: http://wiki.nginx.org/Main
[10] LDAP: http://ru.wikipedia.org/wiki/LDAP
[11] сервера: http://www.server-world.info/en/note?os=Ubuntu_12.04&p=ldap&f=1
[12] клиента: http://www.server-world.info/en/note?os=Ubuntu_12.04&p=ldap&f=2
[13] VPN: http://ru.wikipedia.org/wiki/VPN
[14] инструкция: https://help.ubuntu.com/lts/serverguide/openvpn.html
[15] VirtualBox: https://www.virtualbox.org/
[16] сконвертирую: http://blog.sleeplessbeastie.eu/2012/04/29/virtualbox-convert-raw-image-to-vdi-and-otherwise/
[17] Bittorrent Sync: http://labs.bittorrent.com/experiments/sync.html
[18] реализовано: http://habrahabr.ru/post/184702/
[19] гибридное ассиметричное шифрование: http://askubuntu.com/questions/95920/encrypt-tar-gz-file-on-create
[20] инициализация: https://gist.github.com/anonymous/5954872
[21] шифрование и дешифрование: https://gist.github.com/anonymous/5954886
[22] Источник: http://habrahabr.ru/post/186022/
Нажмите здесь для печати.