基本思路

1.方案:Nginx+uwsgi 
这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。
2,通信请求

the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

配置Nginx

安装Nginx

如果Nginx原先安装过,最好先彻底删除再重新安装!彻底删除的方法
http://blog.csdn.net/u010571844/article/details/50819704

apt-get update
apt-get install nginx

启动Nginx

/etc/init.d/nginx start  #启动
/etc/init.d/nginx stop  #关闭
/etc/init.d/nginx restart  #重启

Nginx默认监听80端口 
所以安装完毕,访问localhost或者服务器自己的ip地址就可以看到下面的画面。

配置uwsgi

安装uwsgi

pip install --upgrade pip #升级pip
pip install uwsgi`

编写测试

写一个test.py测试uwsgi

# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return "Hello World"

然后执行shell命令:

uwsgi --http :8001 --wsgi-file test.py

此时访问8001端口,就可以看到Hello World

连接uwsgi与Django

测试Django自身

确保Django自身可以启动运行,在Django应用的目录下:

python manage.py runserver 0.0.0.0:8002

访问8002端口,如果正常,说明Django启动成功!如下图!

编写wsgi.py文件

编写django_wsgi.py文件,将其放在与文件manage.py同一个目录下。

#!/usr/bin/env python
# coding: utf-8

import os
import sys

# 将系统的编码设置为UTF8
reload(sys)
sys.setdefaultencoding('utf8')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")#mysite替换为自己的项目名

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

连接Django和uwsgi

通过Django与uwsgi就已经可以形成一个简单的web服务器了 
编写完成django_wsgi.py文件后执行:

uwsgi --http :8000 --chdir path/to/yoursite --module django_wsgi

这样,就可以在浏览器中的8000端口访问Django程序了。 
所有的请求都是经过uwsgi传递给Django程序的。

注意到,此时是访问不了js/css静态文件的!这些静态文件将交给Nginx直接处理

编写配置文件

为了实现Nginx与uWSGI的连接,两者之间将采用soket来通讯方式

将使用uWSGI配置文件的方式来改进uWSGI的启动方式

将要让Nginx采用8077端口与uWSGI通讯,请确保此端口没有被其它程序采用。

下面编写uwsgi的配置文件 
新建一个XML文件:djangochina_socket.xml,与manage.py在同一级目录

<uwsgi>
    <socket>:8077</socket>
    <chdir>path/to/yoursite</chdir>
    <module>django_wsgi</module>
    <processes>4</processes> <!-- 进程数 --> 
    <daemonize>uwsgi.log</daemonize>
</uwsgi>

在上面的配置中,我们使用 uwsgi.log 来记录日志,开启4个进程来处理请求。 
这样,我们就配置好uWSGI了。

连接Nginx与uWSGI

上文已经连接了uWsgi与Django应用,下面连接Nginx与uwsgi 
修改/etc/nginx/sites-enabled/default

server {
        listen 80 default_server;

        root /usr/share/nginx/html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name www.nghuyong.top;

        location / {
                include        uwsgi_params;
                uwsgi_pass     127.0.0.1:8077;
        }

        location /static/ {
            alias  path/to/yoursite/static/;
            index  index.html index.htm;
        }
}

在上面的设置后,可以让Nginx来处理静态文件(/static)。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。

Nginx+uWSGI+Django的实现方式

1.重启Nginx服务器,以使Nginx的配置生效。

nginx -s  reload

2.启动uWSGI服务器

cd path/to/yoursite
uwsgi -x djangochina_socket.xml

检查日志 uwsgi.log 是否有异常发现。

  1. 访问服务 
    基于上面的假设你的域名是www.you.com

因此,我们访问 www.you.com,如果发现程序与 单独使用Django启动的程序一模一样时,就说明成功啦!

4.关闭服务的方法 
将uWSGi进程杀死即可。 
查询8077端口的进程

 lsof -i:8077

杀死进程

kill PID

也可以写一个脚本来控制uwsgi启动和停止:

#!/bin/bash
if [ ! -n "$1" ]
then
    echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
    exit 0
fi

if [ $1 = start ]
then
    psid=`ps aux | grep "uwsgi" | grep -v "grep" | wc -l`
    if [ $psid -gt 4 ]
    then
        echo "uwsgi is running!"
        exit 0
    else
        uwsgi /etc/uwsgi.ini
        echo "Start uwsgi service [OK]"
    fi

elif [ $1 = stop ];then
    killall -9 uwsgi
    echo "Stop uwsgi service [OK]"
elif [ $1 = restart ];then
    killall -9 uwsgi
    /usr/bin/uwsgi --ini /etc/uwsgi.ini
    echo "Restart uwsgi service [OK]"

else
    echo "Usages: sh uwsgiserver.sh [start|stop|restart]"
fi

作者:千叶正志 
来源:CSDN 
原文:
https://blog.csdn.net/nghuyong/article/details/54025761


识别图中二维码,领取python全套视频资料

Django在生产环境中的部署的更多相关文章

  1. 生产环境中CentOS7部署NET Core应用程序

    NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. ...

  2. redis的生产环境中的部署?

    使用的是redis cluster 10台机器,5台机器部署了redis主实例,另外5台机器部署了redis 的从实例,每个主实例挂了一个从实例,5个节点对外提供读写服务,每个节点的读写高峰qps可能 ...

  3. linux安装Django 以及 生产环境部署实现高并发

    1.首先安装python Python编译安装 主要介绍linux环境下安装 cd  /usr/local/src     //进入安装目录 wget  https://www.python.org/ ...

  4. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

  5. 13.生产环境中的 redis 是怎么部署的?

    作者:中华石杉 面试题 生产环境中的 redis 是怎么部署的? 面试官心理分析 看看你了解不了解你们公司的 redis 生产集群的部署架构,如果你不了解,那么确实你就很失职了,你的 redis 是主 ...

  6. 生产环境中使用Docker Swarm的一些建议

    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...

  7. [virtualenv]生产环境中使用virtualenv

    virtualenv 对于python开发和部署都是好工具,可以隔离多个python版本和第三方库的版本,这里作者总结了几个常用python服务怎么样结合virtual部署 原文链接 Python 中 ...

  8. .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点

    2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...

  9. 理解Docker(6):若干企业生产环境中的容器网络方案

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

随机推荐

  1. Android App性能測试

    一.内存 1.查看单个应用App最大内存限制 Command:adb shell "getprop|grep heapgrowthlimit" C:\Users\hujiachun ...

  2. hdu6125 Free from square 分组背包+状态压缩

    /** 题目:hdu6125 Free from square 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6125 题意: 从不大于n的所有正整数中选出 ...

  3. keepalive的作用

    keepalive的作用是实现高可用,通过VIP虚拟IP的漂移实现高可用.在相同集群内发送组播包,master主通过VRRP协议发送组播包,告诉从主的状态. 一旦主挂了从就选举新的主,实现高可用 LV ...

  4. dp + 状态压缩 - Codeforces 580D Kefa and Dishes

    Kefa and Dishes Problem's Link Mean: 菜单上有n道菜,需要点m道.每道菜的美味值为ai. 有k个规则,每个规则:在吃完第xi道菜后接着吃yi可以多获得vi的美味值. ...

  5. MyBatis 使用简单的 XML或注解用于配置和原始映射

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .My ...

  6. HttpModule的简单示例

    1.HttpModule可用在asp.net 管线事件触发的过程中.. 可处理一些通用的操作,如给特定请求加 gzip压缩. 2.示例代码: using System; using System.We ...

  7. ThinkPHP项目笔记之数据库配置篇

    对于配置文件,有几点说明 common:公共配置,也就是前台,后台,都可以调用的文件,具有普遍性 前台/后台:就是针对前后台的配置文件,具有针对性. 如:(公共文件基本配置) <?php ret ...

  8. Git------Commit和Push的区别

    转载:http://wenda.so.com/q/1435946424728324?src=140 git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库.远程库. git ...

  9. ios开发之 --调用系统的页面,显示中文

    在开发的过程中,我们会接入很多的sdk,比如相机,相册,是否允许获取位置等,大多数的情况下是默认显示英文, 在plist文件里面添加一个key就可以了,如下图: key:Localization na ...

  10. 开发环境eclipse for Mac 下的常用快捷键汇总(基本参照Win系,将Ctrl换为Command)

    最近迁移开发环境到Mac下,在豆瓣看到一个常用快捷键,去掉废话直接上干货 Command + O:显示大纲 Command + 1:快速修复 Command + D:删除当前行 Command + O ...