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. 20165309 Linux安装及学习

    Linux安装及学习 安装虚拟机 结合娄老师的博客<基于VirtualBox虚拟机安装Ubuntu图文教程>和对一些小问题的百度,我也算是很顺利地完成了安装. 然后,按照步骤安装了虚拟机增 ...

  2. 第一阶段——站立会议总结DAY02

    1.昨天做了什么:做出了一个大概的界面(APP的个人中心界面),有用户名信息和按钮. 2.今天准备做什么:因为仅是完成在页面上显示文字,而显示个人信息的化,想要做成微信的个人中心辣个样子. ①就是文字 ...

  3. nginx开启fileinfo扩展

    //实现网址 https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80838424 (1) (2).make && make ...

  4. Oracle 11.2.0.4.0 Dataguard部署和日常维护(6)-Active Dataguard篇

    1. 检查主备库的状态 on primary column DATABASE_ROLE format a20 column OPEN_MODE format a15 column PROTECTION ...

  5. application使用@符合问题:'@' that cannot start any token. (Do not use @ for indentation)

    在application配置文件中使用@出现异常: Exception in thread "main" while scanning for the next token fou ...

  6. 【LeetCode】数组移除元素

    链表等复杂数据结构用多了,简单的数组操作也不能遗忘! 1. 给定一个有序数组,移除所有重复元素并返回新的数组长度,不能分配额外数组的内存空间. e.g. 给定输入的数组 = [1,1,2],函数应当返 ...

  7. Pick-up sticks

    Pick-up sticks Stan has n sticks of various length. He throws them one at a time on the floor in a r ...

  8. zookeeper 的心跳

    假定:主机 A, B 通过 tcp 连接发送数据,如果拔掉 A 主机的网线,B 是无法感知到的.但是如果 A 定时给 B 发送心跳,则能根据心跳的回复来判断连接的状态. 以 zookeeper 为例: ...

  9. iptables报错:Couldn't load target `accept':/lib64/iptables/libipt_accept.so: cannot open shared object file: No such file or directory

    语句:iptables -A INPUT -s 134.192.204.235 -p TCP --dport 11211 -j accept 报错:Couldn't load target `acce ...

  10. 【Query】使用java对mysql数据库进行查询操作

    操作步骤: 1.加载数据库驱动(先在工程里加载数据库对应的驱动包) 2.获取连接 3.根据连接建立一个可执行sql的对象 4.执行sql语句 5.关闭连接 代码: package database; ...