Как запустить Дафну и Ганикорна одновременно? - PullRequest
0 голосов
/ 08 апреля 2020

Я использую django-channels, поэтому мне нужно использовать daphne, но для файлов stati c и других вещей, которые я хочу использовать gunicorn. Я могу запустить daphne вместе с gunicorn, но я не могу запустить их обоих одновременно.

Мой вопрос заключается в том, должен ли я запускать оба из них одновременно или есть лучший вариант? Если я должен, как я могу это сделать?

Вот моя команда запуска сервера:

gunicorn app.wsgi:application --bind 0.0.0.0:8000 --reload && daphne -b 0.0.0.0 -p 8089 app.asgi:application

PS: я разделил location из / и /ws/ для gunicorn и daphne в nginx.conf.

1 Ответ

0 голосов
/ 01 мая 2020

Ваша проблема в том, что вы вызываете оба процесса в одном и том же контексте / строке, и один из них никогда не вызывается, потому что первый никогда не "заканчивается".

этот процесс: gunicorn app.wsgi:application --bind 0.0.0.0:8000 --reload

не прекратит работу ни в какой момент, поэтому команда && никогда не будет запущена, если вы не убьете эту команду вручную, и в этот момент я не уверен, что она не уничтожит всю цепочку процессов полностью.

, если вы хотите чтобы запустить оба, вы можете установить фоновые процессы обоих процессов, например,

(не может проверить, но это должно сработать)

gunicorn app.wsgi:application --bind 0.0.0.0:8000 --reload & daphne -b 0.0.0.0 -p 8089 app.asgi:application &

Научить человека сообщать sh информацию об этом типе проблема в здесь

Я вполне уверен, что вы потеряете обычное ведение журнала консоли, которое вы обычно имели бы, запустив их в фоновом режиме, поэтому я бы посоветовал вместо этого посмотреть nohup & или отправка журналов куда-нибудь с помощью утилиты ведения журналов, чтобы вы не летали вслепую.

Что касается других вариантов, если вы планируете масштабировать до большого числа пользователей, вероятно, 100+, я бы просто запустить два сервера, один для ш sgi django http запросы и один для asgi daphne ws запросов. Имейте nginx прокси между двумя для того, что вам нужно, и все готово. Это также то, что каналы рекомендуют для более крупных приложений.

Рекомендуется использовать префикс общего пути, например / ws /, чтобы отличать guish соединения WebSocket от обычных HTTP-соединения, потому что это упростит развертывание каналов в производственной среде в определенных конфигурациях.

В частности, для больших сайтов можно будет настроить HTTP-сервер промышленного уровня, например nginx, для маршрутизации запросов на основе пути либо (1) сервер WSGI промышленного уровня, например Gunicorn + Django для обычных HTTP-запросов, либо (2) сервер ASGI промышленного уровня, например Daphne + Channels для запросов WebSocket.

Обратите внимание, что для небольших сайтов вы можно использовать более простую стратегию развертывания, где Daphne обслуживает все запросы - HTTP и WebSocket - вместо того, чтобы иметь отдельный сервер WSGI. В этой конфигурации развертывания не требуется префикс общего пути, такой как / ws /.

...