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; }

浙公网安备 33010602011771号