nginx+uwsgi+django部署流程

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

  nginx+uwsgi+django是我们常用的django部署方式。nginx作为最前端的服务器,他负责接收所有的客户端请求,对于请求的静态文件,由nginx服务器自己完成,因为它具有很好处理静态文件的能力,性能进行过优化,支持高并发量;uWSGI服务器作为支持服务器,是用来服务nginx的,nginx将请求的动态文件交给uWSGI进行处理。uWSGI实现了uwsgi、wsgi和http协议,uwsgi协议是uWSGI自定义的协议,定义的是框架(django)和服务器对接的接口。

  下面以阿里云ubuntu部署为例:

一、 安装python虚拟环境及项目所需python包:

  1.安装virtualenv和virtualenvwrapper

    pip install virtualenv

    pip install virtualenvwrapper

  2.创建虚拟环境

    命令: mkvirtualenv [env_name]

    $: mkvirtualenv --python==python3 django_env_py3  (可指定用python3)

    虚拟环境相关命令: workon 进入虚拟环境  deactive 退出虚拟环境

  3. 安装项目所需python包:

     按包名单个安装:  $: pip install 包名

     批量安装: 

          $: pip freeze > env_requirement.txt

          $: pip install -r renv_requirement.txt

二、uWSGI服务器部署:

     已经安装好uwsgi后(pip install uwsgi),只需要增加配置, 告诉uWSGI-server的框架入口函数在哪,就能让django和uWSGI服务器对接上。

     1. 在django项目的setting.py文件的同级目录下,增加一个配置文件  uwsgi.ini

     2. 对配置文件进行配置       

[uwsgi]

# 配置服务器的监听ip和端口,让uWSGI作为nginx的支持服务器的话,设置socke就行;如果要让uWSGI作为单独的web-server,用http

# http = 127.0.0.1:3309

socket = 127.0.0.1:3309

# 配置项目目录(此处设置为项目的根目录)

chdir = /home/python/Desktop/my_pro

# 配置入口模块 (django的入口函数的模块,即setting同级目录下的wsgi.py)

wsgi-file = my_pro/wsgi.py

# 开启master, 将会多开一个管理进程, 管理其他服务进程

master = True

# 服务器开启的进程数量

processes = 2

# 以守护进程方式提供服, 输出信息将会打印到log中

daemonize = wsgi.log

# 服务器进程开启的线程数量

threads = 4

# 退出的时候清空环境变量

vacuum = true

# 进程pid

pidfile = uwsgi.pid

# 配uWSGI搜索静态文件目录(及django项目下我们存放static文件的目录,用uWSGI作为单独服务器时才需要设置,此时我们是用nginx处理静态文件)

# check-static = /home/python/Desktop/ttsx

    3. 启动uWSGI服务器

      在配置文件uwsgi.ini所在目录下,用我们刚才配置好的配置文件启动uWSGI:

         $: uwsgi --ini uwsgi.ini

三、nginx服务器部署:

    uWSGI服务器已经部署好了,我们只需要安装并启动nginx,然后将nginx服务器的动态文件请求转发给uWSGI服务器,将静态文件请求交给自己来处理。

    1. 安装nginx:

      需下载准备好nginx的包文件, 以及nginx安装依赖库的包文件OPENSSL:

       a. 首先安装nginx所依赖的库: PCRE

        $: sudo apt-get install libpcre3 libpcre3-dev

       b. 安装OPENSSL库,下载地址https://www.openssl.org/source/

        下载将其解压文件放到/usr/local/lib/openssl-1.0.2l目录下

            $: /usr/local/lib/openssl-1.0.2l

       c. 在这里我们使用编译的安装nginx,指定将nginx的安装到/ust/opt/目录下。

        解压包文件,进入nginx包文件目录:

        配置:

            $: ./configure --prefix=/opt/nginx --with-openssl=/usr/local/lib/openssl-1.0.21

         (--prefix指定nginx的安装目录, --with-openssl指定我们要使用的openssl版本,也就是我们刚才安装的路径)

         编译:  $: make

        安装:   $: make install

       d. 启动nginx:

         $: cd /opt/nginx/sbin/

         $: ./nginx

        相关命令:./nginx -s stop 强制停止   ./nginx -s quit  处理完当前所有连接后停止

             ./nginx -s reload  重新加载配置文件进行重启  查看进程: ps -ajx | grep nginx

    2. 配置nginx:

        1. 修改nginx的配置文件  $: vim /opt/nginx/conf/nginx.conf

         修改其收到请求处理的两条配置:

            location / {

              include uwsgi_params;  # 设置将所有请求转发给uwsgi服务器处理

              uwsgi_pass: 127.0.0.1:3309;  # 指定uwsgi服务器url

            }

            location /static {

              alias /hom/xxx/xxx/pro_name/static/;  # 设置将/static的静态请求交给nginx,并指定静态文件的目录

            }

 

四、admin后台管理界面静态文件配置:

    以上,nginx+uWSGI+django已经可以正常运行了,但是登陆django的admin后台管理界面,网页的静态文件无法找到。

    那是因为我们在前面设置nginx的静态文件目录时,static目录下一般只是我们项目应用开发中自己的静态文件,

    但是django后台admin用到的静态文件并不在这,所以找不到。所以我们需要把所有的静态文件打包放在一个目录下。

   1. 在项目的根目录下新建一个目录,可以取名为all_static。

   2. 在setting.py文件下增加一行配置,指定所有静态文件的根目录:    

      STATIC_ROOT = os.path.join(BASE_DIR, ‘all_static‘)

   3.执行django管理器命令,会自动将我们项目所有的静态文件放到上面设置的静态文件根目录下:

      ./managy.pu collectstatic

      

           

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New" }
span.s1 { color: #011993 }
table.t1 { border-collapse: collapse }
td.td1 { border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #cbcbcb #cbcbcb #cbcbcb #cbcbcb; padding: 0.0px 5.0px 0.0px 5.0px }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New" }
span.s1 { color: #011993 }
span.s2 { color: #ff2600 }
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px "Courier New" }
span.s1 { color: #011993 }
span.s2 { color: #0433ff }
span.s3 { color: #ff2600 }
table.t1 { border-collapse: collapse }
td.td1 { border-style: solid; border-width: 1.0px 1.0px 1.0px 1.0px; border-color: #cbcbcb #cbcbcb #cbcbcb #cbcbcb; padding: 0.0px 5.0px 0.0px 5.0px }

时间: 2024-10-22 10:09:45

nginx+uwsgi+django部署流程的相关文章

Nginx+uWSGI+Django部署web服务器

目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py 编辑luffy/luffy/urls.py 运行并测试 uWSGI部署 测试运行uWSGI 使用uWSGI运行django项目 uWSGi热加载Djangoa项目 部署nginx nginx配置uwsgi和django django部署static文件 重新加载nginx进行测试 测试nginx

在ubuntu16上进行nginx+uwsgi+django部署的简要步骤

网上有很多部署教程,说了一大堆,遇到坑还是要自己一个个解决,这里有几个比较重要的坑大家一定要注意. 1.首先要安装python和python-dev环境,如果没有安装python-dev后面安装有些依赖要报错.这是第一个坑. apt-get install python python-dev pip 2.安装uwsgi要先安装gcc的编译环境.这是第二个坑.如果不安装gcc运行uwsgi也不会报错,后台进程就是不启动. 我被这个坑了很久. apt-get install gcc 3.找一个目录,

ubantu+nginx+uwsgi+django部署

1.更新ubantu的apt apt-get update 必要时候更新系统:      apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 :        scp 本地文件夹/文件   用户名@ip:远程存放位置 3.安装数据库 apt-get install mysql-server mysql-client libmysqlclient-dev (ps:如果不安装libmysqlclent-dev,接下来安装mysql-python可能会报错) 安装完成以

Centos7.6下Nginx+Uwsgi+Django部署

本人服务器是使用腾讯云Centos7.6.以下配置均在Root权限下操作. 1. python3 1.1 安装依赖包 sudo yum -y groupinstall "Development tools" sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve

debian完整部署 Nginx + uWSGI + Django

debian完整部署 Nginx + uWSGI + Django 手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供的服务器包用apt-get这种方式安装的.这种方式比较简单,但没有新版本. 另外就是使用源代码自己编译安装,这种比较繁琐,但能选择适合的版本安装. 这里介绍的是第二种,使用源代码编译的版本进行安装部署. 部署测试环境: - wind

使用Nginx+uWSGI+Django方法部署Django程序(下)

在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的,在实际的部署环境中,Nginx是必不可少的工具. 在本篇文章中,我将一直延用“N步法”的风格来阐述如何将uWSGI与Nginx做连接来部署Django程序.并在最后,会较为完整的阐述本社区的部署方法. 本文大纲: 环境介绍 配置uWSGI 配置Nginx Nginx+uWSGI+Django的实现方式 一些建

【转】五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(下)

五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(下) By Django中国社区 at 2013-05-18 04:38 在上一篇文章<五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)>中,阐述了如何只使用uWSGI来部署Django程序. 当然,单单只有uWSGI是不够的,在实际的部署环境中,Nginx是必不可少的工具. 在本篇文章中,我将一直延用“N步法”的风格来阐述如何将uWSGI与Nginx做连接来部署Django程序.并

【转】五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上)

五步教你实现使用Nginx+uWSGI+Django方法部署Django程序(上) By Django中国社区 at 2013-05-12 15:05 Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理(这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,

使用Nginx+uWSGI+Django方法部署Django程序(上)

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理 (这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求. 可见,uwsgi的作用就类似一个桥接器.起到桥梁的作用. NOTE:不使用nginx,只使用uwsgi+django也是可以