Вопросы и ответы - Евробайт

Как установить Django на хостинг?

Как установить Django на хостинг?

07.01.2016   00:23
Сотрудник
 нет комментариев
ОТВЕТЫ НА ВОПРОС (1)
Сотрудник

Эта инструкция позволит вам установить Django Framework.
Вам понадобится любой клиент, который поддерживает протокол SSH (например, putty).

Все файлы необходимо редактировать с помощью консольного текстового редактора, например, nano. Для этого нужно открыть файл командой:

nano -w $HOME/имя_файла

После того, как вы внесёте изменения, сохраните файл сочетанием клавиш Ctrl-O и выйдите из редактора комбинацией Ctrl-X.
Не нужно пытаться редактировать файлы с помощью встроенного в панель текстового редактора, так как он сохраняет их с переносами строк формата DOS, не совместимыми с UNIX-скриптами.

Устанавливаем Django:

1) Создадим виртуальное окружение «djangoenv» для Python:

mkdir -p $HOME/private/venvs && cd $_
/opt/alt/python37/bin/python3.7 -m virtualenv djangoenv

2) Активируем созданное виртуальное окружение командой:

source djangoenv/bin/activate

3) Устанавливаем необходимые пакеты:

pip install --upgrade pip && pip install django django-fastcgi-server flup6 && CFLAGS="-std=c99" pip install mysqlclient

4) Создадим и настроим проект Django:

mkdir $HOME/private/app && cd $_
~/private/venvs/djangoenv/bin/django-admin startproject myapp

Для того, чтобы можно было зайти на сайт, необходимо отредактировать настройки безопасности в файле ~/private/app/myapp/myapp/settings.py:

ALLOWED_HOSTS = []

Заменим на:

ALLOWED_HOSTS = ['ваш_сайт']

Вместо ваш_сайт укажите имя вашего домена. Настроим базу данных в том же файле:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Заменим на данные доступа к MySQL базе из панели управления хостингом, где vhXXXXXX — логин вашей услуги:

DATABASES = {
    'default': {
        'HOST': 'localhost',
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'vhXXXXXX_база',
        'USER': 'vhXXXXXX_пользователь',
        'PASSWORD': 'пароль_к_базе',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

Настроим статические файлы. Дополним всё тот же файл settings.py строкой:

STATIC_ROOT = '/var/www/vhXXXXXX/data/www/ваш_сайт/static/'

Вместо vhXXXXXX подставьте логин вашей услуги, а вместо ваш_сайт снова введите имя вашего домена. Сохраним файл, выполним миграцию в MySQL и соберём статику:

cd $HOME/private/app/myapp
$HOME/private/venvs/djangoenv/bin/python ./manage.py migrate
$HOME/private/venvs/djangoenv/bin/python ./manage.py collectstatic

5) Убедитесь, что для вашего сайта установлен параметр «CGI-скрипты» в настройках www-доменов для вашего сайта в панели ISPManager:

kak-ustanovit-django-na-khosting-1.png

6) Создадим fcgi-скрипт с именем mysite.fcgi в директории $HOME/www/ваш_сайт/cgi-bin/ не забывая заменить vhXXXXXX на ваш логин во всех трёх строках:

#!/var/www/vhXXXXXX/data/private/venvs/djangoenv/bin/python
# -*- coding: utf-8 -*-
import sys, os

sys.path.insert(0, '/var/www/vhXXXXXX/data/private/app/myapp')
sys.path.insert(1, '/var/www/vhXXXXXX/data/private/venvs/djangoenv/lib/python3.7/site-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = "myapp.settings"

from django.core.wsgi import get_wsgi_application
from django_fastcgi.servers.fastcgi import runfastcgi

application = get_wsgi_application()
runfastcgi(application, method="threaded", daemonize="false")

7) Выставим права для этого файла:

chmod 750 $HOME/www/ваш_сайт/cgi-bin/mysite.fcgi

7) Создадим файл .htaccess в папке с публичными документами $HOME/www/ваш_сайт:

AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(static/.*)$ - [L]
RewriteCond %{REQUEST_URI} !(cgi-bin/mysite.fcgi)
RewriteRule ^(.*)$ cgi-bin/mysite.fcgi/$1 [L]

В результате после перехода по URL вашего сайта должно быть следующее сообщение:

 kak-ustanovit-django-na-khosting-2.png

07.01.2016   00:24
 Комментировать

Для ответа нужно зарегистрироваться или авторизоваться.