首先了解下基本概念:

  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. windows安装node和yarn

    Ubuntu子系统安装和删除yarn 在 Debian 或 Ubuntu 上,需要用 Debian 包仓库来安装 Yarn. 首先需要配置仓库: curl -sS https://dl.yarnpkg ...

  2. python re库的正则表达式学习笔记

    1. 安装 默认已经安装好了python环境了 re库是python3的核心库,不需要pip install,直接import就行 2. 最简单的模式 字符本身就是最简单的模式 比如:'A', 'I ...

  3. Docker 学习9 Docker私有registry

    一.docker registry分类 二.安装docker-hub提供的registry 1.安装 [root@localhost yum.repos.d]# yum install -y dock ...

  4. 恢复数据库的redo日志文件(由于异常关机引起)

    需要事先进入sqlplus select * from v$log 打印相关文件信息 1.recover database until cancel(recover database using ba ...

  5. python基础day3

    一.文件管理 文件管理是很多应用程序的基本功能和重要组成部分.Python可以使文件管理极其简单,特别是和其它语言相对比. 1.    读操作 1.1r模式 1.1.1读取其他路径下文件 首先在D盘创 ...

  6. vue vue-resource的特点

    1.vue-resource 实现 get, post, jsonp请求. 2.JSONP的是实现原理: 由于浏览器的安全性限制,不允许AJAX访问 协议不同.域名不同.端口不同的数据接口,浏览器认为 ...

  7. 研究比对搞定博客 canvas-nest.js

    经过比对网站源码,发现大的差异,复制代码添加成功. 参考:https://www.cnblogs.com/kexing/p/7264767.html 申请js权限 编辑   具体编辑请自行实验, 附上 ...

  8. 使用CocoaPods时遇到 Permission denied 问题

    报错: Setting up CocoaPods master repo [!] /usr/bin/git clone fatal: could not create work tree dir 'm ...

  9. 可变参数函数(stdarg.h)的使用

    2013/5/3记录: stdarg.h是C语言中C标准函数库的头文件,stdarg是由standard(标准) arguments(参数)简化而来,主要目的为让函数能够接收可变参数.   stdar ...

  10. vs2015配置OpenCV遇到的问题

    OpenCV的配置过程可以参考博文:https://www.cnblogs.com/linshuhe/p/5764394.html 简要记载配置过程: 1.官网下载OpenCV安装包,并解压到目录,例 ...