2016-09-09 8 views
7

Я пытаюсь получить приложение чата, которое работает на каналах django, для работы с AWAS Elastic Beanstalk с балансировщиком нагрузки.Ошибка веб-памяти при использовании эластичного бобового стека с каналами Django

Я в основном изменяю код от https://github.com/jacobian/channels-example для работы с эластичным бобовым стеблем. Я могу успешно запустить его локально с помощью команды

python manage.py runserver 

Проблема заключается в том, когда я развернуть его с эластичным Beanstalk, я получаю следующее сообщение об ошибке, когда приложение чата запускается

WebSocket connection to 'wss://mydomain.com/test/' failed: Error 
during WebSocket handshake: Unexpected response code: 200 

Я попытался решения, предложенные в https://stackoverflow.com/a/29831723/3667089, но он просто показал другой код ошибки

WebSocket connection to 'wss://mydomain.com/test/websocket' failed: 
Error during WebSocket handshake: Unexpected response code: 404 

я уже изменил балансир слушателя порт нагрузки для TCP 80 и получил SSL-сертификат, чтобы изменить порт безопасного прослушивателя на SSL 443, но все равно получить ту же ошибку.

Я также читал Websockets with socket.io on AWS Elastic Beanstalk, но нет настройки для настройки прокси-сервера для Django, я думаю, что он использует Apache по умолчанию.

Что мне не хватает для конфигурации эластичного бобового стежка, чтобы он работал?

Есть ли способ изменить это, чтобы мы могли запускать сервер дафни с помощью asgi?

+0

Я бег каналов на AWS VPS, и я должен был использовать супервизор, чтобы заставить его работать. Каналы docs говорят, что вам нужно запустить сервер ('venv/bin/daphne app.asgi: channel_layer') и рабочих (' python manage.py runwoker'), чтобы заставить все работать. Я могу опубликовать свой файл supervisord.conf в ответах, если вы хотите, но я не уверен, как все работает на Elastic Beanstalk. – Brobin

+0

@Brobin Да, что будет очень полезно – user3667089

+0

Извините, если я слишком поздно, но могу ли я узнать, что вы используете балансировщик нагрузки? Если он классический, он не поддерживает веб-сайты изначально. –

ответ

0

Я не на Эластичном бобовом стебле, но вот моя конфигурация для VPS. Ubuntu 14.04 с nginx и супервизором. Задача супервайзера - убедиться, что сервер и рабочий процесс всегда работают. Nginx прослушивает порт 8000 на локальном и передает, что 8080 и 443.

# nginx.conf 
server { 
    listen 8080 default_server; 
    server_name example.com; 
    return 301 https://example.com$request_uri; 
} 

server { 
    listen 443 default_server ssl; 
    server_name example.com; 

    # ... SSL stuff 

    # Send root to the ASGI server 
    location/{ 
     proxy_pass http://localhost:8000; 
     proxy_http_version 1.1; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header Host $host; 
    } 

    # Static Files 
    location /static/ { 
     root /home/ubuntu/project; 
    } 

    # Media Files 
    location /media/ { 
     root /home/ubuntu/project; 
    } 
} 

Вот что моя конфигурация для супервизора выглядит. Я запустить сервер перезагрузки супервизор sudo service supervisor restart

# supervisord.conf 
[program:project_server] 
directory=/home/ubuntu/project/ 
command=/home/ubuntu/project/venv/bin/daphne project.asgi:channel_layer --port 8000 --bind 0.0.0.0 

[program:project_worker] 
process_name=project_worker%(process_num)s 
numprocs=3 
directory=/home/ubuntu/project/ 
command=/home/ubuntu/project/venv/bin/python /home/ubuntu/project/manage.py runworker 

[group:project] 
programs=project_server,project_worker