Django 笔记7 – 服务器部署(Nginx + uWSGI + supervisor)

Django 笔记7 – 服务器部署(Nginx + uWSGI + supervisor)


Django 系列笔记是笔者学习、实践使用 Django 的相关笔记,大量参考了知了课堂的《Django零基础到项目实战》教程。

参考文档:
Django官方文档(英文)
Django 中文文档


1、概述

使用 Nginx + uWSGI + supervisor 模式来部署 Django 项目到服务器。

Nginx:

  • Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器。
  • 静态资源服务:直接响应静态资源文件(css、js、图片),不需经过web应用服务器。
  • 反向代理服务:缓存加速、负载均衡。接收所有的 http 请求,分配到web应用服务器集群。
  • API服务:利用 nginx 强大的并发性能去访问数据库服务器等的 API 服务

uwsgi:

  • uWSGI是实现了 WSGI 、uwsgi、http 等协议的 Web 服务器。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种。
  • uwsgi 是一种线路协议而不是通信协议,用于其他网络服务器(Ngnix)与 uWSGI 服务器的数据通信。
  • WSGI(Web服务器网关接口:Web Server Gateway Interface)是一种通信协议。Web服务器(nginx,uWSGI)与 web 应用(Flask、Django)通信的一种规范。

supervisor:

  • supervisor是 Linux/Unix 系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。
  • 用 supervisor 管理的进程,当进程意外被杀死,supervisor监听到进程死后,会自动将它重启。在 uwsgi 异常退出时,supervisor 可以马上重启它,即作为守护进程使用。让网站运行更加稳定。

Web服务器、应用服务器和Web应用框架:

  • Web 服务器:处理浏览器发来的 HTTP 请求(request),返回一个 HTTP 响应(response)。Web 服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的传递给相应的应用程序服务器。常见的有Apache,Nginx以及微软的IIS.
  • 应用服务器:处理具体的业务逻辑。比如php、python的代码,是不能直接通过nginx这种web服务器来处理的,只能通过应用服务器来处理,常见的应用服务器有uwsgi、tomcat等。
  • web应用框架:一般使用某种语言,封装了常用的web功能(eg. 查询数据库然后返回查询结果给 Web 服务器)的框架,常用的 python 应用框架有Django、flask。

2、Nginx 使用

ubuntu下的安装 nginx:

# 安装
sudo apt-get install nginx

常用命令:

# 启动
sudo service nginx start

# 重启
sudo service nginx restart

# 停止
sudo service nginx stop

测试 Nginx 是否可用:

  • 启动 Nginx
  • 在浏览器中输入ip地址。如果出现欢迎界面,说明成功,否则失败。

编写和添加配置文件:
配置文件默认放在/etc/nginx/conf.d文件夹下。


3、uWSGI 使用

ubuntu下的安装 uwsgi:

# 安装
sudo pip install uwsgi

常用命令:

# 运行 Django 项目,项目名称 mysite。
uwsgi --http :8000 --wsgi-file /opt/mysite/mysite.py -callable app -H /home/xiaotuo/py2-env

编写和添加配置文件:
nginx 接收用户的请求,然后 nginx 通过 http 或者 socket 的方式与 uWSGI 进程间通信,把请求转发给 uWSGI 进行处理,需要进行以下配置。

  • 来到/etc/nginx/conf.d目录下,在这个目录下创建一个配置文件,名字随便取,跟你项目名保持一致即可。比如 mysite.conf,然后在里面添加如下配置信息:
# 配置nginx与uwsgi的通信方式和名称,mysite就是名称
upstream mysite {    
    # nginx使用socket的方式与uwsgi进行通信
    # 这里指向你项目的目录下的socket文件,
    # 这个socket文件不需要单独创建,在运行的时候会自动创建。
    server unix:///opt/mysite/mysite.sock; 
}
# 配置服务器
server {    
    # 监听的端口号
    listen      80;    
    # 域名或者本机的ip地址
    server_name .example.com; 
    charset     utf-8;    
    # 最大的上传大小
    client_max_body_size 75M;   # adjust to taste

    # 访问根目录下的任何url的配置
    location / {        
        # 指定访问哪个upstream
        uwsgi_pass  mysite;        
        # 包括uwsgi参数的文件
        include     /path/to/your/mysite/uwsgi_params;
    }
}
  • 写完配置文件后,使用以下命令测试配置文件语法是否正确:
sudo service nginx configtest
  • 然后cd到项目目录中,使用以下命令运行uWSGI,uWSGI将会把该项目运行起来:
uwsgi --socket mysite.sock --wsgi-file /opt/mysite/mysite.py --callable app -H /home/xiaotuo/py2-env --chmod-socket=666

uWSGI 提供了一种使用配置文件的方式运行 uWSGI,配置文件(假如名字是:mysite_uwsgi.ini)如下:

[uwsgi]
# 当前这个项目的路径
chdir           = /opt/mysite
# 模块
module          = mysite
# python的虚拟环境
home            = /home/xiaotuo/py2-env
# 是否启用mater模式
master          = true
# 进程数
processes       = 10
# socket文件地址
socket          = /opt/mysite/xt_site.sock
# wsgi文件
wsgi-file       = /opt/mysite/wsgi.py
# wsgi文件中的app变量
callable        = app
# socket文件的权限
chmod-socket    = 666

# 示例:
[uwsgi]
chdir           = /opt/mysite
home            = /home/xiaotuo/py2-env
module          = mysite
master          = true
processes       = 10
socket          = /opt/mysite/mysite.sock
wsgi-file       = /opt/mysite/mysite.py
callable        = app
chmod-socket    = 666

# 以后运行uwsgi项目,就只需要运行以下命令即可:
uwsgi --ini mysite_uwsgi.ini

4、supervisor 使用

ubuntu下的安装 uwsgi:

# 安装
sudo pip install supervisor

编写和添加配置文件:

在当前目录下,创建一个 supervisor 的配置文件,比如取名 supervisor.conf,配置信息如下:

# supervisor的程序名字
[program:mysite]
# supervisor执行的命令
command=uwsgi --ini mysite_uwsgi.ini
# 项目的目录
directory = /opt/mysite 
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/opt/mysite/log/supervisord.log
# 输出的错误文件
stderr_logfile=/opt/mysite/log/supervisord.err

[supervisord]
# log的级别
loglevel=info

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001

# 登录supervisorctl的用户名和密码
username = admin
password = 123

[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = admin
password = 123

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

使用 supervisor 运行 uwsgi:

supervisord -c supervisor.conf

使用 supervisorctl 管理 supervisor:
supervisor是一个C/S模型,有一个服务器,也有一个客户端命令用来管理服务

# 进入到命令界面:
supervisorctl -c supervisor.conf

# 常用的命令。指定的文件必须和 supervisor 服务端保持一致
supervisorctl -c supervisor.conf
> status    # 查看状态
> start program_name     # 启动程序
> restart program_name     # 重新启动程序
> stop program_name     # 停止程序
> reload     # 重新加载配置文件
> quit     # 退出当前的客户端

GOOD LUCK!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值