# Запуск Django-приложения на Джино.Хостинге

Django — фреймворк для разработки сайтов (веб-приложений) на языке Python. Благодаря обширным возможностям и функционалу, Django обычно используется для создания больших и сложных сайтов.

Для запуска Django-проектов на хостинге нужно создать новое виртуальное окружение для Python и затем разворачивать приложение на сервере созданный на локальной машине проект.

Для загрузки проекта на сервер есть три основных способа:

# Создание Django-проекта

Для работы Django необходимо подключить Поддержку веб-приложений и Поддержку SSH. По умолчанию для работы с базами данных Django исопльзует SQLite, но если её возможностей будет недостаточно для вашего проекта, то в разделе Услуги можно подключить MYSQL или PostgreSQL.

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

Для создания Django-проекта создадим новое виртуальное окружение и активируем его:

/opt/alt/python37/bin/virtualenv --python /opt/alt/python310/bin/python3 venv310

source ./venv310/bin/activate

После активации окружения установим Django. Сделаем это с помощью стандартного пакетного менеджера Python:

pip install django

Проверить правильность установки Django можно командой:

django-admin --version

# Output
4.0.4

После этого можно создавать новый проект Django. Создадим для него отдельную папку:

mkdir django_projects

cd django_projects

django-admin startproject hello_project

Эта команда создаст папку hello_project и файл manage.py.

Создадим здесь же новое приложение, которое затем будем подключать к нашему проекту:

django-admin startapp hello_app

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

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

...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello_app',
    ]
...

Теперь преступим к созданию самого приложения. Перейдём в папку приложения и добавим в файл views.py, отвечающий за отображаемый контент, следующие строки:

from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello, World!')

Здесь мы определили, что на HTTP-запрос Django должен возвращать строку Hello, World!. Теперь нужно указать Django, что выдавать этот запрос следует для конкретного URL. Это можно сделать в файле urls.py, который находится в папке проекта. Откроем его и приведём к виду:

from django.contrib import admin
from django.urls import path

from my_app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    
    path('',views.index, name="homepage")
]

Приложение готово! Теперь нужно его запустить.

# Запуск Django-проекта

Для запуска Django-проекта нужно указать URL-адрес, на котором будет работать приложение, загрузить его на хостинг и создать файл passenger_wsgi.py, который будет отвечать за обработку веб-сервером запросов к Django.

Начнём с указания URL: в файле settings.py, расположенном в папке проекта, найдём строку ALLOWED_HOSTS = [] и укажем в ней адрес нашего сервера, например: ALLOWED_HOSTS = ['example.com'].

После этого загрузим проект на хостинг.

Последним этапом будет создание файла passenger_wsgi.py со следующим содержимым:

import sys, os
INTERP = os.path.expanduser("~/venv310/bin/python3")

if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)

from hello_project.wsgi import application

В строке INTERP= мы указали путь к исполняемому файлу нашего виртуального окружения. В строке from hello_project.wsgi... мы указали wsgi-файл, который будет отвечать за запуск приложения на веб-сервере.

После этого можно перейти в браузер, вести в адресной строке имя нашего сервера и увидеть на стартовой странице приветствие Hello, World!.

Примечание

Файл passenger_wsgi.py должен находиться в папке с доменным именем рядом с главным файлом проекта manage.py.

Если вы деплоили свой проект на хостинг, то перед запуском приложения вам может потребоваться установить все зависимости из файла requirements.txt. Это можно сделать в рамках виртуального окружения командой

pip install -r requirements.txt
Запуск Django-приложения на Хостинге, созданном до 28.04.2022

Для запуска Django-проекта на Хостинг-аккаунте, созданном до 28.04.2022 понадобится виртуальное окружение, созданное командой

virtualenv-3.9 venv39

После создания виртуального окружения активируем его:

source ./venv39/bin/activate

и установим Django с помощью стандартного менеджера пакетов pip:

pip install django

После этого вы можете создать новый проект прямо на сервере или деплоить уже имеющийся проект на сервер.

Важно помнить, что папка, содержащая ваше проект должна находиться вне папки ~/domains.

Для запуска Django-проекта в папке ~/domains/your_domain нужно создать файл .htaccess. Здесь your_domain — доменное имя, на котором планируете запускать сайт. Если у вас ещё нет домена или он не привязан к Хостингу, вы можеет воспользоваться техническим адресом сервера. Технический адрес сервера представлен в разделе УправлениеНастройки SSH в строке Имя сервера и имеет общий вид j12345678.myjino.ru

В файл .htaccess нужно поместить следующие директивы:

AddHandler wsgi-script .wsgi
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /django.wsgi/$1 [QSA,PT,L]

В этом файле мы определяем, что в качестве рабочего файла для mod_passenger будет использоваться файл с расширением .wsgi и далее напрямую указываем имя этого файла django.wsgi.

Теперь нужно создать сам файл django.wsgi здесь же в папке ~/domains/your_domain

Содержимое файла django.wsgi должно быть следующим:

import os, sys
virtual_env = os.path.expanduser('~/venv39')
activate_this = os.path.join(virtual_env, 'bin/activate_this.py')
exec(open(activate_this).read(), dict(__file__=activate_this))
sys.path.insert(0, os.path.expanduser('~/path/to/your/project'))
from project.wsgi import application

В этом файле мы указываем путь к папке с нашим виртуальным окружением, путь к файлу, активирующему виртуальное окружение и путь к файлу .wsgi нашего проекта.

После этого нужно проверить, что версия Python, которая используется на вашем домене, совпадает с версией Python, для которой создано виртуальное окружение. Для этого проверьте версию Python в разделе УправлениеНастройки веб-сервера. В нашем случае она должна быть Python 3.9.

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

# Подключение баз данных

По умолчанию в качестве СУБД Django использует SQLite, но при к проекту можно подключить MySQL или PostgreSQL.

Для этого в разделе меню Услуги выберите нужный пункт:

«django_sql»

После подключения услуги в разделе УправлениеУправление MySQL создайте новую базу данных и нового пользователя для неё:

«django_sql»

Для подключения базы данных к Django-проекту понадобится клиент, работающий с выбранным типом баз данных.

В случае с MySQL — это mysqlclient, для PostgreSQLpsycopg2.

Примечание

В связи с особенностями функционирования программной платформы, mysqlclient и psycopg2 временно не могут быть установлены в виртуальное окружение, созданное для Python 3.10. Для версий Python 3.9 и старше всё работает.

Установите клиент в активированном виртуальном окружении:

(venv39)user@hosting: pip install mysqlclient

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

В файле settings.py найдите раздел, отвечающий за подключение к базе данных DATABASES и приведите его к следующем виду:

...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'j12345678_django-app',
        'USER': 'j12345678',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT':'3306',
    }
}
...
  • в строке ENGINE нужно указать, какой движок используется для работы с базами данных (mysql или postgresql);

  • в строках NAME, USER и PASSWORD укажите данные только что созданной базы данных и пользователя;

  • в строках HOST и PORT описаны сетевые параметры для подключения к базе данных. В нашем случае база данных и Django-проект расположены в одном хостинг-контейнере, поэтому подключаться к базе можно с параметром localhost. Если Django-проект и база данных расположены в разных хостинг-контейнерах, данные для подключения к базе можно узнать в разделе УправлениеТехническая информация.

В консоли SSH-подключения перейдите в папку с приложением и запустите миграцию зависимостей:

python manage.py makemigrations
python manage.py migrate

После успешной миграции зависимостей можно перезагрузить веб-сервер (УправлениеНастройки веб-сервераПерезагрузить) и проверить работу проекта. Откройте в браузере доменное имя, на котором расположен проект, и проверьте наличие стартовой страницы:

«django_sql»

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

# Заключение

Мы описали основные особенности запуска Django-приложения на Джино.Хостинге.