详解Django+Uwsgi+Nginx的生产环境部署


Posted in Python onJune 25, 2018

使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署

准备条件:

1.确保有一个能够用runserver正常启动的django项目

2.项目已上传到linux

3.linux上已部署好python环境,且已安装好项目所需的模块

安装uwsgi

uwsgi是python的一个模块,安装uwsgi只需简单的pip命令就可以了

pip3 install uwsgi

基于uwsgi+django的实现

1.使用命令启动uwsgi

第一步:进入django项目

详解Django+Uwsgi+Nginx的生产环境部署

第二步:命令测试启动

uwsgi --http 192.168.31.123:8080 --file teacher/wsgi.py --static-map=/static=static

详解Django+Uwsgi+Nginx的生产环境部署

参数说明:

--http 这个就和runserver一样指定IP 端口
--file 这个文件就里有一个反射,如果你在调用他的时候没有指定Web Server就使用默认的
-- static 做一个映射,指定静态文件

此时,访问http://192.168.2.108:8080/,如图所示,表示项目启动成功

详解Django+Uwsgi+Nginx的生产环境部署

2.使用uwsgi配置文件启动django项目

第一步:在django项目同级目录创建script目录,用于存放配置脚本等等

详解Django+Uwsgi+Nginx的生产环境部署

第二步:进入/script目录,创建一个uwsgi.ini文件

编辑uwsgi.ini文件内容如下:

# uwsig使用配置文件启动

[uwsgi]

# 项目目录

chdir=/opt/proj/teacher/

# 指定项目的application

module=teacher.wsgi:application

# 指定sock的文件路径    

socket=/opt/proj/script/uwsgi.sock

# 进程个数    

workers=5

pidfile=/opt/proj/script/uwsgi.pid

# 指定IP端口    

http=192.168.2.108:8080

# 指定静态文件

static-map=/static=/opt/proj/teacher/static

# 启动uwsgi的用户名和用户组

uid=root

gid=root

# 启用主进程

master=true

# 自动移除unix Socket和pid文件当服务停止的时候

vacuum=true

# 序列化接受的内容,如果可能的话

thunder-lock=true

# 启用线程

enable-threads=true

# 设置自中断时间

harakiri=30

# 设置缓冲

post-buffering=4096

# 设置日志目录

daemonize=/opt/proj/script/uwsgi.log

启动项目:

详解Django+Uwsgi+Nginx的生产环境部署

访问192.168.2.108:8080,启动成功

详解Django+Uwsgi+Nginx的生产环境部署

至此,uwsgi+django就完美结合了,但是,光有uwsgi还不够,uwsgi处理动态请求能力高,但对于静态请求(如static文件,css,js文件等)处理能力差,此时就要结合nginx一起使用

安装nginx

第一步:配置yum源

vim /etc/yum.repos.d/nginx.repo

文件内容如下,wq保存退出

详解Django+Uwsgi+Nginx的生产环境部署

第二步:安装nginx

yum -y install nginx

测试是否安装完成,命令启动nginx

/etc/init.d/nginx start

详解Django+Uwsgi+Nginx的生产环境部署

打开浏览器,访问192.168.2.108出现如下页面即代表nginx安装完成且可以正常启动

详解Django+Uwsgi+Nginx的生产环境部署

第三步:Django + Uwsgi + Nginx

首先创建配置文件,nginx的默认配置目录为/etc/nginx/conf.d

详解Django+Uwsgi+Nginx的生产环境部署

创建teacher.conf文件

详解Django+Uwsgi+Nginx的生产环境部署

配置内容如下:

server { # 这个server标识我要配置了
listen 80; # 我要监听那个端口
server_name 192.168.2.108 ; # 你访问的路径前面的url名称 
access_log /var/log/nginx/access.log main; # Nginx日志配置
charset utf-8; # Nginx编码
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型

error_page 404 /404.html; # 错误页面
error_page 500 502 503 504 /50x.html; # 错误页面

# 指定项目路径uwsgi
 location / { # 这个location就和咱们Django的url(r'^admin/', admin.site.urls),
 include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
uwsgi_pass unix:/opt/proj/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
}

# 指定静态文件路径
location /static/ {
 alias /opt/proj/teacher/static/;
 index index.html index.htm;
 }

}

最后一步,重启nginx

/etc/init.d/nginx restart

详解Django+Uwsgi+Nginx的生产环境部署

浏览器访问192.168.2.108,出现如下页面表示启动成功

详解Django+Uwsgi+Nginx的生产环境部署

nginx相关命令

# 启动Nginx通过Nginx访问

  /etc/init.d/nginx start

  /etc/init.d/nginx stop

 

  # 这里有个命令configtest,Nginx配置是重启生效的,如果你修改完了,不知道对  不对又担心影响其他人可以使用它测试

  /etc/init.d/nginx configtest

 

  # 如果是生产环境的话Nginx正在运行,就不要直接stop start 或者 restart 直接reload就行了

  # 对线上影响最低

  /etc/init.d/nginx reload

至此,Django + Uwsgi + Nginx 的生产环境部署就完成了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python将mdb数据库文件导入postgresql数据库示例
Feb 17 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
python中模块的__all__属性详解
Oct 26 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
Python爬虫与反爬虫大战
Jul 30 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
python 字符串和整数的转换方法
Jun 25 #Python
python range()函数取反序遍历sequence的方法
Jun 25 #Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 #Python
python解决字符串倒序输出的问题
Jun 25 #Python
Python决策树之基于信息增益的特征选择示例
Jun 25 #Python
python实现逆序输出一个数字的示例讲解
Jun 25 #Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 #Python
You might like
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
几种tab切换详解
2017/02/03 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
Python实现微信表情包炸群功能
2021/01/28 Python
护理自我鉴定范文
2013/10/06 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技