Вопросы и ответы - Макхост

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

Как установить Django 2.0 на виртуальном хостинге Макхоста?

25.01.2017   20:07
Сотрудник Краснов Сергей
 нет комментариев
ОТВЕТЫ НА ВОПРОС (1)
Сотрудник Краснов Сергей

Вам понадобится любой клиент, который поддерживает протокол SSH (например, putty). При помощи него заходим по SSH на сервер.

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

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

После того, как вы внесёте изменения, сохраните файл сочетанием клавиш Ctrl-O и выйдите из редактора комбинацией Ctrl-X.

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

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

mkdir -p $HOME/private/venvs && cd $_
python3.6 -m virtualenv myvenv

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

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 вашего сайта должно быть следующее сообщение:

25.01.2017   20:49
 7 комментариев

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