Как изменить конфигурацию docker и nginx для поддержки asgi WebSocket wss в Django?
Я работаю над небольшим Django проектом, связанным с чатом, где я должен использовать WebSocket для real0time cominucation, я развернул свой проект, используя wsgi и он работал, но когда я достиг точки использования websockt я обнаружил, что я должен изменить конфигурацию на asgi или что-то еще, не могли бы вы мне помочь
Это архитектура моего проекта:
-myproject
-docker(folder)
-certbot(folder)
-proxy(folder)
-nginx (folder)
-default-ssl.conf.tpl
-uwsgi_params
-Dockerfile (file2)
-Dockerfile (file1)
-Docker-compose-delpoy.yml
Это мой Dockerfile (file1)
FROM python:3.10-alpine3.16
ENV PYTHONUNBUFFERED 1
COPY requirements.txt /requirements.txt
RUN apk add --upgrade --no-cache build-base linux-headers && \
pip install --upgrade pip && \
pip install -r /requirements.txt
COPY app/ /app
WORKDIR /app
RUN adduser --disabled-password --no-create-home django
USER django
CMD ["uwsgi", "--socket", ":9000", "--workers", "4", "--master", "--enable-threads", "--module", "myproject.wsgi"]
Это мой производственный Docker-compose-delpoy.yml
version: '3.9'
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
- POSTGRES_DB=xxx
- POSTGRES_USER=xxx
- POSTGRES_PASSWORD=xx
app:
build:
context: .
restart: always
volumes:
- .:/app
environment:
- DJANGO_DEBUG=0
- POSTGRES_NAME=xxx
- POSTGRES_USER=xxx
- POSTGRES_PASSWORD=xxx
- DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY}
- DJANGO_ALLOWED_HOSTS=${DOMAIN}
depends_on:
- db
redis:
image: redis:alpine
proxy:
build:
context: ./docker/proxy
restart: always
depends_on:
- app
ports:
- 80:80
- 443:443
volumes:
- certbot-web:/vol/www
- proxy-dhparams:/vol/proxy
- certbot-certs:/etc/letsencrypt
environment:
- DOMAIN=${DOMAIN}
certbot:
build:
context: ./docker/certbot
command: echo "Skipping..."
environment:
- EMAIL=${ACME_DEFAULT_EMAIL}
- DOMAIN=${DOMAIN}
volumes:
- certbot-web:/vol/www
- certbot-certs:/etc/letsencrypt/
depends_on:
- proxy
volumes:
certbot-web:
proxy-dhparams:
certbot-certs:
и это мой default-ssl.conf.tpl
server {
listen 80;
server_name ${DOMAIN} www.${DOMAIN};
location /.well-known/acme-challenge/ {
root /vol/www/;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name ${DOMAIN} www.${DOMAIN};
ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem;
include /etc/nginx/options-ssl-nginx.conf;
ssl_dhparam /vol/proxy/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location /static {
alias /vol/static;
}
location / {
uwsgi_pass ${APP_HOST}:${APP_PORT};
include /etc/nginx/uwsgi_params;
client_max_body_size 10M;
}
}