Python Django的生产部署方式
本地化部署的Django有很大的局限性,无法用于生产环境,比如无法抗住多并发,无法长时间的运行,容易造成网页无响应的问题。所以如何将Django部署到真正的生产环境中,让其能够真正的像正常的网页一样工作,是接下来需要讨论的问题。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。现在主流的网页也是采用nginx的方式,比如百度,淘宝,京东,新浪等互联网巨头。而跟nginx进行交互的是uWSGI,uWSGI是一个Web服务器,支持WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。所以将Django部署到Nginx+uWSGI是一个很好的选择。
WSGI / uwsgi / uWSGI 这三个概念的区分。
- WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
- uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
uWSGI的主要特点如下
- 超快的性能
- 低内存占用(实测为apache2的mod_wsgi的一半左右)
- 多app管理
- 详尽的日志功能(便于分析分析app性能和瓶颈)
- 高度可定制(内存大小限制,服务一定次数后重启等)
uWSGI的安装使用:
# 稳定版
pip install uwsgi
# 最新开发板
pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
测试是否安装成功:
# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
在命令行中输入
uwsgi --http :8000 --wsgi-file test.py
启动测试程序,--http为通信协议,8000为端口好 test.py为待测试文件
使用uWSGI启动Django,记住路径一定要在项目根目录下,module的名字也必须跟项目名字一样。
uwsgi --http :8000 --module mysite.wsgi
使用vim新建uwsgi.ini配置文件,内容为:
http = :9000
#socket端口
socket = 127.0.0.1:8001
# 项目根目录
chdir = basedir# Django's wsgi file文件目录即django中wsgi.py的位置
wsgi-file =# 最大进程数
processes = 4
#最大线程数
threads = 2 #监控进程
stats = 127.0.0.1:9191
# 清除环境变量
vacuum = true
最后可以通过使用 uwsgi uwsgi.ini 指令执行uwsgi
可以看到其实uwsgi已经能够实现网页响应的功能,但是不如Nginx稳定和主流,那么我们接下来看看Nginx的使用方法。
Nginx的安装:
sudo apt-get install nginx
sudo /etc/init.d/nginx start # start nginx
在项目根目录下创建一个以nginx结尾的配置文件: vim project_name-nginx.conf ,然后输入相关内容:
# project_name_nginx.conf # 将所有过来的请求转发到指定地址
upstream django {
server 127.0.0.1:8001; #创建网页访问端口
} # 配置主机
server {
# 监听端口
listen 8000;
# the domain name it will serve for
server_name .example.com;
charset utf-8; # 最大上传文件大小
client_max_body_size 75M; # 一般够用 location /media {
alias /path/to/your/mysite/media; # Django media 文件路径
} location /static {
alias /path/to/your/mysite/static; # Django 的static 文件路径
} # 将所有的非media请求发送到Djangp中
location / {
uwsgi_pass django;
include /path/to/your/mysite/uwsgi_params; # uwsgi_params 文件应在项目根目录中创建
}
}
完成后使用 sudo ln -s ~/项目根目录/mysite_nginx.conf /etc/nginx/sites-enabled/ 建立一个软连接,让nginx能够识别该配置
在djangp setting中末尾加一句程序: STATIC_ROOT = os.path.join(BASE_DIR, "static/") 然后再使用 python manage.py collectstatic 命令将所有的静态文件收集起来。复制到上述static对应的文件路径中
最后同时启动uwsgi(uwsgi uwsgi.ini)和nginx(/etc/init.d/nginx restart)就可以使python的Django顺利运行再Nginx上了,可实现高并发的请求功能,稳定性比Django高很多。
Python Django的生产部署方式的更多相关文章
- 从零开始部署Django生产环境(适用:《跟老齐学Python Django实战》)
<跟老齐学Python Django实战>作为市面上少有的Django通俗实战书籍,给了我学习Django很大的帮助.作为一名新入门的菜鸟,全书我重复练习了至少三遍,每次都有新的收获. 前 ...
- [原]Python Web部署方式总结
不要让服务器裸奔 学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服 ...
- [转]Python Web部署方式总结
学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服务器支持不足,在了 ...
- Python Web部署方式全汇总
学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服务器支持不足. 在 ...
- 将 Django 应用程序部署到生产服务器
原文出自: http://www.ibm.com/developerworks/cn/opensource/os-django/ 比较有启发性质的一篇文章,会避免很多弯路 Django 是一个基于 P ...
- 干货分享:Python Web 部署方式大全
不要让服务器裸奔 学过PHP的都了解,php的正式环境部署非常简单,改几个文件就OK,用FastCgi方式也是分分钟的事情.相比起来,Python在web应用上的部署就繁杂的多,主要是工具繁多,主流服 ...
- Python环境搭建、python项目以docker镜像方式部署到Linux
Python环境搭建.python项目以docker镜像方式部署到Linux 本文的项目是用Python写的,记录了生成docker镜像,然后整个项目在Linux跑起来的过程: 原文链接:https: ...
- python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装.基本命令.视图与网站 一.简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 w ...
- Django + Gunicorn + Nginx 部署之路
前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...
随机推荐
- 0基础学python3心得体会 - python3学习笔记 - python3基础
基础预热 print()会依次打印每个字符串,遇到逗号","会输出一个空格,可以打印整数,或者计算 结果 Python提供了一个input(),,可以让用户输入字符串,并存放到一个 ...
- [记录]Python2.7使用argparse模块
# -*- coding: utf8 -*- import argparse #ArgumentParser.add_argument(name or flags-[, action][, nargs ...
- TripleDES加密解密
参考:http://www.cnblogs.com/chnking/archive/2007/08/14/855600.html 参考:http://blog.csdn.net/change_from ...
- Winform下去除MDI窗体边框
做项目中间遇到了MDI窗体内边框的问题,经过苦苦寻找,最终得到了解决方案 在Main窗体中调用API // Win32 Constants ; ; private const int WS_BORDE ...
- Java数字签名——DSA算法
RSA数字加密算法参考:http://www.cnblogs.com/LexMoon/p/javaRSA.html DSS: 数字签名标准 DSA: 数字签名算法 DSA仅仅包含数字签名 —————— ...
- javascript高级程序设计第三章的一些笔记
[TOC] 1. 语法 1.1 区分大小写 变量.函数名和操作费都区分大小写. 1.2 标识符 标识符指变量.函数.属性的名字,或者函数的参数.标识符按以下规则组合: 第一个字符必须是一个字母,下划线 ...
- uva1471 二叉搜索树
此题紫书上面有详细分析,关键是运用Set优化实现O(nlgn)复杂度 AC代码: #include<cstdio> #include<set> #include<algo ...
- WC2016自测
挑战NPC 原题链接 爆搜20分,贪心10分,网络流30分 //挑战NPC #include <cstdio> #include <cstring> #include < ...
- ORACLE透明网关访问SQL Server配置总结
透明网关概念 ORACLE透明网关(Oracle Transparent Gateway)可以解决ORACLE数据库和非ORACLE数据库交互数据的需求.在一个异构的分布式环境中,通过ORACLE ...
- Flex读取txt文件中的内容(三)
Flex读取txt文件中的内容 1.设计源码 LoadTxt.mxml: <?xml version="1.0" encoding="utf-8"?> ...