文档章节

Nginx uWsgi Django环境搭建

-启曙-
 -启曙-
发布于 2015/12/31 10:56
字数 897
阅读 366
收藏 8

精选30+云产品,助力企业轻松上云!>>>

由于一个监控项目(使用django开发)交接到所在项目组,需要了解python的web开发和环境搭建。

这里记录环境的搭建流程,以及遇到的问题和处理方案。

环境信息: CentOS 6.6 (内网IP:100.84.73.45) Nginx 1.2.8 Python 2.6.6 Django 1.6 uwsgi 2.0.11.2

注意:Django1.6匹配的python最高版本是2.6,如果安装太高版本的django,需要使用python2.6以上版本,否则安装过程会报错:invalid syntax

这里我的机器自带了python2.6.6,就不介绍python的安装了。

安装pip

pip是python的包管理工具,我们使用pip进行python的管理

# wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
# python get-pip.py

安装uWSGI

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

  • 使用pip安装 uwsgi
# export LDFLAGS="-Xlinker --no-as-needed"
# pip install uwsgi

  • 测试uwsgi

创建一个test.py的测试文件

# pwd
/home/test/django
# touch test.py
# vim test.py

test.py内容如下:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"
  • 启动uwsgi
# pwd
/home/test/django
# uwsgi --http :13010 --wsgi-file test.py

在浏览器中输入:http://100.84.73.45:13010

uwsgi http方式启动

uwsgi安装和启动正常。

安装django

  • 使用pip安装 django

由于使用的是python2.6.6,因此需要安装1.6版本的django。

安装指定版本的django的方式如下:

# pip install -v django==1.6
  • 新建Django工程
# pwd
/home/test/django
#  django-admin.py startproject MySite
# ls
MySite  test.py
  • 使用uwsgi启动django工程
# pwd
/home/test/django
# cd MySite 
# uwsgi --http :13010 --wsgi-file MySite/wsgi.py

在浏览器中输入:http://100.84.73.45:13010

uwsgi django结合

到此django安装成功,并且和uwsgi结合成功。

  • 补充信息

也可以使用如下命令启动django工程

# pwd
/home/test/django/MySite
# uwsgi --http :13010 --module MySite.wsgi

如果是单独调试django,可以使用django自带的简单服务器进行。

# pwd
/home/test/django/MySite
# python manage.py runserver 0.0.0.0:13010

安装nginx

  • 源码安装nginx

我们采用源码方式安装。 搜狐镜像下载地址:http://mirrors.sohu.com/nginx/ 我选择的是 1.2.8 版本

安装步骤,可以看这里:http://xyuex.blog.51cto.com/5131937/1013414

  • 配置nginx
# pwd
/home/test/local/nginx
# touch nginx_django_unix.conf

nginx_django_unix.conf内容如下:

worker_processes  2;
 
events {
    use epoll;
    worker_connections  1024;
}

http {
    include       conf/mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;

    upstream django {
        #server 127.0.0.1:13010; # nginx使用tcp方式与uwsgi交互
        server unix:///home/test/django/MySite/MySite.sock; # nginx使用unix本地socket方式与uwsgi交互
    }

    server {
        listen       13000;
        server_name  uwsgi_django;
        client_max_body_size 75M;
 
        location / {
            uwsgi_pass django;
            uwsgi_pass_header http;
            
            uwsgi_read_timeout 300;
            include conf/uwsgi_params;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 }
  • 启动uwsgi 和 nginx
# pwd
/home/test/django/MySite
# uwsgi --socket ./MySite.sock --module MySite.wsgi
# cd ~/local/nginx
# pwd
/home/test/local/nginx
# sbin/nginx -c nginx_uwsgi.conf

在浏览器中输入:http://100.84.73.45:13000

nginx uwsgi django打通

到此 nginx uwsgi django三个完成了结合。

过程中遇到的问题

uwsgi的交互方式

nginx与uwsgi有三种交互方式:http、tcp、unix本地sock http方式主要是利用nginx的反向代理功能。 TCP方式是ngix通过tcp方式和uwsgi交互。 unix本地sock是通过本地的sock文件进行交互。

  • 如果使用本地sokc方式,uwsgi的启动应该是
# uwsgi --socket ./MySite.sock --module MySite.wsgi

并且nginx的upsteam配置sock文件地址

  • 如果是TCP方式,uwsig的启动应该是
# uwsgi --socket :13010 --module MySite.wsgi

并且nginx的upsteam配置ip和端口

  • 采用反向代理方式,uwsgi的启动应该是
# uwsgi --http:13010 --module MySite.wsgi

nginx的完整配置如下:

worker_processes  2;
 
events {
    use epoll;
    worker_connections  1024;
}

http {
    include       conf/mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;

    upstream django {
        server 127.0.0.1:13010;
    }

    server {
        listen       13000;
        server_name  uwsgi_django;
        client_max_body_size 75M;
 
        location / {
            proxy_pass http://django; # 注意这里使用的是proxy_pass协议是http
            
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 }
-启曙-
粉丝 9
博文 20
码字总数 14950
作品 0
广州
程序员
私信 提问
加载中
此博客有 2 条评论,请先登录后再查看。
python+django+uwsgi 搭建环境

第一步: 搭建python环境 最好使用 pyenv可以很好的管理多版本下的python环境 第二步:搭建django环境 使用 pip install django==1.12.1 来安装 安装好以后可以使用创建一个实验项目来实现d...

osc_kt69pvbx
2018/04/20
8
0
centos 下 django + uwsgi + nginx 快速搭建

1.首先安装pip,pip安装其他的软件很方便, 已经有了pip就跳过这步。 wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificatetar zxvf pip-1.3.1.tar......

Si2
2014/09/17
145
1
Nginx+uwsgi+Django环境部署

1.nginx 是一个Http和反向代理服务器 2.uwsgi uWSGI、WSGI和uwsgi的区别 WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 We...

osc_cppluta2
2019/12/27
2
0
Nginx+uwsgi+Django环境部署

1.nginx 是一个Http和反向代理服务器 2.uwsgi uWSGI、WSGI和uwsgi的区别 WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 We...

osc_nj4g7wto
2019/12/27
2
0
Nginx+uWSGI+Django部署web服务器(转载)

原文地址:https://blog.csdn.net/u012145252/article/details/82147440 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01......

osc_0w39fdhx
2019/11/06
6
0

没有更多内容

加载失败,请刷新页面

加载更多

将字符串拆分为具有多个单词边界定界符的单词 - Split Strings into words with multiple word boundary delimiters

问题: I think what I want to do is a fairly common task but I've found no reference on the web. 我认为我想做的是一项相当普通的任务,但是我在网络上找不到任何参考。 I have text ...

fyin1314
42分钟前
9
0
jQuery选择器中的通配符 - Wildcards in jQuery selectors

问题: I'm trying to use a wildcard to get the id of all the elements whose id begin with "jander". 我正在尝试使用通配符来获取id以“jander”开头的所有元素的id。 I tried $('#jand......

法国红酒甜
今天
19
0
唐山5.1级地震 百度人工智能技术帮上忙:成都减灾所提前30秒让北京、天津市民收到预警

本文作者:y****n 7月12日6时38分在河北唐山市古冶区发生5.1级地震,成都高新减灾研究所与应急管理部门联合建成的大陆地震预警网成功预警该地震,给唐山市提前3秒预警,给天津市提前33秒预警...

百度开发者中心
昨天
30
0
如何使用PHP发送POST请求? - How do I send a POST request with PHP?

问题: Actually I want to read the contents that come after the search query, when it is done. 实际上,我想阅读搜索查询之后的内容,完成之后。 The problem is that the URL only a......

javail
今天
14
0
如何从Java读取文件夹中的所有文件? - How to read all files in a folder from Java?

问题: 如何通过Java读取文件夹中的所有文件? 解决方案: 参考一: https://stackoom.com/question/7jt2/如何从Java读取文件夹中的所有文件 参考二: https://oldbug.net/q/7jt2/How-to-rea...

富含淀粉
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部