Веб-разработка

индекс
237,33

Стек веб разработчика в виртуальной машине с FreeBSD

Мне ужасно надоело при переходе с одного компьютера на другой и из одной системы в другую, поднимать окружение для разработки. Пишу я в основном на PHP/Python, поэтому обычно используется классическая связка (M/W/L)AMP. Я давно слышал что некоторые разработчики перебрались в виртуальные машины, но сам всё не решался на этот шаг, но вот появилось свободное время и я поднял стек для веб разработки и использую теперь виртуальную машину VirtualBox, с полноценной системой — FreeBSD, максимально приближенной к production.

В виртуальной машине система работает без окон и в минимальной конфигурации, благодаря чему требует минимум ресурсов. Достаточно будет даже 64Mb оперативной памяти. Порты для http, ssh проброшены наружу. В итоге я имею полноценный сервер в коробке, а снаружи в реальной системе использую полноценую IDE (NetBeans/Eclipse) с браузером, отладчиком и терминалом, которые обращаются к виртуальной машине.

Итак, далее я расскажу как все это собрать и дам ссылку на готовый образ для VirtualBox, вторым шагом будет настройка IDE.


Я пропущу все подробности создания виртуальной машины и установки, в этом нет ничего интересного, да и окружение индивидуально для каждого. На freebsd.org был взят образ FreeBSD i386 8.1 Stable, подгружен в виртуальную машину, после чего пошла установка.

Настройка FreeBSD


После установки первым делом пробрасываю SSH наружу, для доступа из локальной машины. И выдаю ip через DHCP виртуальной машины. В /etc/rc.d должно быть что-то такое:
ifconfig_em0=«DHCP»
sshd_enable=«YES»

Тут я указал что ip адрес на интерфейсе em0 мы получим по DHCP от VirtualBox. Остальные же это старт необходимых демонов.

Настройка VirtualBox


В настройках virtualbox'a захожу в Сеть->Проброс портов и делаю так:


IP хоста — это IP адрес моей локальной машины на которой установлен VirtualBox, IP гостя — адрес который выдал DHCP, его можно подсмотреть скомандовав ifconfig.

Для удобства разрешаю root доступ по SSH, для этого нужно добавить строку PermitRootLogin yes в /etc/ssh/sshd_config

Теперь можно коннектиться из локальной машины в VirtualBox. В putty или iTerm, в зависимости от вашего десктопа командуем # ssh 192.168.1.101 -p 2222 -l root и мы внутри FreeBSD.

Дальше устанавливаются и обновляются порты и AMP связка, после чего можно переходить к настройке IDE.

Настройка дебаггера


Тонкий момент это дебаггинг, к которому нужно получить доступ из десктопа. Все решается очень просто. В ВМ из портов ставлю xdebug для PHP, а в конфиг php.ini просто добавляю:

zend_extension=/usr/local/lib/php/20090626/xdebug.so
xdebug.remote_enable=on
xdebug.remote_log="/var/log/xdebug.log"
xdebug.remote_host=192.168.1.101
xdebug.remote_handler=dbgp
xdebug.remote_port=9000

Где, remote_host равен ip адресу моего десктопа, на котором IDE будет слушать 9000 порт.

В Netbeans все работает из коробки, в Eclipse прийдется доставлять плагины. Поэтому расскажу как я работаю в Netbeans IDE.

Настройка NetBeans IDE


Первым делом создаю проект и указываю локальную папку где будут храниться файлы, захожу в его свойства -> Run Configuration и выбираю запуск как Remote Web Site (FTP, SFTP), указываю Project Url и Index File (понадобится отладчику).



В Remote Connection вбивается Port: 2222, Login: root и его пароль. Initial Directory указывает на папку, к которой Apache обращается за виртуальными хостами.



Итого


1) Основная система не забита всякими ненужными демонами.
2) Я обладаю всегда полноценной консолью и всеми благами системы (порты, хрон и т.д)
3) Окружение для моего кода максимально приближено к боевым условиям.
4) Легкая переносимость окружения c одной машины на другую.
5) Все работает очень быстро.

Как дополнительный элемент элегантности решения, работает мой домашний роутер. В случае если мне необходимо показать заказчику проект над которым я прямо сейчас работаю, то для этого достаточно в домашнем маршрутизаторе пробросить со свего ин-ет адреса — порт 80, на свою локальную машину — 192.168.1.101:8080.

Скачать готовый образ можно тут. В образ вошли актуальные на сегодня стабильные версии Apache/PHP+Extensions/Python/Mysql/Phpmyadmin/ZendFramework и др. SSH login: root, password: toor; MYSQL login: admin, password: nimda. Не забудьте переписать виртуальные хосты, либо отредактировать /etc/hosts, т.к по умолчанию установлен мой домен и ip адреса.

С наступающим Новым 2011 годом!

UPD: Залил новый ахив, теперь образ с макcимальной компрессией весит 259Mb, ссылка обновлена.
+46
29 декабря 2010, 18:51
106

комментарии (51)

+4
b00taNik #
Из недостатков — размер образа мог бы быть и поменьше.

Чтобы не быть голословным — моя подобная сборочка Gentoo+ngnix+apache+memcache+php+python весит сжатая 200мб — на флешке — 300 мб

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

А так — идея не нова, но актуальна + реализация довольно хороша.
0
madflux #
Согласен, размер мог бы быть меньше, но я его подчистил после некоторой работы. Эталонным он конечно быть не может — example only.

Файлы же хранятся локально, но при этом при сохранении заливаются на виртуальную машину, поэтому достучаться до фалов проектов очень просто.
0
b00taNik #
Это особенность работы нетбинса + здесь толика Вашего стиля работы = необходимые Вам файлы хранятся снаружи.

Хотя, что я бурчу, современные идешки все так поступают, ретроградство — плохая привычка.
+1
madflux #
Размер поправил, спасибо за критику. С наступающим ;)
+2
monaxide #
Спасибо за качественную статью.
Сам использую связку NetBSD+VMware.
0
madflux #
Пожалуйста :)
+6
BVadim #
Тоже использую VirtualBox, только с Ubuntu Server на борту.
Замечу относительно проброса портов.
При таком подходе если нужно поднять несколько машин (например под разные проекты) — для каждой нужно выделять свой порт на хосте. И для каждой его пробрасывать.
Я использую такой вариант соединения:
В настройках сети виртуальной-машины указываю тип подключения «Виртуальный адаптер хоста». Это создаёт подключение к хост-машине через виртуальную сетевую карту VirualBox. На хост-машине делаю соединение с интернетом общедоступным для этой виртуальной сетевой карты.
Это делается 1 раз в несколько кликов. На линукс-версии почти аналогично.
В итоге получаем что каждая виртуальная машина имеет свой ip-адрес в сети виртуального адаптера и доступ к интернету. Ubuntu Server при такой установки получает доступ автоматически из коробки (нужно только указать адрес шлюза при установке).

Если доступ к машине нужно получить ещё из локальной сети можно использовать вариант подключения сетевой мост. Тогда машина будет получать ip-адрес в Вашей сети по DHCP (если он настроен). Ubuntu Server работает с таким типом соединения из коробки без дополнительных настроек.
Минус такого решения — если отключается соединение адаптера с которым установлен сетевой мост — доступ к машине по сети получить невозможно.
0
motiv #
спасибо за статью. Сам пришел к подобному. Буквально сегодня закончили настройку. Получилось: VirtualBox, Solaris 11 Express, Vim(molokai подсветка, всем рекомендую), Django, MySQL, mercurial, screen. Rails и Postgresql лень пока поднимать, использую рабочую машину.
В результате имею мобильный образ, даже IDE не надо ставить на хост машине. И порты не нужно пробрасывать. От Netbeans потихоньку отказываюсь(использую его только на Rails проектах).
А репозиторий поднимите, намного удобней и резервное копирование в комплекте. На bitbucker можно создавать приватные репозитории mercurial.
Немного о странном выборе ОС — хочу использовать joyent smartmachine, а там стоит именно солярка.
+2
FeNUMe #
а я поступил немного иначе: для разработки виртуалке поставил полноценную десктопную убунту, настроил все серверы(nginx+uwsgi, мемкеш, постгре итд), настроил IDEшки(gedit+plugins, vim, pycharm) — теперь на любом компе где есть виртуалбокс я получаю свое настроенное рабочее место и переустановки основной системы на компе не страшны. Единственный минус довольно большой образ, возможно стоило выбрать не убунту, а арч; с другой стороны что такое пара гиг по современным меркам…

ну и согласен с BVadim вместо ната и проброса портов удобнее использовать сетевой мост или вирт сетевуху.
0
madflux #
удобнее, но не всегда возможно. в macosx + air port есть некоторые подводные камни, поэтому выбор был — NAT
0
Vii #
А можно по-подробнее про MacOS? У меня Snow Leopard + VBox, Ubuntu server guest через vboxnet0.
+1
sylord #
У меня такая же связка FreeBSD + VirtualBox, но для удобства я еще поднял самбу.
+2
senseyua #
Использую аналогичное решение с VirtualBox. Гостевая система Ubuntu, ставил из дистрибутива ubuntu-minimal, позволяет указывать в процессе установки все что надо и не ставит ни чего лишнего. Образ дистрибутива — 16 мб, все нужное дотягивает из интернета.
Вместо проброса портов и коннекта IDE через SFTP настроил shared Folder.
Это позволяет каждой операционной системе видеть файлы проектов как свои собственные (без удаленного доступа), что дает возможность держать все файлы на хостовой машине в разделе TrueCript и прозрачно работать с ними как на хостовой, так и на гостевой машине
+1
Bonch #
Я раньше так же разрабатывал. Сейчас подумываю прикупить еще один виртуальный сервер и сделать его девелоперским, т.е. всю разработку вести на нем удаленно.
+1
motiv #
если бы интернет был везде и всегда стабилен — тоже бы так сделал.
0
Bonch #
Я в основном дома работаю над личными проектами, так что это не так важно, плюс есть запасной скайлинк еще. Да и git позволяет коммитить и в локальную репу. Да, на десктопе дома все зверьё тоже настроено для разработки.
0
nwalker #
мне кажется более удобным coLinux. может запускаться как сервис при загрузке, умеет расшаривать каталоги с диска напрямую. стандартные несколько типов сетевых соединений hostguest.
0
sylord #
да но coLinux не делают 64-битным на сколько я помню…
0
vectoroc #
и хватает 64 Мб на все?
0
madflux #
хватает, но чем больше — тем лучше
+1
VolCh #
Вообще говоря, с дефлтными настройками mysql c innodb 64 Мб не хватит
0
FSA #
У меня в своё время сервер крутился для модемных подключений. До 2 модемов на нём было. Оперативки было 128 мегабайт. На нём крутился веб-сервер (Apache 1.x), почтовый сервер (Posftix+Courier-IMAP), база MySQL, радиус-сервер (то ли FreeRadius, то ли OpenRadius), Вроде даже ejabberd запускал. При очень маленькой нагрузке вполне себе рабочая конфигурация.
+1
KorP #
я хоть и не весть какой разработчик, но к этой мысли пришёл уже очень давно (и в первую очередь по тому что небыло у меня под рукой своего хостинга/сервера с LAMP). Ну правда у меня ещё smb поднята, я по сети работаю — мне так удобнее, но это уже дело вкуса я думаю. сам правда пользуюсь gentoo/centos
+1
shternberg #
Для php разработки подходит связка nginx + php-fpm + apc,
разрабатываю на подобной сборке проекты на symfony2 – все просто летает,
памяти используется порядка 20mb и то половину забирает apc.

Удобно также поднимать виртуальные машины с ie6, ie7 и старыми версиями firefox
для тестирования кроссбраузерной верстки.

Для сборки собственного пакета разработчика, можно использовать образ от
virtual appliance – Ubuntu 10.04 server весит всего 70мб — www.virtualappliances.eu/

Огромная подборка виртуальных машин с переустановлённым софтом www.vmware.com/appliances/

Правда все это подходит только для vmware.

0
madflux #
Образ FreeBSD 8.1 bootonly весит 48 Мб :)
0
FSA #
А там практически ничего и нет!!! Он позволяет только загрузиться и запустить установку. Все остальное нужно будет по сети тянуть.
0
AndrewStephanoff #
Если используете xdebug версии 2.1, то можно написать xdebug.remote_connect_back
0
roller #
тоже долго сидел на виртуалке, но когда мне в очередной раз надоело ждать, пока NetBeans переиндексирует файлы — просто поставил себе убунту и получил нативную среду без ограничений и ускорение отклика NetBeans (например индексация, копирования-перенос файлов внутри ide, и тд)
0
madflux #
netbeans в нативной среде, в виртуалке только environment
0
roller #
netbeans работает через ssh с файловой системой виртуалки, от увеличения латентности вы не убежите
0
madflux #
это очень маленькая цифра, значительно меньшая чем время потраченное на переключение в браузер
0
roller #
конечно. для одной операции. а когда вы перемещаете внутри ide сотню файлов или например индексируются существующие исходники (скачиваются в локальную систему)
0
madflux #
есть такое, но благо только на стадии импорта проекта, поэтому пока не критично
0
AndrewStephanoff #
Если программируете на PHP, думаю также имеет смысл влючить в поставку pear; чтобы иметь возможность работы с phpunit, phpdoc и т. д.
Для Zend Framework можно добавить channel: pear channel-discover pear.zfcampus.org и установить pear install zfcampus/zf
0
madflux #
он есть в образе который я приложил к посту, я зенд по другому не ставлю ;)
0
AndrewStephanoff #
просто Вы не написали :)
+1
madflux #
безусловно, но пост ведь не об этом :)
0
AndrewStephanoff #
А как Вы решаете проблему виртуальных хостов?
0
madflux #
а проблемы нет никакой, виртуальные хосты прекрасно работают, просто apache слушает весь возможный пул ip
0
AndrewStephanoff #
я имею ввиду — когда Вы создаёте новый проект, хост создаётся автоматически или требуется создать новый файл конфигурации для апача?
0
symbix #
Конфигурации виртуальных хостов могут быть уникальными для каждого проекта, между прочим.
0
AndrewStephanoff #
Между прочим, в курсе.
–9
G3kas #
как дети малые ейбоху, фряху на виртуалке поднимать…
0
VolCh #
А где её поднимать, если хочется окружения максимально близкого к продакшену, а по «каким-то» причинам фряху с гуи как основную ось на девелоперской (а зачастую и единственной домашней с играми, видео, аудио и т. п.) поднимать не хочется?

В моем варианте, правда, не фряха, а дебиан, а на домашнем хосте убунту. Но ловить баги из-за различия версий пакетов или синхронизировать эти версии совсем не хочется даже в случе максимально близких дистров одной ОС, а тут разные ОС
0
FuN_ViT #
при наличии интернета — все получается красивее, если использовать амазон EC2. там есть система снапшотов. а локально — мне пока проще на ноуте под убунтой сидеть…
0
madflux #
при активной разработке микро инстанса не хватит и вы попадете на деньги, да и задачи у локальной виртуальной машины немного другие
0
SmartBye #
Не найду, где находится проброс портов. В разделе сети конкретной машины только выбор адаптеров. В настройке сети VirtualBox только настройка адаптеров.
0
madflux #
В свойствах конкретной машины -> Сеть -> Адаптер -> Дополнительно -> Проброс портов
0
Softovick #
Уточнить хотел, для какой версии VirtualBox сделан образ? А то мало ли…
+1
madflux #
Для 4ки
0
VladSavitsky #
Спасибо, обновился до 4ки!
Тоже была куча вопросов…

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.