Настраиваем PyCharm для удаленной разработки с Django в VirtualBox

Лучший друг разработчика среда и инструментарий, с которыми он работает. Самое главное преимущество в PyCharm и других продуктах JetBrains большой спектр возможностей, которые предоставляет данная IDE. Я не большой любитель "комбайнов", которые тормозят систему и мешают работе своим лишним функционалом. Именно поэтому я полностью отказался от vagrant, и отключил данное расширение в пользу "настроенного с нуля" виртуалбокса. Что бы эта статья не затянулась предполагается, что вы уже примонтировали директорию свого проекта к гостевой операционной системе, настроили и установили свой любимый дистрибутив линукса и установили драйвара для гостевой операционной системы, которые предоставляет VirtualBox. Мы сразу перейдем к настройке PyCharm-а, в картинках :)

Для начала нам необходимо установить путь к удаленному интерпретатору Python. Самый лучший способ это сделать использовать собственные public и private ключи, сгенерированные утилитой ssh-keygen, что бы заходить на development сервер без пароля. Создайте virtualenv окружение где нибудь в директории с вашим проектом на стороне гостевой операционной системе и укажите путь к нему в настройках PyCharm. Открываем настройки PyCharm и выбираем пункт Project Interpreter, выбираем пункт Show All, жмем на крестик добавить, далее Add remote, откроется окно настроек подключения к удаленному серверу:

Тут необходимо выбрать авторизацию используя учетные данные, или private key я использую второй вариант. Далее нажав на кнопку Python Interpreter Path мы попадем в окно с директориями удаленного сервера, для выбора путь к нашему интерпретатору. Если вы используете virtualenv, путь к интерпретатору будет следующий: env_directory_path/bin/python. Сохранив наши настройки перейдем в меню настроек Run/Debug Configuration. Окно будет выглядеть так:

Опять жмем на крестик, и выбираем Django Server. После выбора откроется форма настроек путей к вашему проекту. Как я уже сообщал ранее наш проект будет находиться локально, а в VirtualBox директория проекта будет примонтирована, что бы не осуществлять синхронизацию между локальным и удаленным проектом.

В пункте Environment Variables небходимо установить переменную окружения DJANGO_SETTINGS_MODULE, значение данной переменной будет следующего вида: "название_вашего_проекта.settings", в моем случае просто project. Добавляем переменную окружения django_settings_module:

Далее выбираем путь к рабочей директории, где корень проекта (опция Working Directory). Самая главная опция, которая нам нужна для корректной работы с удаленным сервром - опция Path Mappings, она позволяет установить пути локальные и удаленные. Эта опция у меня установлена следующим образом:

В итоге получаем после применения настроек:

Последнее что нам нужно сделать на данном этапе, это установить Host. Можно просто выставить значение в "0.0.0.0". Тут больше нам ничего не понадобится, заходим обратно в настройки PyCharm, и выбираем пункт Project Settings -> Django, ставим галочку Enable Django Support. Указыем путь к settings джанги (Settings) и обязательно Django Project Root, выбираем наш Manage Script (manage.py):

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

# Запуск виртуальной машины (в фоновом режиме, безо всяких окошек)
alias vmstart='vboxmanage startvm "Python apps" --type headless'
# Вырубить виртуальную машину
alias vmstop='vboxmanage controlvm "Python apps" poweroff'
# Показать список запущенных виртуальных машин
alias vmls='vboxmanage list runningvms'
# Вход на сервер по ssh
alias vmssh='ssh development'

Вот пожалуй и все, подведу итоги настроек:

Django Server:

Environment Variables: DJANGO_SETTINGS_MODULE = myproject.settings(.py)
Path Mappings: /path/to/local/project/root = /path/to/remote/project/root
Host: 0.0.0.0

Django Test:

Тут разница в настройках лишь в том, что обязательно необходимо установить опцию Custom Settings, и указать путь к settings.py файлу или settings директории проекта.

Теперь у нас работает: удаленная отладка проекта, запуск тестов, запуск сервера.

Спасибо за внимание!