LNuDP(Linux+Nginx+uWSGI+Django)架构

Nginx是一个非常好的反向代理和动静分离和web服务器。
uWSGI是一个针对python非常好的web服务器和中间件。
Django是一个非常好的Python web 框架。
Pytohn是一门非常好的编程语言。
四个非常好的软件组合,会碰撞出怎样的火花?敬请期待!

架构原理剖析:

LNuDP(Linux+Nginx+uWSGI+Django)架构_第1张图片

 

 

概念说明:

  • APP(应用程序):就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。
  • WSGI:是一个协议,Python用于Web开发的协议,Python专用的协议。
  • uWSGI:是一个程序,可充当Web服务器或中间件。
  • uwsgi:是uWSGI程序实现的一个自有的协议,处理python程序速度很快。

采用二进制来存储数据,在存储空间和解析速度上,都优于字符串型协议。

推荐一篇文章:

Nginx+uWSGI+Django原理

http://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html

 

 

本机系统:Ubuntu 17 64bit

 

 

环境安装:

 

安装MySQL:

sudo apt-get install mysql-server

sudo apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

 

 

安装Django:

sudo apt-get python-django

 

安装pip:

sudo apt-get python-pip

 

安装pymysql:

pip install pymysql

 

 

安装uWSGI:

sudo apt-get uwsgi uwsgi-plugin-python

 

 

 

环境配置:

 

准备Django项目,如果已经存在Django项目则跳过这步。

 

一、     Django配置

 

1、创建一个名字问mysite的项目:

django-admin startproject mysite

 

 

2、创建一个APP:

cd mysite

python manage.py startapp blog

 

 

3、生成可运行的的APP,或者自行编写一个简单的APP,需要Django基础,实在不会就百度,有很多例子。

 python manage.py migrate 

 

 

4、运行Django项目,默认为8000端口,访问127.0.0.1:8000请求成功就说明以上3步正常,失败则需自行解决。

 python manage.py runserver

 

 

二、uWSGI配置

 

1、创建测试脚本:

vi test.py

 

#!/usr/bin/env python

def application(env, start_response):

   start_response('200 OK', [('Content-Type','text/html')])

   return ["Hello World"]

 

 

2、测试uWSGI是否能正常工作:

uwsgi --plugin python --http-socket :8000--wsgi-file test.py

 

访问127.0.0.1:8000,有显示Hello World则uWSGI正常。

 

 

3、测试uWSGI和Django:

创建Django项目时,Django项目下会默认生成wsgi.py文件,如果没有则新建。

例如mysite项目:……./mysite/mysite/wsgi.py

文件内容:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE","mysite.settings")

 

from django.core.wsgi importget_wsgi_application

application = get_wsgi_application()

 

 

uwsgi --plugin python --http-socket :8000--wsgi-file mysite/wsgi.py

 

访问127.0.0.1:8000,有显示Django程序结果则uWSGI+Django正常合作。

 

 

4、配置uWSGI配置文件,方便启动。配置文件有三种 ini、XML、YMAL,这里使用ini

配置文件路径可自定义,我这里直接放在Django项目下。

vi …/mysite/uwsgi.ini

 

[uwsgi]

#socket端口号

socket = :8000

#python插件,不用则报选项不存在的错误

plugin   = python

#可选项

pythonpath = /www

#APP目录

chdir = /www/python/mysite

#wsgi.py文件位置,和配置文件存放在同级目录下,我这里使用相对路径。

module = mysite.wsgi

#指定Django的wsgi.py文件位置

wsgi-file =/www/python/mysite/mysite/wsgi.py

process  = 4

threads = 2

#日志路径

daemonize = /var/log/uwsgi/uwsgi.log

 

 

 

 

三、Nginx配置

 

一般加一个虚拟主机即可,全局配置文件使用默认即可。

1、 虚拟主机配置:

server {

    listen    8080;

   server_name   127.0.0.1;

   access_log  /var/log/nginx/access.log;

   error_log   /var/log/nginx/error.log;

   root      /www/python/myiste;

   

location / {

     uwsgi_pass   127.0.0.1:8000;

     include     /etc/nginx/uwsgi_params;

uwsgi_read_timeout 300;

         uwsgi_param Host $host;

uwsgi_param X-Real-IP $remote_addr;

uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;

uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;

                  }

}

 

2、 重启Nginx使其配置文件生效:

service nginx restart

 

3、 查看8080端口是否开启

netstat -tnlp

 

 

 

四、结果测试

 

1、运行uWSGI:

uwsgi --ini uwsgi.ini

 

2、查看8000和8080端口是否起来,起来则成功,继续测试。

netstat -tnlp

 

4、 访问127.0.0.1:8080

是否显示Django项目,显示该架构搭建成功。

 

 

 

 

 

 

 

你可能感兴趣的:(Python,Language,Framework,Ops,Python开发实战)