在 Ubuntu 服务器上配置 Django WebSocket 应用程序
本教程将详细介绍如何在Ubuntu 20.10 服务器上配置 django websocket 应用程序的每个步骤。本文假设您熟悉 Django 并已运行 ubuntu 远程服务器。要了解有关 Django 的更多信息,请查看 – Django 教程
首先,让我们看看我们将使用什么来将其投入生产,
- Nginx – Web 和代理服务器
- Daphne – 我们的 ASGI(异步服务器网关接口)服务器,它将为我们的 Django 应用程序提供服务
- 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
您应该在终端中看到类似的内容,
在浏览器中转到
在 /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
你应该得到以下回复
最后,一切就绪并运行后,您应该会看到您的应用程序在您的服务器上启动并运行。