Jump to content

Волчьи заметки

Sign in to follow this  
  • entries
    57
  • comments
    9
  • views
    64441

Шаринг web сервера через VirtualBox

Belkir

465 views

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

 

Суть проблемы
Когда вы являетесь веб-разработчиком, вас постоянно преследует одна очень рутинная задача - кроссплатформенная разработка продукта. Как известно в мире 2 ведущих системы, на которых могут быть развернуты веб-сервера: Windows и Unix. Обе имеют характерные отличия в своих архитектурах (к примеру: файловая система и работа с параллельными потоками), что делает процесс разработки веб-приложения муторным и запарным с той точки зрения, что вам постоянно приходится тестировать своё творение на обеих платформах дабы гарантировать безотказную работу на всех серверах.

 

Идея
Мой сервер развернут на Windows 2012 R2 (нет, я не считаю что unix лучше windows или наоборот! - я просто хорошо умею работать на windows, а времени изучать unix углубленно у меня нет) и мне постоянно приходится вести цикл разработки итерационно: написал кусок приложения под windows, понёс это все на unix и оттестировал там. Сложно, муторно, рутинно. Появилась идея: расшарить папку проектов в unix систему и там её подцепить локальным web-сервером. Тогда проектируя приложение под Windows можно сразу его тестировать на обеих платформах без переноса кода и постоянной беготни.

 

Тёмная сторона проблемы
За эту неделю я отбил себе все конечности на граблях и капканах погребенных в обеих платформах. Как оказалось, заставить обе платформы исправно работать с одной директорией сложнее, чем научить собаку считать до десяти. У меня постоянно либо не было доступа к директории на unix, либо сервер не видел директорию, либо что-то не монтировалось в файловую систему или происходила иная магия.

 

Реализация
Как показывает жизни - unix никогда не настраивается по одной инструкции: каждая новая версия той или иной системы с легкостью может перестать работать, даже если вы все делаете по инструкции. Так было и у меня - ни одна инструкция из сети полноценно не решала проблему. Пришлось "курить маны" самому. Я буду объяснять проблему и её решение на примере следующей связки ПО:

  • Физический сервер Windows 2012 R2 (далее PS)
  • На физ.сервере установлена VirtualBox (далее VB)
  • На VirtualBox установлен виртуальный сервер Linux Mint (далее VS)
  • На PS расшарена папка с проектами для VS


Шаг по установке VirtualBox под Windows я пропускаю, ибо если вы не знаете как его устанавливать, то вам уже не важно что такое web разработка или программирование в целом ;)

 


Итак, имеем:

  • Директория с проектами D:\Web\
  • VB с установленной в неё VS
  • Стандартная связка Apache+Php+MySQL установленная на PS и VS

 


Шаг-1 (Установка доп.ПО)

 

Первое что нам необходимо сделать это установить средства гостевой OS VB для VS. Кстати на последней версии Kubuntu (на данный момент это 15.10) у меня они не смогли установиться, что и вызвало переезд на Linux Mint (в данный момент это 17.3). Делается это просто:

  1. Запускаем VS
  2. В окне VB для текущего VS выбираем: Устройства -> Подключить образ диска дополнений гостевой ОС
  3. Устанавливаем дополнения гостевой ОС в систему
  4. Выключаем VS


blogentry-1-0-13531600-1452855146_thumb.

 


Шаг-2 (Шаринг папки)

 

Далее нам необходимо прокинуть папку с проектами из PS на VS. Для этого делаем следующее:

  1. В свойствах выключенной VS в VB переходим в раздел "Общие папки"
  2. Добавляем новую папку указывая реальную директорию в PS и имя общего ресурса для VS
  3. Ставим галочку на "Создать постоянную папку"
  4. Снимаем остальные галочки


blogentry-1-0-59680900-1452855610_thumb.

 


Шаг-3 (Настройка групп VS)

 

Далее необходимо внести пользователя vboxsf на VS в группу www-data. Это позволит web-серверу иметь доступ к директориям, которые шарятся с помощью VB.

  1. Запускаем VS
  2. Открываем терминал
  3. Пишем: sudo gedit /etc/group
  4. Находим в открывшемся файле: vboxsf:x:<число>:
  5. Заменяем найденное на: vboxsf:x:<число>:www-data
  6. Cохраняем файл
  7. Перезагружаем VS


blogentry-1-0-40729300-1452857166_thumb.

 


Шаг-4 (Автоматическое подключение модуля vboxsf)

 

Для монтирования общего ресурса предоставленного модулем vboxsf необходимо чтобы этот модуль загружался автоматически. По-умолчанию он грузится по требованию. Исправляем это так:

  1. Открываем терминал и пишем: sudo gedit /etc/modules
  2. В открывшемся файле перед всеми модулями добавляем: vboxsf
  3. Сохраняем файл


blogentry-1-0-27068200-1452857191_thumb.

 


Шаг-5 (Монтирование директории)

 

Далее нам необходимо примонтировать к VS общий ресурс расшаренный ренее через VB из PS. Напомню, что выше мы отказались от автоматического монтирования средствами VB (он монтирует своей командой, которая нам не подходит)! Наши действия таковы:

  1. Открываем терминал в VS и пишем: sudo cat /etc/passwd | grep 'www-data'
  2. Запоминаем цифровые идентификаторы после второго (uid) и третьего (gid) двоеточий
  3. Пишем команду монтирования: mount -t vboxsf -o rw,uid=<ваш uid>,gid=<ваш gid> web /media/sf_web


Предыдущая команда подключила к системе общий ресурс. Но это действие отвалится после перезагрузки VS. Исправляется это добавлением команды постоянного монтирования в fstab службу VS:

  1. В терминале пишем: sudo gedit /etc/fstab
  2. Добавляем в конец файла команду постоянного монтирования ресурса: web /media/sf_web vboxsf auto,rw,uid=<ваш uid>,gid=<ваш gid>0 0
  3. Сохраняем файл
  4. Перезагружаем VS


Учтите, что имя общего ресурса "web" зависит от настройки общих папок для VS в VB!

 

blogentry-1-0-33011300-1452857545_thumb.

 


Шаг-6 (Настройка виртуального хоста web-сервера)

 

Далее нам необходимо настроить web-сервер так, чтобы он загружал содержимое примонтированной директории. Для этого делаем следующее:

  1. В терминале пишем: sudo gedit /etc/apache2/sites-available/web.local.conf
  2. В открывшемся редакторе пишем сл. код настройки виртуального хоста:

<VirtualHost *:80>    ServerAdmin webmaster@localhost    ServerName web.local    ServerAlias web    DocumentRoot /media/sf_web    <Directory /media/sf_web>        Options Indexes FollowSymLinks MultiViews        AllowOverride All        Order deny,allow        Allow from all    </Directory></VirtualHost>


Далее:

  1. Сохраняем файл
  2. Пишем команду: sudo gedit /etc/hosts
  3. Добавляем ссылку на виртуальный домен в файл hosts: 127.0.0.1 web.local
  4. Сохраняем файл
  5. Подключаем новый виртуальный хост командой: sudo a2ensite web.local
  6. Перезагружаем службу сервера Apache: sudo /etc/init.d/apache2 reload
  7. Перезагружаем VS


blogentry-1-0-33517700-1452858836_thumb.

 


Результат
Это позволит VS обрабатывать код веб-приложений из расшаренной PS папки с веб-приложениями. Данный способ избавит вас от постоянной беготни с кодом приложения между различными платформами. Пишите код под любимой платформой, а тестируйте на всех сразу. Пожалуйста :)

 

Источники составления статьи:
Configure Vbox Share
Virtualbox shared folder mount from fstab fails



0 Comments


Recommended Comments

There are no comments to display.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×