文章都可以转载、引用,标明转载出处即可。

nginx+uwsgi+Django 环境搭建

nginx 服务 Mr.c 3301℃ 0评论

  最近朋友在做Python 项目开发,给了源码帮忙测试,之前都没有实际部署过Python的项目,第一次拿到项目还挺懵逼的,怎么让它运行起来,然后查到了python manage.py runserver 可以将项目运行起来,但是说实话,直接这样的方式适合调试,如果是上线使用,肯定不适合的(因为没有转后台执行,而且在当前终端呈现大量的日志信息),项目是用Django 框架,总结了下Django 项目的上线运行。
原理:
  uwsgi 作为载体运行django 程序(类似于php-fpm)
  nginx 反向代理uwsgi 监控端口,配置类似动静分离,对静态文件进行支持
  这里为什么需要nginx对静态文件进行支持,是由于uwsgi 直接运行django 程序并不会加载静态文件,比如css 、js 文件,所以如果直接用uwsgi 会发现样式丢失的情况
环境:

系统平台:CentOS 7.2_64位
运行环境:
nginx  1.10.1
Python 2.7.5
Django 1.8.5
uWSGI 2.0.13.1 (64bit)

搭建流程:

1.安装所需运行环境:
  这里采用pip安装方式,关于程序安装方式,个人认为怎么方便、怎么适合就采用对应的方式来安装,并不是说一定要源码编译才显得高大上,有些软件我只需要默认功能和基本功能,需要更快速的使用那么自然没必要在源码编译安装了,yum 安装以及Python pip 安装或者rpm包 都可以。

yum -y install python-pip  nginx  #安装pip ,由于nginx只需要反向代理和静态文件支持,为了方便,直接yum安装
pip install Django==1.8
pip install uwsgi
pip install MySQL-python    #这里是项目需要安装

2.使用python manage.py runserver 执行确认你的项目能够正常的访问,如果不能访问或者访问报错,请先处理好这个问题。

3.uwsgi 设置:
先创建一个文件测试uwsgi 能否正常工作:
vim /home/cnyunwei/test.py

#!/usr/bin/env python
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"
然后执行:uwsgi --http :8001 --wsgi-file /home/cnyunwei/test.py 
  这里会出现很多的提示信息,按crtl+c 就会结束进程,可以重新打开一个终端通过netstat -tunlp  查看一下是否监听了8001端口,如果正常监听,使用浏览器访问http://youripadd:8001 即可看到Hello World 提示。

  使用测试页面可以正常启动,那么再把项目启动测试一下,由于在Django 1.5 以上版本开发的项目就已经生成了wsgi.py 文件,所以不需要再创建。

cd   /home/cnyunwei/autoOPS/autoOPS
uwsgi --http :8001 --module autoOPS.wsgi

4.接下来就是nginx 的反向代理配置,没什么多说的,刚才启动uwsgi 的进程可以保留着,重新开一个终端 创建虚拟主机配置文件
vim etc/nginx/vhosts/cnyunwei.conf

upstream django_ops {
    server 127.0.0.1:8001;
}
server {
    listen      8088;
    server_name localhost;
    charset     utf-8;
    access_log  /var/log/cnyunwei.log;
    error_log   /var/log/cnyunwei.log;
    # 设置nginx加载静态文件路径,这里根据自己项目情况来定,我这里只需要加载static 目录中的静态文件
    location /static {
        alias /home/cnyunwei/autoOPS/static;
    }
   #其他文件传递给uwsgi 交由django 进行处理
    location / {
        uwsgi_pass  django_ops;
        include     /etc/nginx/uwsgi_params;
    }
}

使用nginx -t 查看一下配置文件是否正确,没有报错就可以启动nginx 然后访问测试下是否正常访问项目。

5.上面的配置任然没有将uwsgi 转后台运行,要后台运行需要再进行一些调整。
  进入项目根目录下(cd /home/cnyunwei/autoOPS/autoOPS)创建uwsgi.ini 文件
vim uwsgi.ini

[uwsgi]
chdir           = /home/cnyunwei/autoOPS  #项目web文件目录
wsgi-file       = /home/cnyunwei/autoOPS/autoOPS/wsgi.py    #指定wsgi.py 文件路径
daemonize   = /home/cnyunwei/autoOPS/autoops.log     #定义log文件
master          = true
pidfile     = /tmp/autoops.pid
processes       = 3
socket          = 127.0.0.1:8001
chmod-socket    = 664
vacuum          = true

  弄好后就可以方便控制django 项目的运行了,下面是启动重启命令:

uwsgi --ini  /home/cnyunwei/autoOPS/autoOPS/uwsgi.ini    # 启动  
uwsgi --reload /tmp/autoops.pid    # 重启
uwsgi --stop /tmp/autoops.pid    # 停止

  现在就可以启动项目测试一下了,记得先把之前启动起来测试的uwsgi 进程给关闭,并使用命令启动,有兴趣也可以把该命令写成服务加入到/etc/init.d/下面使用。

转载请注明:菜鸟运维网 » nginx+uwsgi+Django 环境搭建

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址