Всем привет, проблема следующая:
сделал функционал для websockets в своем django приложении. На локалке подключение происходит успешно, но на сервере ubuntu 18 все валится.
локалка
consumers.py
class CallConsumer(AsyncWebsocketConsumer):
"""
WebSocket-потребитель для отправки уведомлений пользователям.
"""
async def connect(self) -> None:
"""Устанавливает соединение и проверяет юзера на аутентификацию"""
self.user = self.scope['user']
self.group_name = 'notifications'
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept()
async def disconnect(self, close_code) -> None:
"""Отключает соединение"""
await self.channel_layer.group_discard(
self.group_name,
self.channel_name
)
async def send_notification(self, event: dict) -> None:
""" Отправляет уведомление конкретному пользователю"""
if self.scope['user'].id == int(event['employee_number']): # сравниваем id текущего пользователя со списком из контекста(send_simple_notification)
await self.send(text_data=json.dumps(event['data'], ensure_ascii=False))
asgi.py
import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application
from django.urls import path
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cpm.settings")
django_asgi_app = get_asgi_application()
from call.consumers import CallConsumer
application = ProtocolTypeRouter({
# Django's ASGI application to handle traditional HTTP requests
"http": django_asgi_app,
# WebSocket chat handler
"websocket": AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter([
path("ws/notifications/", CallConsumer.as_asgi())
])
)
),
})
settings.py
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [("адрес сервера ubuntu", 6379)],
},
},
}
ASGI_APPLICATION = "cpm.asgi.application"
docker-compose.yml
version: '3.8'
services:
# Контейнер для Gunicorn (WSGI)
wsgi:
build:
context: .
dockerfile: Dockerfile_wsgi
command: >
sh -c "python manage.py collectstatic --noinput &&
python manage.py makemigrations &&
python manage.py migrate &&
gunicorn cpm.wsgi:application --bind 0.0.0.0:8005 --access-logfile -"
volumes:
- ./logs/wsgi_docker/:/cpm/logs/
- static_value:/cpm/static/
- media_value:/cpm/media/
restart: always
ports:
- "8005:8005"
asgi:
build:
context: .
dockerfile: Dockerfile_asgi
command: >
sh -c "python manage.py makemigrations &&
python manage.py migrate
python manage.py runserver 0.0.0.0:8006"
volumes:
- ./logs/asgi_docker/:/cpm/logs/
- static_value:/cpm/static/
- media_value:/cpm/media/
restart: always
ports:
- "8006:8006"
depends_on:
- wsgi
redis:
image: redis:alpine
restart: always
nginx:
build: ./nginx
ports:
- "85:85"
depends_on:
- wsgi
- asgi
volumes:
static_value:
media_value:
ошибка на сервере
nginx.conf
server {
listen 85;
server_name my_name;
server_tokens off;
location / {
proxy_pass http://wsgi:8005/; # Порт, на котором работает WSGI (Gunicorn)
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /ws/notifications/ {
proxy_pass http://asgi:8006/; # Порт, на котором работает ASGI-сервер (Daphne)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
заранее всем спасибо