您的位置:首页 > 运维架构 > Nginx

实现简单的"nginx+uwsgi+django"的服务器架构

2017-09-16 17:44 453 查看
1,安装uwsgi

pip install uwsgi

测试uwsgi
写一个uwsgi_test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World"

然后执行shell指令:
uwsgi --http :8000 --wsgi-file uwsgi_test.py

访问网页查看结果
(安装最好进入虚拟环境)


2,安装django

pip install django

测试django:
创建django项目
django-admin startproject projectname
创建app
python manage.py startapp appname
修改访问设置:settings.py 文件中
ALLOWED_HOSTS = ["*"]
python manage.py migrate 这一步有助于我们查看后台界面
运行
python manage.py runserver 0.0.0.0:8000
访问网页查看结果


3,uwsgi+django

关闭django的运行

编写django_wsgi.py,将其放在manage.py的同级目录

# coding: utf-8

import os

import sys

reload(sys)

sys.setdefaultencoding(‘utf8’)

os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “projectname.settings”)

from django.core.wsgi import get_wsgi_application 这一句来自于wsgi.py中的设置

application = get_wsgi_application()

启动uwsgi

uwsgi –http 0.0.0.0:8000 –chdir /项目文件的路径 –module django_wsgi (我们创建的py文件不加扩展名)

访问网页查看结果,如果能正常访问django网页说明成功,因为我们是没有运行django的


4,nginx+django+uwsgi

配置uwsgi,在项目目录下创建一个uwsgi_server.ini文件

[uwsgi]

socket = :8000

chdir = /projectpath

module = django_wsgi

processes = 4

daemonize = uwsgi.log

启动uwsgi服务器

uwsgi -i uwsgi_server.ini

关闭:直接kill

配置nginx
添加一个server
server{
listen 80;
server_name localhost;
#配置路由
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; 转发到本地8000端口
}
}

启动nginx服务
启动uwsgi服务
访问网页80端口,查看结果


5,以上操作如果成功,我们访问的界面是乱的,这是没有加载js css 的原因,静态文件是由

nginx来处理的,uwsgi是不能直接处理的。

修改django的配置 settings:

STATICFILES_DIRS = (

os.path.join(BASE_DIR_,”static”),

)

STATIC_ROOT = os.path.join(BASE_DIR,”collectstatic”) 设置静态文件的存放位置,然后才可以执行收集操作,注意如果项目没有static文件夹,我们需要自己建一个,因为后台admin是有静态文件的。

python manage.py collectstatic

收集完静态文件以后进入naginx的配置文件,在server中添加静态文件的路径。
localtion /static/ {
alias collectstaic的路径:例如
alias  /home/work/src/sites/testdjango1/testdjango/collectedstatic/;
}
重启nginx
然后访问后台查看结果


6,如果我们想使用nginx+tornado+diango部署

首先,安装torando,实现tornado+django

在django项目中创建一个torando_server.py文件

from tornado.options import options, define, parse_command_line

from django.core.wsgi import get_wsgi_application

import tornado.httpserver

import tornado.ioloop

import tornado.web

import tornado.wsgi

import os, sys

SITE_ROOT = os.path.dirname(os.getcwd())

PROJECT_NAME = os.path.basename(os.getcwd()) #获取项目名称,也就上级目录名称

sys.path.append( SITE_ROOT )

os.environ[‘DJANGO_SETTINGS_MODULE’] = PROJECT_NAME + ‘.settings’

define(‘port’, type=int, default=8080)

class HelloHandler(tornado.web.RequestHandler):

def get(self):

self.write(‘Hello from tornado’)

def main():

parse_command_line()

wsgi_app = tornado.wsgi.WSGIContainer(get_wsgi_application())

tornado_app = tornado.web.Application(
[
('/hello-tornado', HelloHandler),  # 把所有路由转交给django app
('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
])

server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()


if name == ‘main‘:

main()

完成上面的代码后运行:
python tornado_server.py runserver --port=8000
访问网页查看结果

实现nginx+tornado+django
配置nginx
vim /usr/local/nginx1.10/conf/nginx.conf

upstream djangopro{
server 127.0.0.1:8000;
#server 127.0.0.1:8001;
}
server {
listen 8888;
server_name = localhost;

location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://djangopro; #转发 8000,80001轮着来
#proxy_pass http://localhost:8000;表示直接转到8000 }

location /static/ {
alias /project/djangopro/collectstatic/;
}
}
重启nginx ,启动torando_server.py
访问网页查看结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx