首先了解下基本概念:

  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. AES CBC PKCS7 C# C++

    c++算法见:https://blog.csdn.net/csdn49532/article/details/50686222 c#:https://gitee.com/koastal/codes/6 ...

  2. [Linux][转载]Curl命令详解

    命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款很强大的http命令行工具,当处在无界面的服务器上的时候,利用curl下载上传文件是较为方便的事情. 语法 ...

  3. java精确计算、精确计算工具类

    java精确计算 package org.aisino.erp.webservice.dzfp.util; import java.math.BigDecimal; public class Math ...

  4. 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

    浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...

  5. HDU 2243考研路茫茫——单词情结 (AC自动机+矩阵快速幂)

    背单词,始终是复习英语的重要环节.在荒废了3年大学生涯后,Lele也终于要开始背单词了. 一天,Lele在某本单词书上看到了一个根据词根来背单词的方法.比如"ab",放在单词前一般 ...

  6. JavaWeb从开发环境搭建,到第一个servlet程序(图文)

    ##  开学到今天,已经是第三周了~  然而这门课的教材还没发~   滋滋滋   表示很“蓝瘦”~~~ Java Web开发环境搭建 1. 下载安装Tomcat 官网地址:http://tomcat. ...

  7. 【C语言编程练习】5.11 猴子吃桃子问题

    1. 问题描述 有一只猴子,第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个,第二天又将剩下的桃子吃掉了一半,又多吃了一个,按照这样的吃法,每天都吃前一天吃下的桃子的一半又一个.到第十天,就剩下了一 ...

  8. Exp2 后门原理与实践 20164302 王一帆

    1 实验内容 1.1实验主要内容 (1)使用netcat获取主机操作Shell,cron启动 (0.5分) (2)使用socat获取主机操作Shell, 任务计划启动 (0.5分) (3)使用MSF ...

  9. javascript 数据类型 -- 检测

    一.前言 在上一篇博文中 Javascript 数据类型 -- 分类 中,我们梳理了 javascript 的基本类型和引用类型,并提到了一些冷知识.大概的知识框架如下: 这篇博文就讲一下在写代码的过 ...

  10. NOIP-珠心算

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠心算加 ...