Привет, в этой статье я расскажу вам, как задеплоить свой проект на Django на реальном хостинге. В качестве примера мы возьмём простенький блог на Django. Исходный код блога можно достать тут Код на github или написать самостоятельно.

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

Деплоить мы будем на хостинге Fornex. Тут достаточно легко развернуть Python-приложение и очень отзывчивая служба поддержки, которая отвечает в течение нескольких минут.
Так же компания предоставляет еще множество услуг:
- Мощные и  доступные по ценам тарифы на SSD Хостинг, SSD VPS и Выделенные серверы
- Защита от DDoS атак.
- VPN
- Бэкапы
- Их крупные клиенты на протяжении многих лет такие как : Pikabu, Yaplakal, LetyShops, Ad1, Admitad и сотни других очень популярных - это показывает то, что Fornex  доверяют самые топовые  рунетовские проекты, так как -  это качественный хостинг,  быстродействие, стабильность и надежность.
- Есть собственная хорошая партнерская программа Fornex, с выплатами до 50% от заказов Ваших рефералов.

 

Для начала нам будет необходимо привязать хостинг к домену, на котором будет работать наше Django - приложение. Для этого переходим в Личный кабинет → Заказы → Хостинг → Управление → Доступ → Перейти к Панели управления → Дополнительные домены

дополнительные домены

Создаем новый домен. Вам будет нужно указать имя нового домена, а поддомен и корень документа сформируются на основе этого имени. Например,
Имя нового домена: test-pythonicway.com
Поддомен: test-pythonicway
Корень документа: /public_html/test-pythonicway.com
Далее, нажимаем кнопку “Добавить домен”

adding domain

После добавления домена нам нужно настроить наше Python приложение. В панели управления перейдите на страницу Setup Python App.

setup python app

В нашем проекте мы используем Python 3.6, выбираем его из выпадающего меню Python version. В качестве App Directory указываем путь, у меня это public_html/test-pythonicway.com/blog, App URI выберите нужный из выпадающего списка.

Нажимаем Setup

Окей, наше приложение добавилось. Теперь нужно установить библиотеки, которые используются в приложении. В блоке Existing applications возле колонки modules нажмите show – вы увидите список уже установленных модулей и поле для добавления новых. Впишите в это поле название нужной библиотеки, после чего нужную версию, например Django#2.1. Если вы используете пример из гитхаба, то дополнительно будет необходимо установить Django#2.1 и Pillow#5.4.1  После того, как вы ввели список необходимых модулей – нажмите Add, список модулей обновится, где новые библиотеки будут выделены цветом. Теперь нажмите Update, чтобы установить все, что вы указали.

установка библиотек

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

У нас есть несколько способов залить файлы на наш сервер: залить через диспетчер файлов, создавать вручную, запулить с гита или загрузить через фтп-клиент. Для простоты мы выберем первый способ.

Перейдите в диспетчер файлов. Далее в директории public_html/test-pythonicway.com/ нажимем Oтправить и загружаем архив приложения. Теперь нажмите правой кнопкой мыши на файле архива и выберите Extract.

файлы, залитые на фтп

Вернитесь в панель настройки Python приложения и укажите полный путь к файлу wsgi.py в строке WSGI file location. Не забудьте добавить :application в конец пути.

Переходим к настройкам Django приложения для продакшена.
В файле settings.py добавляем наш адрес в переменную ALLOWED HOSTS

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

python manage.py makemigrations
python manage.py migrate

Так же, создадим администратора
python manage.py createsuperuser

Если вы все сделали правильно, то перейдя по вашему домену вы увидите примерно следующее.

система работает, но у нас все еще не подгружены стили

Как видите, система уже работает, но у нас еще нету постов и не работают стили. Посты можно добавить через панель администратора (допишите /admin в конец урла), а чтобы заработал CSS нужно сделать следующее.

Откройте файл urls.py и допишите импорты

from django.conf import settings
from django.conf.urls.static import static 

Так же добавьте строчку

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) в конец переменной urlpatterns 


Теперь создайте на сервере папку, в которой будут хранится статические файлы и укажите ее в переменной STATIC_ROOT в файле settings.py

Точно так же для медиа файлов создаём папку на сервере и указываем её в переменной MEDIA_ROOT.

Наконец, в терминале выполните команду python manage.py collectstatic чтобы подгрузились все файлы стилей.

Нажмите Restart в настройках Python приложений.

Если вы все сделали правильно – у вас подгрузятся файлы CSS, JavaScript и изображения.

стили работают, медиа файлы загружаются

Первичная настройка на этом завершена, однако, работая с продакшн сервером нужно быть очень внимательным и осторожным, ведь теперь ваш сайт открыт для потенциальных злоумышленников. Чтобы максимально себя обезопасить – выполните команду
python manage.py check --deployв терминале чтобы система автоматически проверила ваши настройки и указала на уязвимые места, которые будет необходимо закрыть.

результат выполнения manage.py check

Например, одной из таких уязвимостей является режим отладки. Установите переменную DEBUG в False в файле settings.py, и не забудьте после каждого изменения Python файлов на сервере перезагружать приложение кнопкой Restart в Setup Python App.

Переходите на хостинг Fornex:
- Провайдер бесплатно переносит Ваши сайты и полностью помогает с настройкой,
- Есть хорошие скидки на аренду услуг, от 5-20% скидки.
- Компания размещает только своё собственное оборудование в 4 странах: серверы расположены в Германии, России, Украине и Нидерландах.
- Есть круглосуточное (бесплатное базовое\ и платное полное) администрирование.

На этом все, спасибо за внимание.