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

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 
访问网页查看结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值