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

Запуск Django-проекта состоит из следующих этапов:

# Подготовка хостинга к запуску Django-проекта

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

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

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

Здесь /opt/alt/python37/bin/virtualenv — путь к утилите virtualenv, отвечающей за создание виртуального окружения на хостинге; /opt/alt/python310/bin/python3 — путь к интерпретатору Python 3.10. Все доступные версии Python и пути к их интерпретаторам представлены в разделе УправлениеТехническая информация.

На Джино.Хостинге утилита для создания виртуального окружения vitualenv расположена по адресу /opt/alt/python37/bin/virtualenv и с помощью неё создаётся виртуальное окружение для любой версии Python.

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

Способы загрузки Django-проекта на сервер:

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

Для запуска Django-проекта нужно:

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

# Указание URL

В папке проекта в файле settings.py найдите строку ALLOWED_HOSTS = [] и укажите в ней адрес своего сервера. Например: ALLOWED_HOSTS = ['example.com'].

# Установка зависимостей проекта

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

pip freeze > requirements.txt

При загрузке проекта на сервер проследите, чтобы файл requirements.txt был загружен вместе с другими файлами проекта.

После этого активируйте созданное на хостинге виртуальное окружение:

source ./venv310/bin/activate

Далее в папке приложения выполните команду:

pip install -r requirements.txt

# passenger_wsgi.py

Файл passenger_wsgi.py обеспечивает взаимодействие Django-проекта с веб-сервером. Он должен находиться в папке с доменным именем. Содержимое файла passenger_wsgi.py должно быть следующим:

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

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

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'project'))

from project.wsgi import application

Здесь в строке INTERP= указан путь к исполняемому файлу виртуального окружения, созданного на этапе подготовки хостинг-контейнера; в строке from project.wsgi... — wsgi-файл, отвечающий за запуск приложения на веб-сервере.

В строке sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'project')) добавляется абсолютный путь до папки проекта на сервере в список путей для поиска модулей Python.

# Выбор интерпретатора

В разделе УправлениеНастройки веб-сервера выберите версию интерпретатора Python, на которой работает ваше приложение.

После этого в адресной строке браузера введите адрес вашего сервера.

Вы должны увидеть стартовую страницу вашего сайта.

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

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

virtualenv-3.9 venv39

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

source ./venv39/bin/activate

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

pip install django

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

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

Для запуска Django-проекта создайте файл .htaccess в папке ~/domains/your_domain. Здесь your_domain — доменное имя, на котором будет работать сайт. Если у вас ещё нет домена или он не привязан к Хостингу, воспользуйтесь техническим адресом сервера. Технический адрес сервера представлен в разделе УправлениеНастройки SSH в строке Имя сервера и имеет общий вид 123xyz.hosting.myjino.ru или 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, которая используется на домене. Она должна совпадать с версией, для которой создано виртуальное окружение.

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

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

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

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

«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

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

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