Как установить Django 2.0 на виртуальном хостинге Макхоста?
Вам понадобится любой клиент, который поддерживает протокол SSH (например, putty). При помощи него заходим по SSH на сервер.
Все файлы необходимо редактировать с помощью консольного текстового редактора, например, nano. Для этого нужно открыть файл командой:
nano -w $HOME/имя_файла
После того, как вы внесёте изменения, сохраните файл сочетанием клавиш Ctrl-O и выйдите из редактора комбинацией Ctrl-X.
Не нужно пытаться редактировать файлы с помощью встроенного в панель текстового редактора, так как он сохраняет их с переносами строк формата DOS, не совместимыми с UNIX-скриптами.
Устанавливаем Django:
1) Создадим виртуальное окружение для Python:
mkdir -p $HOME/private/venvs && cd $_
python3.6 -m virtualenv myvenv
2) Устанавливаем необходимые пакеты:
export CFLAGS="-std=c99"
myvenv/bin/pip install pip --upgrade
myvenv/bin/pip install mysqlclient django-fastcgi-server flup6 django
3) Создадим и настроим проект Django:
mkdir $HOME/private/app && cd $_
~/private/venvs/myvenv/bin/django-admin startproject myapp
Для того, чтобы можно было зайти на сайт, необходимо отредактировать настройки безопасности в файле ~/private/app/myapp/myapp/settings.py:
ALLOWED_HOSTS = []
Заменим на:
ALLOWED_HOSTS = ['ваш_сайт']
Вместо ваш_сайт укажите имя вашего домена. Настроим базу данных в том же файле:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Заменим на данные доступа к MySQL базе из панели управления хостингом:
DATABASES = {
'default': {
'HOST': 'aXXXX.mysql.mchost.ru',
'ENGINE': 'django.db.backends.mysql',
'NAME': 'aXXXX_база',
'USER': 'aXXXX_пользователь',
'PASSWORD': 'пароль_к_базе',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
Настроим статические файлы. Дополним всё тот же файл settings.py строкой:
STATIC_ROOT = '/home/httpd/vhosts/ваш_сайт/httpdocs/static/'
Вместо ваш_сайт снова введите имя вашего домена. Сохраним файл, выполним миграции, соберём статики:
cd $HOME/private/app/myapp
$HOME/private/venvs/myvenv/bin/python ./manage.py migrate
$HOME/private/venvs/myvenv/bin/python ./manage.py collectstatic
4) Создадим fcgi-скрипт mysite.fcgi в директории $HOME/cgi-bin/ не забывая заменить ваш_сайт на имя вашего домена во всех четырёх строках:
#!/home/httpd/vhosts/ваш_сайт/private/venvs/myvenv/bin/python
import sys, os
sys.path.append('/home/httpd/vhosts/ваш_сайт/private/venvs/myvenv/lib/python3.6/site-packages')
sys.path.append('/home/httpd/vhosts/ваш_сайт/private/venvs/myvenv/lib64/python3.6/site-packages')
sys.path.append("/home/httpd/vhosts/ваш_сайт/private/app/myapp")
os.environ['DJANGO_SETTINGS_MODULE'] = "myapp.settings"
from django_fastcgi.servers.fastcgi import runfastcgi
from django.core.servers.basehttp import get_internal_wsgi_application
wsgi_application = get_internal_wsgi_application()
runfastcgi(wsgi_application, method="threaded", daemonize="false")
5) Выставим права для этого файла:
chmod 755 $HOME/cgi-bin/mysite.fcgi
6) Создадим файл .htaccess в папке с публичными документами $HOME/httpdocs:
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 вашего сайта должно быть следующее сообщение: