📜  在 Ubuntu 服务器上配置 Django WebSocket 应用程序

📅  最后修改于: 2022-05-13 01:55:45.804000             🧑  作者: Mango

在 Ubuntu 服务器上配置 Django WebSocket 应用程序

本教程将详细介绍如何在Ubuntu 20.10 服务器上配置 django websocket 应用程序的每个步骤。本文假设您熟悉 Django 并已运行 ubuntu 远程服务器。要了解有关 Django 的更多信息,请查看 – Django 教程

首先,让我们看看我们将使用什么来将其投入生产,

  1. Nginx – Web 和代理服务器
  2. Daphne – 我们的 ASGI(异步服务器网关接口)服务器,它将为我们的 Django 应用程序提供服务
  3. Redis 后端服务器——它将处理我们的网络套接字连接 ( ws:// )

nginx配置

安装 Nginx 和 Supervisor

$ sudo apt install nginx supervisor

在您的 /etc/nginx/sites-available/ 文件夹中创建您的服务器并添加以下内容,

upstream redis_backend_server{
server localhost:6379;
}

upstream app_server {
server localhost:9090;
}

server {
listen 80;
listen 443 ssl;
keepalive_timeout 700;

ssl_certificate ;
ssl_certificate_key ;

server_name foo.com www.foo.com;
access_log ;
error_log ;

add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy "frame-ancestors self https://foo.com";

location /static/ {

root /var/www/staticfiles/;

  }

if ($scheme = http) {
       return 301 https://$server_name$request_uri;
  }

location / {
       include proxy_params;
       proxy_pass http://app_server;
  }

location /ws {
   proxy_pass http://redis_backend_server;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";


   proxy_ssl_certificate ;
   proxy_ssl_certificate_key ;

   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;
   proxy_set_header X-Forwarded-Proto  $scheme;
   }
}

– 将 foo 替换为您的 IP 或域名。

现在保存配置并重启 Nginx,

$ sudo service nginx reload

检查配置是否正确完成,如下所示,

完成后,让我们继续我们的实际应用程序服务器。

达芙妮配置

安装达芙妮

$ pip3 install daphne

测试一切是否正常,

$ daphne -p 8001 project.asgi:application

您应该在终端中看到类似的内容,

在浏览器中转到 :8001 以检查应用程序是否正常工作。

在 /etc/supervisor/conf.d/ 文件夹中创建 django_server 并添加以下内容,

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

# Directory where your site's project files are located
directory= 

# 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= -u /run/daphne/daphne%(process_num)d.sock --endpoint fd:fileno=0 --access-log - --proxy-headers project.asgi:application

# Number of processes to startup, roughly the number of CPUs you have
numprocs=1
# 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=
redirect_stderr=true

注意– 用您的项目名称替换项目

一旦完成,我们必须为我们的套接字创建一个目录来运行,

$ sudo mkdir /run/daphne/

重新启动并更新主管配置,

$ sudo supervisorctl reread
$ sudo supervisorctl update

我知道有很多事情要做,我们只需要再完成一步即可启动并运行我们的服务器。所以留在我身边。

Redis后端服务器配置

这是将处理 Daphne 服务器转发的所有 Web 套接字连接的服务器。

安装redis服务器

$ sudo apt install redis-server

编辑 Redis 配置以使用我们的 systemd 作为服务运行

$ sudo nano /etc/redis/redis.conf

将配置文件中的“受监督的 no”更改为“受监督的 systemd”

$ sudo systemctl restart redis.service

检查服务器是否处于活动状态并正在运行

sudo systemctl status redis

你应该得到以下回复

最后,一切就绪并运行后,您应该会看到您的应用程序在您的服务器上启动并运行。