Постановка задачи: многие разработчики держат зоопарк серверного ПО (MySQL, Apache, PHP, Nginx, Tomcat и проч.) прямо у себя под Windows. В тоже время, все что они разрабатывают — деплоится на сервера под linux-ом. Удобно? Сомневаюсь! Конечно можно настроить sftp или даже ftp на худой конец и деплоить каждый чих в своем приложении/сайте прямо из вашей любимой IDE, однако не удобнее-ли использовать опцию shared folders, которая идёт в VirtualBox прямо "из коробки". При условии, что вы установили VirtualBox Guest Additions.
Естественно речь идёт о девелоперском окружении (dev. environment). Речи о деплойменте на крупный кластер в этой статье не идёт. Для этого смотрите в сторону Ansible и Chef.
1. Установка VirtualBox Guest Additions
Без установленных дополнений такая полезная опция, как шареные папки будет недоступна на нашей виртуальном сервере разработки. Установка детально описана в документации, здесь же мы её опишем теми коммандами, что необходимо выполнить из консоли Debian.
root@devserver:/# apt-get update && apt-get upgrade root@devserver:/# apt-get install dkms
Не забудьте вставить образ VBoxGuestAdditions.iso в нашу виртуалку и потом запустите установку VirtualBox Guest Additions командой:
root@devserver:/# cd /media/cdrom root@devserver:/# sh ./VBoxLinuxAdditions.run
2. Настройка общих папок (shared folders) в VirtualBox
Добавим новую общую папку shared в VirtualBox для нашего виртуального сервера разработки. Можно из командной строки конечно, но мы сделаем проще — так, как приблизительно это показано на рисунке ниже:

Примечание: Здесь укажите путь до папки на хостовой машине, которую вы хотите пошарить и имя ресурса-шары (в нашем случае — shared). Авто-монтирование можете не включать — по-умолчанию VirtualBox смонтирует Вашу шареную папку в папку /media/sf_shared — и доступ к ней будет иметь только пользователь root, что явно не наш вариант.
3. Монтирование общей папки (shared folder) в Linux от имени рядового пользователя
Наша цель — смонтировать файлы и папки от имени обычного пользователя dmitry, но с указанием группы www-data. Причём права на папки должны быть выставлены в 755, а на файлы в 644. Для начала узнаем id-ки наших пользователей/групп, которые будут выступать в качестве пользователя-разработчика и группы для монтируемых файлов:
root@devserver:/# cat /etc/passwd ... www-data:x:33:33:www-data:/var/www:/bin/sh ... dmitry:x:1000:1000:Dmitry Vl. Rendov,,,:/home/dmitry:/bin/bash
Итак, искомые id-ки у нас на руках — www-data=33, dmitry=1000. Теперь воспользуемся следующей коммандой, чтобы смонтировать нашу общую папку shared folder к папке на которую смотрит наш Apache:
root@devserver:/# sudo mount -t vboxsf -o rw,uid=1000,gid=33,dmask=022,fmask=133 shared /home/dmitry/vhosts/demon.of.by/public_html/
Для интересующихся, опции и их значения описаны ниже:
vboxsf файловая система VirtualBox rw смонтировать чтобы можно было записывать в папку (default) uid установить владельца файлов (user id) gid установить группу для файлов (group id) dmask umask директорий fmask umask файлов shared имя Вашей расшаренной на хосте папки /home/... точка монтирования (папка должна существовать в файловой системе)
Примечание: Если все сработало как надо, добавьте эту строку в автозагрузку — поместив эту команду в /etc/rc.local. Почему не в /etc/fstab? Потому-что fstab читается раньше при загрузке системы и могут возникнуть проблемы при монтировании нашей папки.
Примечание 2: не знаю как сейчас, но раньше я неоднократно сталкивался с проблемой обновления маленьких файлов (до 2КБ) и файловой системы vboxsf от VirtualBox. Проблема в том, что изменения в небольших файлах не подхватывались Apache-м и контент отдавался все равно старый. Хотя листинг файла с помощью команды cat показывал, что в папке лежат верные версии файлов. Решение нашлось в стране гугла и заключается в добавлении опций EnableSendfile Off и EnableMMAP Off в файл конфигурации хоста Apache:
root@devserver:/# vim /etc/apache2/sites-available/demon.of.by ... EnableSendfile Off EnableMMAP Off ...
Примечание 3: К сожалению, начиная с версии VirtualBox 4.1.8 — Вы не сможете создавать в шареной папке (файловой системе vboxsf) символические ссылки по соображениям безопасности. Чтобы включить эту опцию, Вам необходимо на хостовой машине (под Windows) выполнить следующую команду:
c:\Program Files\Oracle\VirtualBox\VBoxManage setextradata "Debian Build" VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1Где "Debian Build" — имя Вашей виртуальной машины, а "shared" — имя шареной папки. Дополнительно в оснастке secpol.msc добавьте себя в "Local Policies->User Rights Assignment->Create symbolic links" политику, если вы на хостовой машине не являетесь администратором.
Подсмотрено в официальном баг-трекере здесь — making a symlink fails on a shared folder with EROFS
Вот и всё. Теперь смело запускаете свой любимый IDE на хостовой машине, и работайте вроде как с локальной папкой — но на самом деле непосредственно на своем виртуальном сервере разработки.
Комментарии 1
- 1
Алексей — Feb 06, 2017 at 08:02 PM
У меня так и не заработали символический ссылки под виндой (