Nginx部署Django项目

WSGI 协议

WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器、python模块、框架、API或者任何软件,只是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范。

server和application的规范在PEP3333中有具体描述,要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。

uwsgi 协议

与WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型(type of information)。每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。

uWSGI 实现方式

uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

Nginx

Nginx是一个Web服务器其中的HTTP服务器功能和uWSGI功能很类似,但是Nginx还可以用作更多用途,比如最常用的反向代理功能。

准备Python环境

# 安装Python
yum install -y python3 python3-pip python3-devel

# 安装uwsgi
pip3 install uwsgi -i https://pypi.douban.com/simple

# 安装Django
pip3 install django==1.11.9

简单的django配置

# 创建一个django项目
django-admin startproject mysite

# 项目settings配置文件中
# 允许哪些地址访问django *代表所有
ALLOWED_HOSTS = ['*']

# 运行django
python3 manage.py runserver 0.0.0.0:8080
# django自带的wsgiref 在调试模式下使用的wsgi的文件,请求处理能力有限,生产环境不建议使用
# uwsgi启动
uwsgi --http :8080 --module mysite.wsgi

# 访问地址
http://192.168.137.132:8080/

问题: 关闭ssh会导致连接django服务关闭

解决问题:配置文件格式 通过配置文件启动

# 创建配置文件
vim /etc/uwsgi.ini

# 文件内容
[uwsgi]
# 端口
http=:8080
# 项目路径
chdir=/data/mysite
# uwsgi的文件
wsgi-file=mysite/wsgi.py
# 虚拟环境
# virtualenv = /root/env
# 进程个数
processes=2
# 线程个数
threads=2
# 守护进程,后台启动,指定日志的输出
daemonize=/data/mysite/django.log 
# 清除临时文件 
vacuum = true 
# python文件发生改变自动重启
py-autoreload=1

# 启动
uwsgi --ini filepath
uwsgi --ini /etc/uwsgi.ini

nginx uwsgi部署django项目

1. 上传django项目

2. 安装项目所依赖的Python包与所使用到的数据库

3. uwsgi配置文件中配置django项目路径

4. 配置静态文件
# 静态文件迁移
STATIC_ROOT = os.path.join(BASE_DIR,'static') # django配置文件中配置STATIC_ROOT 路径名不能和STATICFILES_DIRS中的相同
python3 manage.py collectstatic # 开始执行迁移命令
# 静态文件配置
location /static { # 路径和django设置中相同
    alias /data/libry/static;
}

5. 配置nginx
# 重启nginx

Nginx 第一种配置方式

server {
    listen 80;
    server_name wwww.cat.com;
    location / {
        proxy_pass http://127.0.0.1:8080; # 效率低
    }
    
    # 静态文件配置
    location /static { # 路径和django设置中相同
        alias /data/libry/static;
    }
}

Nginx第二种配置方式

# uwsgi中端口的配置改为socket
socket= :9090

# nginx的配置文件
location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080; # uwsgi_pass比proxy_pass 快10倍 emm 理论
}

Nginx第三种配置方式

# uwsgi配置socket文件
socket = FilePath.sock
# socket = /data/libry/lib.sock # 重启uwsgi后 会在目标地址生成一个sock文件

# nginx的配置文件,unix查找文件
location /{
    include uwsgi_params;
    uwsgi_pass unix://FilePath.sock;
    # uwsgi_pass unix://data/libry/lib.sock;
}

 

posted @ 2020-05-25 10:46  CatdeXin  阅读(361)  评论(0)    收藏  举报