首先了解下基本概念:

  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服务器上,代理所有外部网络对内部网络的访问,浏览器访问服务器,必须经过这个代理,是被动的。

  正向代理的主动方是客户端,反向代理的主动方是服务器。

了解了基本概念就可以开始部署:

  服务器环境配置

  • 在本地的虚拟环境中,项目根目录下,执行命令收集所有包
  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)的更多相关文章

  1. django项目在uwsgi+nginx上部署遇到的坑

    本文来自网易云社区 作者:王超 问题背景 django框架提供了一个开发调试使用的WSGIServer, 使用这个服务器可以很方便的开发web应用.但是 正式环境下却不建议使用这个服务器, 其性能.安 ...

  2. Django【部署】uwsgi+nginx

    uwsgi 遵循wsgi协议的web服务器 uwsgi的安装 pip install uwsgi uwsgi的配置 项目部署时,需要把settings.py文件夹下的: DEBUG = FALSE A ...

  3. Mxonline3.6 在阿里云服务器上的部署(uwsgi nginx)

    我的项目结构 1. 执行`python manage.py migrate`命令,将迁移文件,映射到数据库中,创建相应的表. 进入数据库 use mxonline数据库     source /hom ...

  4. python部署-Flask+uwsgi+Nginx

    一.Flask部分(app.py) flask即Python代码:部分参考代码如下,相信很多人如果看到这篇文章一定有flask的代码能力. from app import create_app fro ...

  5. Django -- 部署Django 静态文件不能获取

    # 在部署上下之后无法正常显示后台admin的静态文件 # 因为文件都在django内部,而在nginx中将配置都设置到一个位置: # 措施: 1.在settings.py文件中添加配置; STATI ...

  6. 阿里云部署 Flask + uWSGI + Nginx

    一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...

  7. 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目

    0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...

  8. nginx+uwsgi+django部署流程

    当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...

  9. virtualvenv+django+uWSGI+nginx 部署

    原创博文 转载请注明出处! 1. virtualvenv 2. django 3. uWSGI 4. nginx 5. 踩坑记录 1. virtualvenv virtualvenv install ...

  10. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

随机推荐

  1. RAID磁盘阵列及CentOS7系统启动流程

    磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意,,数据读取无影响.将数据切割成许多区段,分别存放在各个硬盘 ...

  2. GLSL ES 3.0 和 2.0 的区别

    GLSL ES 3.0 和 2.0 的区别 语法区别 attribute和varying. 取而代之的是 in和out 头文件多了个#version 300 es 纹理 texture2D 和 tex ...

  3. Anki 2.0 用户手册

    Anki 2.0 用户手册 目录 Anki 2.0 用户手册 视频介绍 卡片和模板 Javascript Anki 2.0 用户手册 视频介绍 共享牌组和基础复习技巧 调换卡片正反面 卡片样式设计 亲 ...

  4. 平滑升级nginx到新版本

    这里测试一下nginx的平滑升级,以备不时之需 查看nginx版本号: [root@zklf-server01 ~]# /application/nginx/sbin/nginx -V nginx v ...

  5. 更新mysql驱动5.1-47 Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEY

    今天在更新mysql驱动后运行程序突然报如下错误: java.sql.SQLException: Generated keys not requested. You need to specify S ...

  6. C++ 使用 hiredis 封装redis 的数据获取接口

    整合自互联网 一.hiredis 类库的安装 tar -zxvf hiredis-v0.13.3.tar.gz make make install mkdir /usr/lib/hiredis cp ...

  7. 学习随笔:Vue.js与Django交互以及Ajax和axios

    1. Vue.js地址 Staticfile CDN(国内): https://cdn.staticfile.org/vue/2.2.2/vue.min.js unpkg:会保持和npm发布的最新的版 ...

  8. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

  9. HTTP协议头部与Keep-Alive模式详解(转)

    转自:http://a280606790.iteye.com/blog/1095085 http1.1 中怎么打开持久连接,怎么关闭,怎么传输数据(确定本次数据是否传输完毕) 1.什么是Keep-Al ...

  10. VS2017下使用Git遇到的问题

    我在使用最新版的VS2017时,想获取服务器上最新代码,Fetch到了最新修改,但是在拉取代码的时候出现了问题 user@user-PC MINGW64 /d/demo/myrepos (dev-cs ...