Кому и когда может быть интересно, полезно
Если вы недавно изучаете Python/Django или используете его для небольших домашних проектов и сталкиваетесь с проблемами в деплое того, что сделали на своей машине, на реальный сервер “где-то там”, или с установкой нужных батареек, которые качественно работают только из под Linux.
Способ который я опишу ниже не самый современный или быстрый, но удобный и наглядный именно для тех, кто только пробует себя и ищет свой вариант.
Что будет использоваться
- Win 10
- VirtulaBox 5.0.6
- Образ Ubuntu 14.04 LTS
Что получите в итоге
В итоге у вас получится виртуальная машина с установленной Ubuntu 14.04 LTS на которой будет работать ваше Django приложение. Важно, что большинство хостингов, например популярный на хабре digitalocean.com, будут вам предлагать возможность поставить Ubuntu версии именно 14.04 LTS в качестве операционной системы. При этом, сами файлы приложения вам будут доступны из вашей Windows и для вашего редактора, и для вашего git и так далее.
Это значит, что вы подойдете крайне близко к симуляции рабочего сервера, ваш сервер разработки будет идентичен вашему рабочему серверу, что безусловно уменьшит количество проблем связанных с разработкой на Win, а сервером на Linux.
Процесс
Устанавливаем VirtualBox. Скачать можно здесь https://www.virtualbox.org/wiki/Downloads. Я рекомендую версию 5, так как в ней исправлена проблема с виртуализацией сетевого подключения типа bridge для Win 10, а нам понадобится именно такой тип соединения.
Скачиваем ISO браз Ubuntu 14.04 LTS, например здесь http://ubuntu.ru/get. 32 иди 64? Лучше именно такую версию, какая работает у вас на боевом сервере. Если потом захотите по-изучать Docker на этой же машине, то ставьте 64.
Узнать версию и тип вашего релиза на сервере можно с помощью консольной команды cat /etc/*-release
Отлично, теперь начинаем создавать виртуальную машину. Нажмите сразу «Экспертный режим». Я рекомендую выставлять вот такие настройки. Обратите внимание на последнюю картинку, где выставлены параметры сети и сетевого адаптера вашей виртуальной машины, нам понадобится соединение типа «Сетевой мост».
Добавьте папку вашего проекта Django, как общую папку с виртуальной машиной. Файлы вашего проекта поместите в нее из под вашей обычной Win.
Теперь вставляем ISO образ в привод вашей виртуальной машины и проходим обычную установку Ubuntu.
Запускаем вашу виртуальную машину с установленной Ubuntu, открываем консоль и узнаем параметры вашей сети. А именно, IP виртуальной машины в сетевом мосту. 99 из 100 это будет 192.168.1.ХХХ
Узнать параметры сети можно с помощью консольной команды cat /etc/*-release
С помощью все той же консоли (или другим способом) устанавливаем Django приложение и готовим его к запуску. Останавливаться на этом я подробно не будут, так как это уже другая тема, но прочитать об этом вы можете здесь — djbook.ru.
Теперь удостоверимся, что общая папка подключилась. Если ваш проект назывался «habra», то в папке media на виртуальной машине должна появиться папка sf_habra с файлами вашего проекта. Нам понадобится использовать полный путь до файлов фашего проекта чуть позже.
Теперь я советую в папке вашего проекта создать файл «vb_run.sh». В нем мы пропишем команду для запуска вашего приложения, чтобы каждый раз не вбивать это в консоль. В примере ниже запускается приложение из общей папки с помощью python3
python3 /media/sf_habra/manage.py runserver 192.168.1.107:8010
Если вы все сделали правильно, то вернувшись обратно в ваш Win, и перейдя по адресу 192.168.1.107:8010, вы увидите ваше приложение.
Что еще можно было бы добавить
БД, в примере выше, используется стандартная для первого запуска sqlite3, но ни что не мешает установить и настроить ту же БД, что вы используете на боевом сервере. Будет меньше проблем с миграциями и прочее.
virtualenv — в приведенном примере на одной машине запускается одно приложение, фактически, необходимости в virtualenv нет. Но можно запускать несколько приложений с одной машины, тогда вам понадобится virtualenv, а команда запуска приложения будет похожа на эту
/home/username/.virtualenvs/habra-env/bin/python /media/sf_habra/manage.py runserver 192.168.1.107:8010
Популярной практикой является запуск приложения на Dev серверве с использованием локального файла настроек.
/home/username/.virtualenvs/habra-env/bin/python /media/sf_habra/manage.py runserver 192.168.1.107:8010 --settings=habra.settings_local
Созданный вами файл .sh можно всегда добавить на автозапуск при старте системы
Комментарии (25)
barker
10.10.2015 10:10+8Что изменится, если заменить django на что-то другое в тексте этой статьи о том как поставить убунту в виртуалбоксе?
olen
10.10.2015 11:49+13Важно, что большинство хостингов, например популярный на хабре digitalocean.com, будут вам предлагать возможность поставить именно Ubuntu 14.04 LTS в качестве операционной системы.
Только у меня возникло впечатление, что эта статья написана ради этого предложения с реф. ссылкой на digitalocean?
i_dozi
10.10.2015 12:57-8barker, olen Здравствуйте, прошу, не забывайте, что не все уже отлично владеют всеми знаниями и технологиями. Когда-то давно, когда я разбирался во всем этом сам, имея опыт «немного Wordpress», такая статья мне очень помогла бы, но их тогда не было.
На данный момент мне пришло в личные сообщения уже два вопроса по этой теме, от тех, кто только учиться и разбирается в этом.
Удачного вам дня.
PS. Не вижу ничего плохого или скверного в реферальной ссылке.olen
10.10.2015 13:11+5Я тоже не вижу ничего плохого в реф. ссылке, но только когда она к месту. В данном случае мне показалось упоминание digitalocean неестественным. Тем более, что большинство хостингов предлагают поставить не только Ubuntu, но и другие дистрибутивы.
nxsofsys
10.10.2015 16:45-4Десктоп лучше ставить Lubuntu, работает очень быстро, памяти почти не есть =)) Lubuntu есть в Ubuntu из коробки.
Yahweh
10.10.2015 18:07+3Ну да. А еще лучше серверная убунта (без граф. оболочки). Или еще лучше vagrant, как говорили выше.
nxsofsys
10.10.2015 20:27-4Кому как, часть моих коллег просто не может работать в командной строке, когда я дал им виртуалочку с шорткатом запуска сервера на десктопе, все были очень рады, а у меня резко убавилось проблем.
vintage
10.10.2015 23:15+2Зачем вам графическая среда в виртуалке?
Не лучше ли поставить docker-machine (https://docs.docker.com/installation/windows/), который то создаст вам virtualbox машинку с минимальным линуксом и докером внутри, а через докер уже поднять django (https://github.com/kencochrane/django-docker)nxsofsys
10.10.2015 23:38-3Например, есть сервер под линух для игры, которая разрабатывается на маке/винде под андроид/иос, настройкой этой игры занимаются геймдизайнеры, 3д-моделлеры, 2д-художники, тестируют ее тестировщики, а так же программируют программисты. Всем им нужен сервер, но мало кто знает что такое ssh, git, hg, как останавливать и запускать демоны, какая там база данных, как подсасываются ресурсы, и прочее прочее. Они консоль не видели никогда, и даже простая команда в ней вызывает аццкий трепет и страх. Не у всех даже получается настроить общие папки в VirtualBox. Так вот, экспериментальным путем определено, что самая замечательная инструкция в этом случае — запусти эту виртуальную машинку и кликни на значок на десктопе, вывалится консоль, там все что нужно если что.
ahmpro
11.10.2015 00:48Они консоль не видели никогда, и даже простая команда в ней вызывает аццкий трепет и страх.
и
кликни на значок на десктопе, вывалится консоль, там все что нужно если что.
совершенно не вяжутся вместе,
а вообще неплохо поставленные процессы решаютnxsofsys
11.10.2015 00:58Та консоль, что запускается по шорткату — для вывода логов. Юзер их не читает практически никогда, делает скриншот если что-то пошло не так, и затем разбираемся. Да, там все что нужно, если возникла проблема. Есть идеи как процесс поставить лучше?
vintage
11.10.2015 01:16+1Скриншот с виртуалки, где в графическом терминале выводятся логи? Хорошая трава :-) Почему бы не сделать, чтобы логи сами слались куда надо или чтобы можно было удалённо подключиться и посмотреть все интересующие логи?
nxsofsys
11.10.2015 01:26-2разгребать 250 логов которые нагенерил и заслал куда надо за 15 минут один геймдизайнер вводя неправильные данные в csv настроек, да еще удаленно для этого подключаться не дай бог? эт у вас трава хорошая )) так можно целый день не работать ))
ahmpro
11.10.2015 01:43+2а скриншот будто поможет, да?
что вообще геймдизайнер делает на сервере? он не может закомитить новые настройки в репозиторий? с ними CI развернет среду и прогонит тестыnxsofsys
11.10.2015 01:52Геймдизайнер на сервере настраивает игровую логику, затем запускает игру и смотрит — как оно, сойдет или надо еще что нибудь подкрутить. Когда настройки его устраивают — он коммитит. Если что-то идет не так — настройки не грузятся например, это вываливается в лог. Обычно там пишется в каком файле настроек что не так вписано, вплоть до строки. Но увы, творческие люди часто требуют перевода даже такого подробного лога в обычный русский, скриншота на это хватает.
Тесты для геймдизайна, когда игровая логика — штука не особо поддающаяся измерению, — ну может у вас это возможно. Я за 10 лет нигде не встречал такого =)) Или вы какие тесты имеете ввиду?ahmpro
11.10.2015 02:43саму логику да не померить, а вот ее результаты вполне: от доступа пользователя к различному функционалу на разных этапах игры, до вхождения в определенные интервалы значений в результате симуляции по заранее определенным сценариям. понятное дело, что не каждый проект может себе такое позволить, однако часть вполне можно реализовать даже в небольшом проекте.
nxsofsys
11.10.2015 02:59А доступ пользователя к различному функционалу на разных этапах игры и интервалы значений — это не гейм-дизайнер настраивает? Или он должен сначала настроить тесты, а потом под эти тесты настраивать саму логику? А в чем смысл два раза делать одно и то же? Сегодня гейм-дизайнер решил что надо спасти принцессу с правого замка, завтра он решил спасать ее с левого, какая симуляция сценария такое словит, если сценарий изменился?
vintage
11.10.2015 02:00+2Я так понимаю скриншот у вас делается последнего лога — вот и смотрите последний лог. Ну или лог на то время, что указал дизайнер. Весь мир как-то справляется с этой задачей, а вы почему-то не можете :-)
nxsofsys
11.10.2015 02:13-3А задача то есть, или вы выдумываете грабли на пустом месте лишь бы не было графического GUI? Вы пытаетесь помочь мне решить какую проблему конкретно?
vintage
11.10.2015 00:53Я не про вообще спрашивал, а применительно к задаче запуска django у разработчика на windows.
m00t
www.vagrantup.com
Beltoev
Тоже при прочтении заголовка подумал об использовании вагранта =)
Кстати, пост на эту тему для тех, кто сначала прочитал комментарии, а не полез вслед за автором настраивать VirtualBox вручную: habrahabr.ru/company/dataart/blog/264367
И, да, больше всего меня убило:
Хотя название поста — Dev сервер django с помощью VirtulaBox из-под Windows.
То есть, по факту, просто рассказал, как запустить виртуалку, не вдаваясь в подробности установки django