@blohinn

Как интегрировать Django Channels в Django используя докер?

Допустим, есть существующий проект на Django.

Поднимается Docker'ом, WSGI сервер - GUNICORN.

Статику отдает NGINX, все по классике. Сайт - типичный бложик и т.п.

Теперь нужно запилить чат и систему оповещений используя Django Channell, разворачивая уже через Daphne.

Как это вообще все устроить?
  • Вопрос задан
  • 1104 просмотра
Пригласить эксперта
Ответы на вопрос 1
neatsoft
@neatsoft
Life is too short for bad software
Есть два варианта:
1. Если нагрузка небольшая, можно использовать Daphne и для WSGI, и для ASGI запросов;
2. Передавать контейнерам режим работы через environment variables (использовать entrypoint script, который будет запускать manage.py runserver, uwsgi, gunicorn, daphne, или manage.py runworker в зависимости от выбранного режима), запросы распределять между контейнерами в зависимости от пути или доменного имени.

"По классике" статику отдаёт не Nginx, а S3 - AWS или его аналоги в проде, Minio в dev окружениях.

Вместо Nginx советую использовать Traefik - он умеет находить контейнеры и роутить запросы к ним в зависимости от параметров, указанных в docker-compose.yml. Автоматический load balancing, letsencrypt без лишних телодвижений, очень просто конфигурируется, может обслуживать несколько разных проектов без дополнительных настроек (актуально для фрилансеров).

#!/bin/sh

set -o errexit
set -o pipefail
set -o nounset


if [ $DJANGO_DEBUG == "on" ]; then
    ./manage.py runserver 0.0.0.0:8000
elif [ $DJANGO_MODE == "worker" ]; then
    ./manage.py runworker
else
    daphne -b 0.0.0.0 -p 8000 config.asgi:application
fi
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы