Search code examples
djangonginxdjango-channelsnginx-configdaphne

Trouble with deploy django channels using Daphne and Nginx


I got a 502 error when I'm trying to open a website. I used the instructions from the official website link

Added new file lifeline.conf at /etc/supervisor/conf.d/

lifeline.conf

[fcgi-program:asgi]
# TCP socket used by Nginx backend upstream
socket=tcp://localhost:8000

# Directory where your site's project files are located
directory=/home/ubuntu/lifeline/lifeline-backend

# Each process needs to have a separate socket file, so we use process_num
# Make sure to update "mysite.asgi" to match your project name
command=/home/ubuntu/Env/lifeline/bin/daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-head$

# Number of processes to startup, roughly the number of CPUs you have
numprocs=4

# Give each process a unique name so they can be told apart
process_name=asgi%(process_num)d

# Automatically start and recover processes
autostart=true
autorestart=true

# Choose where you want your log to go
stdout_logfile=/home/ubuntu/asgi.log
redirect_stderr=true

Setup nginx conf

upstream channels-backend {
    server localhost:8000;
}

server {
    listen 80;
    server_name staging.mysite.com www.staging.mysite.com;
    client_max_body_size 30M;
    location = /favicon.ico { access_log off; log_not_found off; }

    location / {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_pass http://channels-backend;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_redirect off;
        proxy_set_header Host $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-Host $server_name;
    }
}

I checked the asgi log file and it contains an error .

daphne: error: the following arguments are required: application

I'm guessing a mistake in lifeline.conf.


Solution

  • I am assuming you are not passing asgi application to daphne, because configuration you pasted in question has missing line. You have to pass it correctly. Assuming you have conf package with asgi.py module inside it containing asgi application instance, you have to do

    command=/home/ubuntu/Env/lifeline/bin/daphne -u /run/daphne/daphne%(process_num)d.sock conf.asgi:application
    

    conf.asgi:application should be at the end.