3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер

3 горизонтальные линии, бургер
Удалить все
ЗАГРУЗКА ...

Содержание



    Как запустить Django сервер: 4 способа для разработки и продакшена

    Часы
    17.10.2025
    /
    Часы
    17.10.2025
    /
    Часы
    3 минуты
    Глазик
    194
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0

    Вступление

    В зависимости от того, где и для чего, запускать django-сервер можно по-разному. Так, например, мы не будем запускать сервер django напрямую если деплоим сайт на хостинг или VPS.
    Или, например, чтобы можно было проверить работу сервера в максимально приближенных условиях, как при разворачивании на реальном сервере (DEBUG=False) + (ALLOWED_HOSTS=("localhost",)), необходимо использовать совершенно другие техники для запуска сервера.
    В этой статье я и расскажу как можно запускать django-сервер, различными способами.

    Обычный запуск сервера, для разработки

    Это такой запуск сервера django при котором он и обслуживает статические файлы, и отвечает на запросы от браузера. По умолчанию всё это он делает через 8000 порт и выглядит эта команда так:
    python manage.py runserver
    Есть лишь один позиционный аргумент, номер порта. Его можно указать сразу после runserver:
    python manage.py runserver 7000
    Таким образом, наш сервер будет обрабатывать только те запросы, которые идут на 7000 порт и на локальный адрес - http://localhost:7000.
    Чем изменение порта для сервера разработки может быть полезно? А тем, что это даёт некоторую гибкость в интеграции других, так скажем приложений или расширений. Например, есть такое расширение для VSCode, которое автоматически перезагружает веб-страницу если она была изменена. И чтобы это сделать, потребуется поколдовать с портами и прокси.
    Если django-проект сделан и настроен правильно, но ещё без собственных обработчиков представлений, то ты должен увидеть что-то вроде этого:
    Или это, если уже есть собственные представления и маршрутизация, плюс правильно настроенные STATIC_URL и MEDIA_URL:
    Суть в том, что вся статика успешно была получена.

    Запуск сервера для проверки готовности деплоя на сервере

    Что я под этим подразумеваю. Представь себе такую ситуацию, ты хочешь добавить и настроить собственные обработчики и шаблоны для страниц 404 и 500. Но, мы все знаем какие страницы мы получим, если у нас случилась ошибка на сервере или страница не была найдена:
    И когда мы переведём сервер в боевое положение т.е. DEBUG=False плюс ALLOWED_HOSTS=("*") мы получим страницу, которую мы конечно предварительно настроили для показа 404 и 500 ошибки, но без стилей и скриптов. Вот что будет в консоли разработчика:
    В документации сказано, что при переходе на боевой режим сервера, django перестаёт обрабатывать и возвращать статику. И правильно, это работа для web-сервера по типу Apache или Nginx.
    Чтобы запущенный django-сервер продолжал обрабатывать статику необходимо запускать сервер так:
    python manage.py runserver --insecure
    Теперь можно разрабатывать собственные 400 и 500 страницы без необходимости заводить настоящий сервер :)

    Запуск django-сервера на виртуальном хостинге

    Для работы на настоящих веб серверах, джанго не нужно запускать вручную. Для этого любое джанго-приложение поддерживает специальные интерфейсы для работы с ними. Это соответственно:
    WSGI (Web Server Gateway Interface) — это стандарт интерфейса для синхронного взаимодействия между веб-серверами и веб-приложениями на языке Python, позволяющий им работать совместно.
    ASGI (Asynchronous Server Gateway Interface) — это стандартный интерфейс для веб-серверов и приложений Python, который обеспечивает взаимодействие между ними и поддерживает как синхронную, так и асинхронную обработку запросов
    Настройка Django-приложений для веб-серверов может отличаться друг от друга, в зависимости от самого хостинга, но зачастую wsgi.py будет выглядеть, примерно вот так:
    import os import sys activate_this = os.path.expanduser('~/bddt3.site/venv/bin/activate_this.py') exec(open(activate_this).read(), {'__file__': activate_this}) sys.path.insert(1, os.path.expanduser('~/bddt3.site/public_html/source/Website')) from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Website.settings') application = get_wsgi_application()
    За ASGI говорить не могу, не работал с ним пока.

    Запуск django-сервера на VPS

    Для того чтобы запустить django-сервер на VPS, потребуется предварительно настроить веб-сервер как Apache или Nginx чтобы они могли обрабатывать запросы к серверу на определённый порт:
    server { listen 80; server_name bddt3.space; location /static { root /home/site/bddt3.space; } location /media { root /home/site/bddt3.space; } location / { proxy_set_header Host bddt3.space; proxy_pass http://unix:/tmp/bddt3.space.socket; } }
    Пример настройки nginx-сервера для HTTP протокола
    Или, что более рекомендуемо, использовать 443 порт, мы живём в 2025 году в конце то концов:
    server { listen 443 ssl; server_name HOST_PLACE_SETUP; ssl_certificate /etc/letsencrypt/live/bddt3.space/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bddt3.space/privkey.pem; location /static { root /home/USER_PLACE_SETUP/HOST_PLACE_SETUP; } location /media { root /home/USER_PLACE_SETUP/HOST_PLACE_SETUP; } location / { proxy_set_header Host HOST_PLACE_SETUP; proxy_pass http://unix:/tmp/HOST_PLACE_SETUP.socket; } }
    Плюс перманентный редирект с 80 порта:
    server { l isten 80; server_name HOST_PLACE_SETUP; location / { return 301 https://HOST_PLACE_SETUP$request_uri; } }
    После чего, необходимо эти запросы передавать в твоё джанго приложение. Для этого оно должно быть запущенно. Плюс ещё должно быть что-то, что могло бы связать веб-сервера(Apache, Nginx) c твоим приложением. Их ещё называют шлюзы веб серверов, так например, ими являются Phusion Passenger и Gunicorn.
    Так как сервер может время от времени перезагружаться, то создают соответствующий демон/сервис загрузки при запуске/перезагрузки сервера:
    [Unit] Description=Gunicorn server for HOST_PLACE_SETUP [Service] Restart=on-failure User=USER_PLACE_SETUP WorkingDirectory=/home/USER_PLACE_SETUP/HOST_PLACE_SETUP/source/Website ExecStart= /home/USER_PLACE_SETUP/HOST_PLACE_SETUP/venv/bin/gunicorn --bind unix:/tmp/HOST_PLACE_SETUP.socket Website.wsgi:application [Install] WantedBy=multi-user.target
    Данный скрипт имеет подстановочные переменные HOST_PLACE_SETUP И USER_PLACE_SETUP.
    Это пример, который связывает веб-сервер Nginx и Django-приложение через Gunicorn используя сокеты unix.

    Заключение

    В этой статье мы рассмотрели, 4 возможных способа запуска django сервера.
    1. В первом случае обычный запуск для разработки.
    2. Во втором, запуск боевого сервера с поддержкой статических файлов, всё для той же разработки.
    3. В третьем случае обозрели совершенно другой подход в запуске django сервера, через WSGI и ASGI интерфейсы.
    4. Ну и в четвёртом способе, как сделать всё то же самое только с большим контролем и использованием обратных прокси.
    Если я упустил некий особый кейс или случай, который мог бы дополнить данную статью буду рад комментам и вашим предложениям. ( ̄︶ ̄)↗ 



    Не забудь поделиться, лайкнуть и оставить комментарий)

    Комментарии

    (0)

    captcha
    Отправить
    ЗАГРУЗКА ...
    Сейчас тут пусто. Буть первым (o゚v゚)ノ

    Другое

    Похожие статьи


    Как запустить телеграм бота на сервере (деплой телеграм бота)

    Часы
    19.01.2024
    /
    Часы
    05.10.2025
    Глазик
    5137
    Сердечки
    3
    Соединённые точки
    0
    Соединённые точки
    2
    Соединённые точки
    1
    Это гайд про то как запустить телеграм бота, написанного на python/aiogram, на сервере. Как его установить, запустить и обновлять при необходимости. А также подготовка виртуального окружения вместе с автоматизацией обновления …

    Как развернуть Django сайт на бегет хостинг (или VPS). Полная инструкция.

    Часы
    12.05.2024
    /
    Часы
    02.10.2025
    Глазик
    4823
    Сердечки
    3
    Соединённые точки
    1
    Соединённые точки
    2
    Соединённые точки
    0
    Это статья-инструкция о том как можно разместить django-сайт на beget. Показываю два способа (деплой на хостинге и деплой на VPS). Плюс, как настроить и подключить базу данных, почту, статику и …

    Пустой(Стартовый) проект на Django. Как сделать и что для этого нужно

    Часы
    19.07.2024
    /
    Часы
    05.10.2025
    Глазик
    258
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    О создании пустого или стартового django проекта, используя виртуальное окружение и с последующим запуском тестового сервера.