2016-09-09 36 views
7

Yük dengeleyici ile AWS Elastic Beanstalk üzerinde çalışmak için django kanalları tarafından desteklenen bir sohbet uygulaması elde etmeye çalışıyorum.Django kanalları ile Elastik Beanstalk kullanırken Websocket hatası

Temel olarak Elastic Beanstalk ile çalışmak için https://github.com/jacobian/channels-example kodunu değiştiriyorum. Ben komutuyla başarıyla yerel olarak çalıştırmak mümkün duyuyorum

python manage.py runserver 

sorundur Ben Elastik Beanstalk ile dağıtma, ben sohbet uygulaması başlatılır aşağıdaki hatayı alıyorum

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

Denedim çözeltiler https://stackoverflow.com/a/29831723/3667089 de önerilmiştir ama sadece Ayrıca zaten TCP 80 yük dengeleyici dinleyici noktası değiştirildi farklı bir hata kodu

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

gösterdi ve elde edilen Güvenli dinleyici bağlantı noktasını SSL 443 olarak değiştirmek için bir SSL sertifikası alır ancak yine de aynı hatayı alır.

Ayrıca, Websockets with socket.io on AWS Elastic Beanstalk okudum, ancak Django için proxy sunucusunu yapılandırma seçeneği yok, varsayılan olarak Apache kullanıyor düşünüyorum.

Elastic Beanstalk'ün yapılandırılmasını sağlamak için ne yapıyorum?

Bunu değiştirmek için herhangi bir yol var mı, böylece sunucu sunucusunu asgi ile çalıştırabiliriz?

+0

yeniden başlatarak sunucuyu başlatın ve ben işe almak amire kullanmak zorunda kaldı. Kanallar dokümanlar, çalışmayı sağlamak için sunucuyu ('venv/bin/daphne app.asgi: channel_layer') ve işçileri (python manage.py runwoker') çalıştırmanız gerektiğini söylüyor. İsterseniz supervisord.conf'umu cevaplarımda yayınlayabilirim, fakat Elastic Beanstalk'ta işlerin nasıl yürüdüğünden emin değilim. – Brobin

+0

@Brobin Evet, bu çok takdir edilecek – user3667089

+0

Üzgünüm, çok geç kaldım, ama kullandığınız yük dengeleyicisini bilebilir miyim? Klasikse, websockets'ı yerel olarak desteklemez. –

cevap

0

Elastic Beanstalk'ta değilim, ancak burada bir VPS için yapılandırmam var. Nginx ve süpervizör ile Ubuntu 14.04. Süpervizörün görevi, sunucu ve çalışan sürecinin her zaman çalıştığından emin olmaktır. Nginx localhost üzerinde port 8000 dinler ve 8080 ve 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; 
    } 
} 

İşte amir benim yapılandırma neye benzediğini olduğunu iletir. Ben sadece bir AWS VPS üzerinde kanallar koşuyorum denetmene 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 
İlgili konular