Как установить Django на хостинг?
Эта инструкция позволит вам установить 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:
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 вашего сайта должно быть следующее сообщение: