2016-09-09 2 views
7

Ich versuche, eine Chat-App mit django-Kanälen zu erhalten, um mit einem Load Balancer an AWS Elastic Beanstalk zu arbeiten.Websocket-Fehler bei Verwendung von Elastic Beanstalk mit Django-Kanälen

Ich bin im Grunde modifizieren den Code von https://github.com/jacobian/channels-example mit Elastic Beanstalk arbeiten. Ich bin in der Lage, um es erfolgreich lokal laufen auf mit dem Befehl

python manage.py runserver 

Das Problem ist, wenn ich es mit Elastic Beanstalk bereitstellen, erhalte ich die folgende Fehlermeldung, wenn der Chat-Anwendung

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

gestartet habe ich versucht, Lösungen bei https://stackoverflow.com/a/29831723/3667089 vorgeschlagen, aber es zeigte nur einen anderen Fehlercode

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

ich bereits verändert auch die Load-Balancer-Listener-Port TCP 80 und erhalten ein SSL-Zertifikat, um den sicheren Listener-Port in SSL 443 zu ändern, aber immer noch denselben Fehler zu erhalten.

Ich lese auch Websockets with socket.io on AWS Elastic Beanstalk, aber es gibt keine Option, den Proxy-Server für Django zu konfigurieren, ich denke, es verwendet Apache standardmäßig.

Was fehlt mir bei der Konfiguration von Elastic Beanstalk, damit es funktioniert?

Gibt es eine Möglichkeit, dies zu ändern, damit wir Daphne-Server mit Asgi ausführen können?

+0

Neustart Ich Kanäle auf einer AWS VPS ausgeführt wird, und ich hatte Supervisor zu verwenden, um es an die Arbeit. Die Channel-Dokumente sagen, dass Sie sowohl den Server ('venv/bin/daphne app.asgi: channel_layer') als auch die Worker (' python manage.py runwoker') ausführen müssen, um die Dinge zum Laufen zu bringen. Ich kann meine supervisord.conf in die Antworten posten, wenn Sie wollen, aber ich bin nicht sicher, wie die Dinge auf Elastic Beanstalk funktionieren. – Brobin

+0

@Brobin Ja, das wird sehr geschätzt werden – user3667089

+0

Sorry, wenn ich zu spät bin, aber kann ich wissen, welche Load Balancer Sie verwenden? Wenn es klassisch ist, unterstützt es nicht nativ Websockets. –

Antwort

0

Ich bin nicht auf elastische Bohnenstange, aber hier ist meine Konfiguration für ein VPS. Ubuntu 14.04 mit Nginx und Supervisor. Aufgabe des Supervisors ist es, sicherzustellen, dass der Server- und Worker-Prozess immer ausgeführt wird. Nginx hört Port 8000 auf localhost und leitet das 8080 und 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; 
    } 
} 

Hier ist, was meine Konfiguration für Supervisor aussieht. Ich starten Sie den Server, indem Sie einfach Supervisor 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 
Verwandte Themen