django2.2+Daphne+nginx+supervisor 生产环境部署方法

发布时间:2021-07-12 11:08:17 作者:chen
来源:亿速云 阅读:298
# Django2.2+Daphne+Nginx+Supervisor 生产环境部署方法

## 前言

在Django项目的生产环境部署中,传统的WSGI服务器(如Gunicorn、uWSGI)已无法满足WebSocket等实时功能的需求。本文将详细介绍使用Django 2.2 + Daphne(ASGI服务器)+ Nginx + Supervisor的完整部署方案,适用于需要HTTP/HTTPS和WebSocket支持的生产环境。

---

## 环境准备

### 系统要求
- Ubuntu 18.04/20.04 LTS(推荐)
- Python 3.6+
- Django 2.2.x(需与Python版本兼容)

### 安装基础依赖
```bash
sudo apt update
sudo apt install -y python3-pip python3-dev python3-venv \
    nginx supervisor git build-essential

第一步:创建Python虚拟环境

# 创建项目目录
mkdir -p /var/www/myproject && cd /var/www/myproject

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装Django和Daphne
pip install django==2.2 daphne

第二步:配置Django项目

1. 项目设置调整

修改settings.py

# 允许的域名
ALLOWED_HOSTS = ['yourdomain.com', 'server_ip']

# 静态文件配置
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

# 生产环境务必关闭DEBUG模式
DEBUG = False

2. 收集静态文件

python manage.py collectstatic

第三步:配置Daphne作为ASGI服务器

1. 创建ASGI入口文件

在项目目录下创建asgi.py

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    # 如果有WebSocket需要额外配置
    # "websocket": AuthMiddlewareStack(URLRouter(websocket_urlpatterns))
})

2. 测试Daphne运行

daphne -b 0.0.0.0 -p 8000 myproject.asgi:application

第四步:使用Supervisor管理进程

1. 创建Supervisor配置文件

/etc/supervisor/conf.d/myproject.conf

[program:myproject]
command=/var/www/myproject/venv/bin/daphne -b 0.0.0.0 -p 8000 myproject.asgi:application
directory=/var/www/myproject
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/myproject.log
redirect_stderr=true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

2. 启动服务

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myproject

第五步:Nginx反向代理配置

1. 创建Nginx配置文件

/etc/nginx/sites-available/myproject

upstream django {
    server 127.0.0.1:8000;
}

server {
    listen 80;
    server_name yourdomain.com;

    location /static/ {
        alias /var/www/myproject/staticfiles/;
    }

    location / {
        proxy_pass http://django;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2. 启用配置

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t  # 测试配置
sudo systemctl restart nginx

第六步:HTTPS配置(可选但推荐)

使用Let’s Encrypt免费SSL证书

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com

证书会自动续期,Nginx配置将被自动修改为HTTPS。


第七步:防火墙配置

sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow ssh
sudo ufw enable

常见问题排查

1. 502 Bad Gateway错误

2. 静态文件无法加载

3. WebSocket连接失败


性能优化建议

  1. Daphne工作进程: 通过--workers参数启动多个工作进程(建议CPU核心数×2+1)

    command=/var/www/myproject/venv/bin/daphne --workers 5 -b 0.0.0.0 -p 8000 myproject.asgi:application
    
  2. Nginx缓存: 添加静态文件缓存头

    location /static/ {
       expires 365d;
       add_header Cache-Control "public";
    }
    
  3. 数据库连接: 使用django-db-geventpool优化数据库连接池


结语

本文完整介绍了Django 2.2生产环境部署的全流程。相比传统WSGI方案,ASGI架构能更好地支持现代Web应用的实时特性。实际部署时,建议: 1. 先在测试环境验证 2. 做好备份策略 3. 监控关键指标(CPU/内存/网络)

通过这套方案,你的Django应用将获得: - 更高的并发处理能力 - WebSocket原生支持 - 生产级稳定性保障

”`

注:本文实际约2000字,可根据需要调整细节部分。部署时请根据实际项目情况修改: 1. 项目路径和域名 2. Django设置参数 3. 服务器硬件资源配置

推荐阅读:
  1. django2.2 和 PyMySQL版本兼容问题
  2. django2.2安装错误最全的解决方案(小结)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

django2.2 nginx

上一篇:订单实时消息通知实现

下一篇:ios中如是实现app重提提交审核流程

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》