Разворачивание Джанго наоборот - с продакшн-сервера на локальный

Раз вы читаете эту статью, то возможно и вы сейчас находитесь в поиске чего похожего. Не буду томить, ведь я остановил свой выбор на Netangels, которые как раз предлагают готовые образы фреймворков для разворачивания на хостинге. Я намеренно опускал моменты о том, как настраивать виртуальное окружение, разворачивать базу данных у себя на локальной машине, из чего состоит проект Джанго и т.д. Это вы должны и так знать, если когда-либо работали с данным фреймворком локально.

Данную инструкцию я неоднократно дописывал на протяжении нескольких месяцев по мере того, как у меня появлялись к технической поддержке все новые и новые вопросы по настройке конфигурационных файлов. По данной инструкции я запустил как минимум 10 проектов, но не могу сказать, что она исчерпывающая. Если вы найдете в ней какие-либо ошибки, то прошу вас указать на них, и я в оперативном порядке обновлю инструкцию до актуальной версии.

Установка Джанго проекта на хостинге

В панели управления Netangels переходим на вкладку "Хостинг", указываем домен, и на вкладке "Установить CMS/фреймворк" выбираем Django в редакции с базой данных PostgreSQL.

После создания контейнера в окне проекта заказываем сертификат let's encrypt, активируем переадресацию на https.

Из панели на вкладке "Файлы" создаем аккаунт для подключения сайта по SSH или FTP.

Через файловый менеджер хостинга, либо по ssh/ftp находим файл settings.py и отключаем режим отладки, указав для переменной DEBUG значение False, так как в целях безопасности мы не хотим, чтобы кто-то видел расширенную отладочную информацию по ошибкам. После таких действий у вас перестанет грузиться заглавная страница, однако путь до админки будет работать.

В конце файла указываем настройки импорта для локальной машины и сервера; файлы local.py и prod.py мы создадим позднее. Такие настройки помогут вам скрыть от чужих глаз чувствительную информацию по ключам, данным БД, разрешенным хостам и т.д. В результате у вас на сервере будет лежать 2 файла с отличными настройками для сервера и для локальной машины. 

try:
   from .local import *
except:
   from .prod import *

Файл prod.py для настроек Джанго на боевом сервере

Создаем в папке, где лежит setting.py, файл prod.py, который будет хранить данные по настройкам сервера. В данный файл обязательно нужно перенести информацию по базе данных, уникальному ключу, путям до статики и медиа, а так же хосту. Просто вырезайте и копируйте необходимую информацию в новый файл.

from .settings import *
DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'HOST': 'здесь будет ваше значение, не меняйте его',
       'PORT': '5432',
       'NAME': 'здесь будет ваше значение, не меняйте его',
       'USER': 'здесь будет ваше значение, не меняйте его',
       'PASSWORD': 'здесь будет ваше значение, не меняйте его',
   },
}

SECRET_KEY = 'здесь будет ваше значение, не меняйте его'

ALLOWED_HOSTS = ['kuskovan.ru']

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
   os.path.join(BASE_DIR, 'kuskovan/static'),
]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'kuskovan/media')

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

Кидаем в папку со статикой (по умолчанию она носит название "www") файл robots.txt, с настройками запрета индексации, ведь мы же не хотим, чтобы поисковики сканировали сайт, который находится еще в разработке.

User-Agent:*
Disallow: /

Перенос проекта на гитхаб и клонирование на локальную машину

  1. Инициализируем гит в корневой директории командой git init.
  2. Там же создаем файл гитигнор командой touch .gitignore
  3. Открываем файл .gitignore, копируем в него общие настройки по Джанго, которые генерируем отсюда, а также добавляем свои. Очень важно перед тем, как залить на гитхаб проект, скрыть файл настроек prod.py, а так же логи, статику, временные файлы и настройки окружения
  4. Заходим на гитхаб и создаем приватный репозиторий.
  5. Далее добавляем файлы командой git add . и коммитим их git commit -m “first init”.
  6. Добавляем удаленный репозиторий командой git remote add origin и указываем урл-адрес.
  7. После чего пушим все все командой git push -u origin master. Все команды доступны прямо из пустого репозитория на гитхаб, просто копируете код и вставляете его.
# ....базовые настройки сайта

# Ваши собственные, основанные на готовом проекте Netangels
etc/
tmp/
.envrc
log/
reload
app/kuskovan/prod.py
app/static
www/static
www/

#Local machine
.idea/
/app/kuskovan/local.py

Настройки проекта для локальной машины на базе IDE Pycharm

  1. Выбираем пустую папку, куда сгрузим проект.
  2. Создаем в ней отдельное виртуальное окружение.
  3. Из вкладки VSC -> Get from version control клонируем ветку к себе. Либо используем команду git clone с указанием урл-адреса репозитория.

Если у вас pro-версия, то вы можете дополнительно указать настройки для шаблонизатора Джанго. В File – Settings – Languages/Frameworks указываем:

  • Django project root: C:\Python\Webuntu\Kuskovan-local\kuskovan (у вас, конечно же, будет свой путь до проекта)
  • Settings - app\kuskovan\settings.py (аналогично, что у вас будет свой путь)
  • Manage script - app\manage.py

Создание базы данных PostreSQL на Windows

Данный шаг опционален, так как вы можете использовать настройки базы SQLite. Почему на Windows? Потому, что я работаю на этой ОС, но под WSL, что позволяет установить ту же Ubuntu. И второй момент заключается в том, что лично мне все же приятнее иметь хоть какой-то интерфейс для работы с таблицами.

Скачиваем с официального сайта дистрибутив PostgreSQL и через клиент pgadmin задаем пароль для суперпользователя postgres, создаем базу данных, задав ей любое имя. Например, mydb.

  1. Кликаем ПКМ по иконке Databases -> Create Database.
  2. Во вкладке "General" даем названием и ставим пользователя "postgres".
  3. Если вы создали отдельного пользователя для базы данных, то не забудьте во вкладке Security дать ему все привилегии

Создав базу данных, создаем в папке, где лежит settings.py, файл local.py с настройками созданной БД и другими настройками для дебага.

ALLOWED_HOSTS = ['127.0.0.1']
STATIC_URL = '/static/'
STATIC_ROOT = '../www/static'

MEDIA_URL = '/media/'
MEDIA_ROOT = '../www/media'

DEBUG = True
SECRET_KEY = 'xxxx'


# database settings
DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'HOST': 'localhost',
       'PORT': '5432',
       'NAME': 'имя вашей бд',
       'USER': 'имя пользователя для БД',
       'PASSWORD': 'ваш пароль',
   },
}

Запуск проекта Джанго на локальной машине

Вот мы и подобрались до последнего шага. Все, что нам осталось сделать - установить зависимости и провести миграции.

  1. Из-под окружения устанавливаем на локальную машину все зависимости командой pip install -r requirements.txt.
  2. Переходим в папку, где лежит файл manage.py.
  3. Создаем суперпользователя командой python manage.py createsuperuser.
  4. Применяем миграции: python manage.py migrate
  5. Запускаем локальный сервер командой python manage.py runserver.

Поздравляю, вы развернули полноценный проект у себя на локальной машине!

kuskovan

Если у вас остались вопросы по статье или хотите ее дополнить, то жду ваших комментариев.

kuskovan

28.06.2020