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

来源:互联网 发布:上位机编程用什么语言 编辑:程序博客网 时间:2024/06/07 20:02

1,安装uwsgi 
pip install uwsgi

测试uwsgi写一个uwsgi_test.pydef application(env, start_response):        start_response('200 OK', [('Content-Type','text/html')])    return "Hello World"然后执行shell指令:uwsgi --http :8000 --wsgi-file uwsgi_test.py访问网页查看结果(安装最好进入虚拟环境)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2,安装django 
pip install django

测试django:创建django项目django-admin startproject projectname创建apppython manage.py startapp appname修改访问设置:settings.py 文件中ALLOWED_HOSTS = ["*"]python manage.py migrate 这一步有助于我们查看后台界面运行python manage.py runserver 0.0.0.0:8000访问网页查看结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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的
  • 1
  • 2

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添加一个serverserver{    listen 80;    server_name localhost;    #配置路由    location / {        include uwsgi_params;        uwsgi_pass 127.0.0.1:8000; 转发到本地8000端口      }}启动nginx服务启动uwsgi服务访问网页80端口,查看结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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然后访问后台查看结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

if name == ‘main‘: 
main()

完成上面的代码后运行:python tornado_server.py runserver --port=8000访问网页查看结果实现nginx+tornado+django配置nginx vim /usr/local/nginx1.10/conf/nginx.confupstream 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 访问网页查看结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
阅读全文
0 0
原创粉丝点击