nginx+uwsgi+django部署流程

 

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

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

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

  1.安装virtualenv和virtualenvwrapper

    pip install virtualenv

    pip install virtualenvwrapper

  2.创建虚拟环境

    命令: mkvirtualenv [env_name]

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

    $: mkvirtualenv -p python2 django_env_py2 (可指定用python2)

    虚拟环境相关命令: workon 进入虚拟环境  deactivate 退出虚拟环境  rmvirtualenv  删除虚拟环境

  3. 安装项目所需python包:

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

     批量安装: 

          $: pip freeze > env_requirement.txt

          $: pip install -r renv_requirement.txt

    豆瓣源安装:

          $:pip install -i https://pypi.douban.com/simple/ (包名)【豆瓣源安装相比较来说速度快】

二、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

Ubantu-Nginx部署的更多相关文章

  1. Ubuntu上通过nginx部署Django笔记

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式.今天在Ubuntu上使用Nginx部署Django服务,虽然不是第一次搞这个了,但是发现还是跳进了好多坑,g ...

  2. CentOS Mono Nginx 部署 MVC4+WebApi

    CentOS Mono Nginx 部署 MVC4+WebApi 经过几天的折磨,终于在CentOS上成功部署了MVC4+WebApi.Mono上的服务器推荐两种:Jexus(国产高人写的一款很牛的服 ...

  3. Ubuntu 14.04 上使用 Nginx 部署 Laravel

    本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ...

  4. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  5. FastDFS+Nginx部署详细教程

    本例使用到的所有tar和zip包地址:http://download.csdn.net/detail/corey_jk/9758664 本例中使用CentOS1.CentOS2两台机器实现. 1 GC ...

  6. Centos6.5中Nginx部署基于IP的虚拟…

    Centos6.5 中Nginx 部署基于IP 的虚拟主机 王尚2014.11.18 一.介绍虚拟主机 虚拟主机是使用特殊的软硬件技术,把一台真实的物理电脑主机 分割成多个逻辑存储单元,每个单元都没有 ...

  7. Ubuntu 下使用 Nginx 部署 .NET Core 2.0 网站

    前言 本文介绍如何在 Ubuntu 16.04 服务器上安装 .NET Core 2.0 SDK.创建项目与发布,并使用 Nginx 部署 .NET Core 2.0 Web 项目. 安装 .NET ...

  8. CentOS7上Docker简单安装及nginx部署

    安装 如果原来安装过docker,先把原来的删掉,再安装(如果是首次安装docker忽略第一步,直接在第二步看起) 1.1先查看下已经安装了那些docker yum list installed | ...

  9. Nginx部署静态页

    简答说一下如何用Nginx部署静态网页,并绑定域名访问 1.通过FTP上传静态页到服务器指定目录 2.编写nginx的.conf文件 3.重启nginx 如图,这是centos上传文件路径 nginx ...

  10. Python项目部署-使用Nginx部署Django项目

    一.nginx介绍及部署 二.nginx部署路飞学城代码 nginx配置安装 同样,nginx也有很多的安装方式: 1)源码安装(运维偏向:规范,便于配置管理) 2)yum,rpm安装(为了效率可以选 ...

随机推荐

  1. LitePal 数据库使用方法(最新2.0LitePal数据库适用)

    转发郭神的blog,讲的非常详细,是基于1.6版本,但现在使用的是2.0,有点差别https://blog.csdn.net/guolin_blog/article/details/384612391 ...

  2. 『计算机视觉』Mask-RCNN_锚框生成

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  3. AWR报告学习示例

    1.  参数1  AAS AAS讲解 elapsed 为 该AWR性能报告的时间跨度 DB_TIME =所有前台session花费在database调用上的总和时间. 注意:前台进程 foregrou ...

  4. PostgreSQL导出一张表到MySQL

    1. 查看PostgreSQL表结构,数据量,是否有特殊字段值 region_il=# select count(*) from result_basic; count --------- ( row ...

  5. Android 之常用布局

    LinearLayout 线性布局. android:orientation="horizontal" 制定线性布局的排列方式 水平 horizontal 垂直 vertical ...

  6. php 异常捕获的坑

    thinkphp 框架需要注意 书写为(Exception $e)将无效   需要写成 (\Exception $e) try { throw new \Exception("Error P ...

  7. linux nat style

      1● nat style 2● link style    

  8. EXCEL词典(xllex.dll)文件丢失或损坏解决方法

    EXCEL词典(xllex.dll)文件丢失或损坏解决方法     1● 问题   2● 解决 fail 3● 方法2   regsvr32 xllex.dll     4● 方法3 启动server ...

  9. JS--script标签注意细节

    1)在使用<script>标签嵌入js代码时,记住不要在代码中的任何地方出现</script>字符串.例如: <script type="text/javasc ...

  10. linux系统用户和组管理

    用户和组管理 Linux是多用户多任务的网络操作系统,作为网络管理员,掌握用户的组的创建与管理至关重要. 学习要点: 了解用户和组的群的配置文件. 熟悉掌握Linux下用户的创建和维护管理. 熟悉掌握 ...