Разворачивание Django-проекта на Replit
В этом посте мы разберём как развернуть Django на бесплатном сервисе Replit
Реклама
В одном из прошлых постов я рассказал о том, как развернуть Django-проект на бесплатном сервисе PythonAnyWhere. В этом посте поговорим о другом сервисе, который знаком многим - Replit.
Replit - это онлайн IDE для разных языков программирования. Помимо онлайн интерпретатора, он также позволяет размещать у себя небольшие проекты. Естественно, с ограничениями, но, как и было сказано ранее, этот способ подойдёт для демонстрации проекта, а не для рабочего использования.
Развернуть проект на Replit намного проще, чем на PythonAnyWhere. Сервис не предоставляет БД. Проект запущенный на этом сервере должен использовать SQLite3 или внешнюю БД. Также у Replit нет WSGI-сервера - проект будет использовать встроенный в Django веб-сервер.
Подготовка проекта.
Процесс подготовки проекта, а именно создание .env-файла
, не будет сильно отличаться от того, что мы описывали для разворачивания на PythonAnyWhere.
Мы также выносим настройку SECRET_KEY
и DEBUG
в .env-файл
. Поскольку БД не предоставляется, используем стандартные настройки Django.
Тем не менее, внести некоторые изменения в settings.py
всё же потребуется: мы добавим одну строку, разрешающую отображение сайта внутри фрейма:
X_FRAME_OPTIONS = '*'
Для запуска проекта на Replit, необходимо в корне проекта (там, где находится manage.py
) создать файл .replit
.
В файле прописываем следующую команду:
run = "python manage.py runserver 0.0.0.0:3000"
Создание проекта на Replit.
Первым делом необходимо зарегистрироваться или войти, используя сторонние сервисы, такие, как Google, GitHub и другие.
Сайт сервиса: https://replit.com/
После авторизации мы попадаем в личный кабинет.
Слева выбираем раздел Home
, если выбран какой-то другой, и попадаем на главную страницу ЛК. Прямо по центру страницы располагается список последних открытых проектов "Recent Repls", а над ним находятся кнопки создания проектов. Нажимаем на кнопку "Create Repl".
Перед нами отображается окно с выбором шаблона и названия проекта.
На этом этапе необходимо решить, каким образом вы будете загружать файлы в сервис.
Можно выбрать шаблон "Django", будут созданы основные файлы проекта и дальше писать код на сайте.
В этой статье, мы рассматриваем вариант с импортом проекта из репозитория на GitHub.
Нажимаем кнопку в правом верхнем углу "Import from GitHub".
В открывшемся окне также необходимо сделать выбор:
- Предоставить сервису доступ к GitHub и выбрать нужный репозиторий из списка.
- Вставить ссылку на репозиторий (В таком случае приватный репозиторий клонировать не удастся).
Выбираем нужный вариант и нажимаем кнопку "Import from GitHub".
Далее репозиторий будет клонирован и откроется страница проекта.
Настройка проекта для запуска.
Поскольку в Replit не поддерживаются .env-файлы
, вместо них есть раздел "Secrets" в блоке "Tools" в левой части экрана. Откроем его и добавим в него переменные из .env-файла
.
Там же в блоке "Tools" выбираем раздел "Shell" для доступа к терминалу.
В нём нам необходимо создать виртуальное окружение и установить зависимости.
Вводим в терминал команду:
python -m venv venv
При первом вводе будет предложено установить инструменты Python в проект. Вводим Y и повторяем ввод первой команды.
После создания виртуального окружения, активируем его:
source venv/bin/activate
Устанавливаем зависимости из файла requirements.txt
:
pip install -r requirements.txt
Применяем миграции:
python manage.py migrate
Собираем статику:
python manage.py collectstatic
Закрываем терминал и наживаем большую кнопку "Run" в верхней части экрана.
Проект запустится, но мы увидим ошибку "Bad Request (400)". Она вызвана тем, что адрес сайта не указан в ALLOWED_HOSTS
.
Чтобы исправить это, в окне "Webview", в адресной строке нажимаем кнопку "New tab". Сайт откроется в новой вкладке. Копируем из адресной строки адрес сайт, он будет выглядеть примерно так: https://351b1912-c31d-4b10-a236-e7b8046a752d-00-3ll5ep3cujefu.picard.replit.dev/
Открываем файл settings.py
и добавляем его в ALLOWED_HOSTS
:
ALLOWED_HOSTS = ["127.0.0.1", "351b1912-c31d-4b10-a236-e7b8046a752d-00-3ll5ep3cujefu.picard.replit.dev"]
Сайт автоматически перезагрузится и в окне Webview
отобразится главная страница.
На этом разворачивание сайта закончено.
Настройка статики.
Поскольку в Replit нет стороннего веб-сервера, статику должна отдавать сама Django. Для этого откроем файл settings.py
и изменим настройки статических файлов:
STATIC_URL = "static/"
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
Завершение.
Теперь, пока сайт запущен, можно закрыть страницу проекта и он продолжит работу. В сервисе есть ограничения, но для демонстрации проекта или временного решения, Replit подойдёт отлично.
Лично мне, Replit нравится значительно больше, чем PythonAnyWhere, как минимум из-за скорости работы и простоты настройки.
Все статьи