Кому и когда может быть интересно, полезно


Если вы недавно изучаете 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)


  1. m00t
    10.10.2015 09:58
    +6

    1. Beltoev
      11.10.2015 21:11

      Тоже при прочтении заголовка подумал об использовании вагранта =)

      Кстати, пост на эту тему для тех, кто сначала прочитал комментарии, а не полез вслед за автором настраивать VirtualBox вручную: habrahabr.ru/company/dataart/blog/264367

      И, да, больше всего меня убило:

      С помощью все той же консоли (или другим способом) устанавливаем Django приложение и готовим его к запуску. Останавливаться на этом я подробно не будут, так как это уже другая тема, но прочитать об этом вы можете здесь — djbook.ru.

      Хотя название поста — Dev сервер django с помощью VirtulaBox из-под Windows.

      То есть, по факту, просто рассказал, как запустить виртуалку, не вдаваясь в подробности установки django


  1. barker
    10.10.2015 10:10
    +8

    Что изменится, если заменить django на что-то другое в тексте этой статьи о том как поставить убунту в виртуалбоксе?


  1. olen
    10.10.2015 11:49
    +13

    Важно, что большинство хостингов, например популярный на хабре digitalocean.com, будут вам предлагать возможность поставить именно Ubuntu 14.04 LTS в качестве операционной системы.

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


  1. i_dozi
    10.10.2015 12:57
    -8

    barker, olen Здравствуйте, прошу, не забывайте, что не все уже отлично владеют всеми знаниями и технологиями. Когда-то давно, когда я разбирался во всем этом сам, имея опыт «немного Wordpress», такая статья мне очень помогла бы, но их тогда не было.

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

    Удачного вам дня.

    PS. Не вижу ничего плохого или скверного в реферальной ссылке.


    1. olen
      10.10.2015 13:11
      +5

      Я тоже не вижу ничего плохого в реф. ссылке, но только когда она к месту. В данном случае мне показалось упоминание digitalocean неестественным. Тем более, что большинство хостингов предлагают поставить не только Ubuntu, но и другие дистрибутивы.


  1. i_dozi
    10.10.2015 13:14

    olen Исправил, я имел ввиду «Ubuntu версии именно 14.04 LTS».


  1. ncix
    10.10.2015 15:37

    It worked

    Он работал?


    1. i_dozi
      10.10.2015 15:48

      Это сработало


  1. nxsofsys
    10.10.2015 16:45
    -4

    Десктоп лучше ставить Lubuntu, работает очень быстро, памяти почти не есть =)) Lubuntu есть в Ubuntu из коробки.


    1. Yahweh
      10.10.2015 18:07
      +3

      Ну да. А еще лучше серверная убунта (без граф. оболочки). Или еще лучше vagrant, как говорили выше.


      1. nxsofsys
        10.10.2015 20:27
        -4

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


  1. vintage
    10.10.2015 23:15
    +2

    Зачем вам графическая среда в виртуалке?

    Не лучше ли поставить docker-machine (https://docs.docker.com/installation/windows/), который то создаст вам virtualbox машинку с минимальным линуксом и докером внутри, а через докер уже поднять django (https://github.com/kencochrane/django-docker)


    1. nxsofsys
      10.10.2015 23:38
      -3

      Например, есть сервер под линух для игры, которая разрабатывается на маке/винде под андроид/иос, настройкой этой игры занимаются геймдизайнеры, 3д-моделлеры, 2д-художники, тестируют ее тестировщики, а так же программируют программисты. Всем им нужен сервер, но мало кто знает что такое ssh, git, hg, как останавливать и запускать демоны, какая там база данных, как подсасываются ресурсы, и прочее прочее. Они консоль не видели никогда, и даже простая команда в ней вызывает аццкий трепет и страх. Не у всех даже получается настроить общие папки в VirtualBox. Так вот, экспериментальным путем определено, что самая замечательная инструкция в этом случае — запусти эту виртуальную машинку и кликни на значок на десктопе, вывалится консоль, там все что нужно если что.


      1. ahmpro
        11.10.2015 00:48

        Они консоль не видели никогда, и даже простая команда в ней вызывает аццкий трепет и страх.

        и
        кликни на значок на десктопе, вывалится консоль, там все что нужно если что.

        совершенно не вяжутся вместе,

        а вообще неплохо поставленные процессы решают


        1. nxsofsys
          11.10.2015 00:58

          Та консоль, что запускается по шорткату — для вывода логов. Юзер их не читает практически никогда, делает скриншот если что-то пошло не так, и затем разбираемся. Да, там все что нужно, если возникла проблема. Есть идеи как процесс поставить лучше?


          1. vintage
            11.10.2015 01:16
            +1

            Скриншот с виртуалки, где в графическом терминале выводятся логи? Хорошая трава :-) Почему бы не сделать, чтобы логи сами слались куда надо или чтобы можно было удалённо подключиться и посмотреть все интересующие логи?


            1. nxsofsys
              11.10.2015 01:26
              -2

              разгребать 250 логов которые нагенерил и заслал куда надо за 15 минут один геймдизайнер вводя неправильные данные в csv настроек, да еще удаленно для этого подключаться не дай бог? эт у вас трава хорошая )) так можно целый день не работать ))


              1. ahmpro
                11.10.2015 01:43
                +2

                а скриншот будто поможет, да?

                что вообще геймдизайнер делает на сервере? он не может закомитить новые настройки в репозиторий? с ними CI развернет среду и прогонит тесты


                1. nxsofsys
                  11.10.2015 01:52

                  Геймдизайнер на сервере настраивает игровую логику, затем запускает игру и смотрит — как оно, сойдет или надо еще что нибудь подкрутить. Когда настройки его устраивают — он коммитит. Если что-то идет не так — настройки не грузятся например, это вываливается в лог. Обычно там пишется в каком файле настроек что не так вписано, вплоть до строки. Но увы, творческие люди часто требуют перевода даже такого подробного лога в обычный русский, скриншота на это хватает.
                  Тесты для геймдизайна, когда игровая логика — штука не особо поддающаяся измерению, — ну может у вас это возможно. Я за 10 лет нигде не встречал такого =)) Или вы какие тесты имеете ввиду?


                  1. ahmpro
                    11.10.2015 02:43

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


                    1. nxsofsys
                      11.10.2015 02:59

                      А доступ пользователя к различному функционалу на разных этапах игры и интервалы значений — это не гейм-дизайнер настраивает? Или он должен сначала настроить тесты, а потом под эти тесты настраивать саму логику? А в чем смысл два раза делать одно и то же? Сегодня гейм-дизайнер решил что надо спасти принцессу с правого замка, завтра он решил спасать ее с левого, какая симуляция сценария такое словит, если сценарий изменился?


              1. vintage
                11.10.2015 02:00
                +2

                Я так понимаю скриншот у вас делается последнего лога — вот и смотрите последний лог. Ну или лог на то время, что указал дизайнер. Весь мир как-то справляется с этой задачей, а вы почему-то не можете :-)


                1. nxsofsys
                  11.10.2015 02:13
                  -3

                  А задача то есть, или вы выдумываете грабли на пустом месте лишь бы не было графического GUI? Вы пытаетесь помочь мне решить какую проблему конкретно?


      1. vintage
        11.10.2015 00:53

        Я не про вообще спрашивал, а применительно к задаче запуска django у разработчика на windows.