Хостинг - как работает Django
В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться
с вводной статьей.
1. Запуск Django
2. Перезапуск сервиса после изменения кода сайта
3. Обновление статических файлов
4. Работа с ошибками приложения
Django (Джанго) это свободный фреймворк, позволяющий быстро и качественно разрабатывать динамические
веб-приложения на языке Python. Django используется для сайтов Bitbucket, Instagram, The Washington Times и других.
1. Запуск Django
Выберите один из вариантов:
Показать как создать новый сайт на Django
В панели управления при создании сайта выберите вкладку "Python".
Далее выберите базу данных, которую будет использовать проект.
Выберите Django с MySQL, либо Django с Postgres.

Установка Django прошла успешно, если при открытии сайта вы видите такую страницу:
[]()
**Готово!**
Если при работе с сайтом возникнут сложности, то вы можете [обратиться в техническую
поддержку](https://panel.netangels.ru/requests/new/other/).
Показать как загрузить готовый сайт при помощи FileZilla
Создайте новый сайт [в панели управления](https://panel.netangels.ru/hosting/#/). При создании сайта выберите вкладку "Python". Далее выбираете "Python WSGI", нужный тип базы данных и нужную версию python :

После создания перйдите на вкладку "Python" на странице сайта и убедитесь, что используется подходящая версия языка. При необходимости смените её и дождитесь применения настроек.
Далее подключитесь к серверу по [SFTP](https://www.netangels.ru/support/hosting-ftp-ssh/sftp/).
Откройте каталог `имя_сайта/app`.
Удалите файлы-заглушки wsgi.py и index.html.

Загрузите файлы сайта перетащив их мышью из левой части экрана в правую.
После этого нужно установить зависимости проекта. [Подключитесь по SSH](https://www.netangels.ru/support/hosting-ftp-ssh/ssh/).
Перейдите в каталог с сайтом:
Установите зависимости:
pip install -r requirements.txt
или
Далее создайте символическую ссылку на файл wsgi.py, который находится в ```имя_проекта/wsgi.py```.
ln -s имя_проекта/wsgi.py wsgi.py
Если вы не знаете, что указать в `имя_проекта`, то его можно посмотрть в файле `app/manage.py`. В данном случае это `mysite`:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings’)
Каталог с недавно установленным проектом будет выглядеть так:
$ ls -la
total 16
drwxr-xr-x 3 c3087 c3087 4096 Jun 18 17:51 .
drwxr-xr-x 4 c3087 c3087 4096 Jun 18 16:54 ..
-rwxr-xr-x 1 c3087 c3087 538 May 30 18:01 manage.py
drwxr-xr-x 3 c3087 c3087 4096 Jun 18 17:20 mysite
lrwxrwxrwx 1 c3087 c3087 14 Jun 18 17:00 wsgi.py -> mysite/wsgi.py
Откройте настройки "Python" у сайта [в личном кабинете](https://panel.netangels.ru/hosting/#/).

После этого нажмите кнопку "Перезапустить Python WSGI".
Откройте ваш сайт.
Что делать, если вы видите ошибку 502.
Если же появилась такая страница:
[]()
То откройте FileZilla, вновь подключитесь к серверу по SFTP и измените параметр [ALLOWED_HOSTS](https://docs.djangoproject.com/en/4.1/ref/settings/#allowed-hosts) в файле ```имя_сайта/имя_проекта/settings.py```.
Не забудьте поменять настройки подключения к базе данных в файле ```имя_сайта/имя_проекта/settings.py```.
###### Статические файлы
Создайте символическую ссылку на каталог со статическими файлами. Если такой каталог в вашем проекте называется ```static```, то подойдет команда:
ln -s ~/имя_сайта/app/static ~/имя_сайта/www
На хостинге статические файлы необходимо располагать в каталоге `имя_сайта/www`.
Поэтому файлы типа `robots.txt`, `yandex-verification` или аналогичные можно переместить в `имя_сайта/www`.
**Готово!**
Если при переносе сайта возникнут сложности, то вы можете [обратиться в техническую
поддержку](https://panel.netangels.ru/requests/new/other/) и мы бесплатно перенесем ваш сайт и поможем советом.
Показать как загрузить готовый сайт через git
Создайте новый сайт [в панели управления](https://panel.netangels.ru/hosting/#/). При создании сайта выберите вкладку "Python". Далее выбираете "Python WSGI", нужный тип базы данных и нужную версию python :

После создания перйдите на вкладку "Python" на странице сайта и убедитесь, что используется подходящая версия языка. При необходимости смените её и дождитесь применения настроек.
[Подключитесь по SSH](https://www.netangels.ru/support/hosting-ftp-ssh/ssh/)
Перейдите в каталог с сайтом:
Удалите каталог app
Клонируйте свой репозиторий в каталог app
Например
git clone https://github.com/python-discord/site.git app
Перейдите в каталог app
Установите зависимости:
pip install -r requirements.txt
или
Далее создайте символическую ссылку на файл wsgi.py, который находится в ```имя_проекта/wsgi.py```.
ln -s имя_проекта/wsgi.py wsgi.py
Если вы не знаете, что указать в `имя_проекта`, то его можно посмотрть в файле `app/manage.py`. В данном случае это `mysite`:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings’)
Каталог с недавно установленным проектом будет выглядеть так:
$ ls -la
total 16
drwxr-xr-x 3 c3087 c3087 4096 Jun 18 17:51 .
drwxr-xr-x 4 c3087 c3087 4096 Jun 18 16:54 ..
-rwxr-xr-x 1 c3087 c3087 538 May 30 18:01 manage.py
drwxr-xr-x 3 c3087 c3087 4096 Jun 18 17:20 mysite
lrwxrwxrwx 1 c3087 c3087 14 Jun 18 17:00 wsgi.py -> mysite/wsgi.py
Откройте настройки "Python" у сайта [в панели управления](https://panel.netangels.ru/hosting/#/).

Нажмите кнопку "Перезапустить Python WSGI".
Откройте ваш сайт.
Что делать, если вы видите ошибку 502.
Если же появилась такая страница:
[]()
То откройте FileZilla, вновь подключитесь к серверу по SFTP и измените параметр [ALLOWED_HOSTS](https://docs.djangoproject.com/en/4.1/ref/settings/#allowed-hosts) в файле ```имя_сайта/имя_проекта/settings.py```.
Не забудьте поменять настройки подключения к базе данных в файле ```имя_сайта/имя_проекта/settings.py```.
###### Статические файлы
Потребуется создать символическую ссылку на каталог со статическими файлами. Если такой каталог в
вашем проекте называется ```static```, то подойдет следующая команда:
ln -s ~/имя_сайта/app/static ~/имя_сайта/www
На хостинге статические файлы необходимо располагать в каталоге `имя_сайта/www`.
Поэтому файлы типа `robots.txt`, `yandex-verification` или аналогичные можно переместить в `имя_сайта/www`.
**Готово!**
Если при переносе сайта возникнут сложности, то вы можете [обратиться в техническую
поддержку](https://panel.netangels.ru/requests/new/other/) и мы бесплатно перенесем ваш сайт и поможем советом.
2. Перезапуск сервиса после изменения кода сайта
После изменения кода сайта потребуется перезапуск сервиса.
Для перезапуска:
Показать как перезапустить приложение через консоль
Перейдите в каталог с сайтом:
и выполните команду
Например
c3087@h2:~/mydomain.ru$ touch reload
3. Обновление статических файлов
На хостинге вебсервер nginx ищет статические файлы в каталоге имя_сайта/www.
При открытии в браузере ссылки http://имя_сайта/image.png вебсервер попытается найти файл image.png в имя_сайта/www.
Если image.png не найден в имя_сайта/www, то запрос перенаправляется в uwsgi.
Когда вы добавляете на сайт статические файлы (.css, .jpg, .png и другие) необходимо
запустить collectstatic в manage.py.
Показать как запустить collectstatic
В вашем проекте есть каталог для статических файлов, обычно он называется `static`.
Если в `~/имя_сайта/www/static` у вас нет символической ссылки на `~/имя_сайта/app/static`, то создайте ее:
ln -s ~/имя_сайта/app/static ~/имя_сайта/www
Проверьте что в файле ```имя_сайта/имя_проекта/settings.py``` указаны переменные
STATIC_URL = '/static/'
STATIC_ROOT = '/home/имя_контейнера/имя_сайта/www/static'
Далее [подключитесь по SSH](https://www.netangels.ru/support/hosting-ftp-ssh/ssh/).
Перейдите в каталог с сайтом:
и выполните команду
./manage.py collectstatic
4. Работа с ошибками приложения
Если вместо статических файлов (css, json, jpg и тд) отображается ошибка Django с traceback, то проверьте права на файлы. Права должны быть 750.
Если при обращении к сайту вы видите ошибку 502 Bad Gateway, то:
Нас интересуют параметры APP_PATH и APPLICATION.
* Проверьте, что в APP_PATH путь до wsgi.py указан аналогично тому, как на скриншоте ниже:

* Проверьте параметр APPLICATION. В нем нужно указать объект, с которого вебсервер начнет обрабатывать код вашего сайта. В большинстве случаев он называется application и менять ничего не требуется. Но в вашем проекте он может называться по другому. Подробнее о нем в документации Django.
После этого нажмите кнопку “Перезапустить Python” в верхней части страницы. Попробуйте открыть ваш сайт еще раз.
По-прежнему 502 Bad Gateway? Тогда стоит обратиться к логам ошибок.
Подключитесь к серверу по SFTP.
Посмотрите файл имя_сайта/log/wsgi-runlog/current. Последние ошибки будут в конце файла.