@RobCapa

Как развернуть сайт на django?

Не так давно работаю с django, сделал на нем сайт. На локальном сервере все работает отлично, хотел загрузить его в интернет. Воспользовался SmartApe хостингом, взяв пробный период. Загрузил все файлы проекта через FTP, но дальше-то что? Ну, находятся эти папки и файлы на сервере, но он их не запускает по нужному домену. Очевидно, что нужно было бы как-то указать, что и когда запускать, но я не понимаю, что конкретно нужно делать. В интернете пробовал что-нибудь найти, но там либо делают демонстрацию сайта не на django и всего с одной страницей, из-за чего им достаточно закинуть файлы и все работает, либо я задаю вопрос конкретно про django и начинаются танцы с бубном, причем в каждом видео и в каждой статье - свои. Может кто-то объяснить, что нужно делать по пунктам? Понимаю, вопрос может быть глупым, но когда ты ни разу не публиковал сайт, возникает много проблем
  • Вопрос задан
  • 1401 просмотр
Решения вопроса 1
@pyHammer
Очень вас понимаю, сам мучился неделю, когда только начал изучать.
Но на самом деле ничего сложно тут нет, вот вам пошаговая инструкция:
C на сайте хостера, услугам которого я пользуюсь и у меня там крутится около 5 проектов все на Django
Но если что-то будет там не понятно, то вот кратное изложение:
1. Подключаемся к хостингу по SSH
2. Входим в контейнер Docker (пароль тот же что и для авторизации в ssh)
$ ssh localhost -p222
3. Создаем виртуальное окружение
$ virtualenv --no-site-packages --python=/usr/bin/python3.6 --prompt="(env)" .env

4. Активируем виртуальное окружение
$ source .env/bin/activate
5. Устанавливаем зависимости
pip install -r requirements.txt
Конечно у вас должен быть файл с зависимостями requirements.txt
6. Создаем файл passenger_wsgi.py рядом с manage.py со следующим содержимыым
# -*- coding: utf-8 -*-
import os, sys
sys.path.insert(0, '/home/u/username/username.beget.tech/project')
sys.path.insert(1, '/home/u/username/username.beget.tech/.env/lib/python3.6/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Тут нужно пояснить, путь /home/u/username/ формируется так /home/ первая буква имени вашего пользователя на beget / имя вашего пользователя на beget/.
Домен username.beget.tech у вас будет доступен по умолчанию, его для тестов можно заюзать.
7. Добавить домен в ALLOWED_HOSTS
ALLOWED_HOSTS = ['username.beget.tech', ]
8. Создаем файл .htaccess следующего содержания
PassengerEnabled On
PassengerPython /home/u/username/username.beget.tech/.env/bin/python

9. Создаем папку tmp и в нем файл restart.txt
$ mkdir tmp
$ touch tmp/restart.txt

Собственно после этих действий сайт должен завестись. Но не буду большим оптимистом, будут вылазить ошибки, так всегда когда что-то делаешь в первый раз. Но служба тех поддержки beget официально поддерживает сайты на python и вполне может помочь вам в развертывании сайта, а еще ответит на вопросы)
Но если будут вопросы, можете и у меня спросить))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bacon
1. читаем доки https://docs.djangoproject.com/en/3.0/howto/deployment/
2. указанный хостинг поддерживает django? тогда читаем доки хостинга про как это делать
3. а лучше всего, берем VPS и самим учимся все делать, нормальные статьи без проблем гуглится, не понятно что вы там такое находите
Ответ написан
werevolff
@werevolff
django запускается как отдельный процесс или демон. Обычно, для запуска используется gunicorn или wsgi. Для запуска gunicorn лучше всего создать systemd конфиг для Debian/Ubuntu систем. Gunicorn работает на IP адресе и открывает порт для IO операций. Например, 127.0.0.1:8000. Далее, в Nginx прописывается:

server {
    server_name my.site.com;
    listen 80;
    server_tokens off;
    location / {
        include proxy_params;
        proxy_pass http://127.0.0.1:8000/;
    }
}


То есть, nginx является лишь прокси-сервером для переадресации запросов на ваш django-wsgi процесс, который непрерывно запущен в системе.

Второй вариант - поднять систему в докере. Докер предоставляет то же самое: он занимает какой-то порт на localhost, а nginx переадресует запросы извне (от компьютеров клиентов) на docker контейнер.

Есть и другие варианты запуска, но для начала это то, что вы должны знать.

Итак, для запуска вам понадобится:
1. Доступ к systemd конфигам хостинга, либо, возможность запустить docker контейнер с Django
2. Доступ к конфигу Nginx/Apache2

Если этих доступов нет, то говорить особо не о чем.

https://gunicorn.org/
https://www.docker.com/
https://docs.docker.com/compose/
https://habr.com/ru/company/cloverr/blog/247629/
https://habr.com/ru/post/272811/ - моя очень старая статья. Может не запуститься и имеет не совсем продовский конфиг.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2021, в 18:05
50000 руб./за проект
19 апр. 2021, в 17:58
15000 руб./за проект