部署django

 

搭建uWSGI工作环境

在 WSGI 协议中定义了两个角色:一个是 Web 服务器即 server,另一个是应用程序即 application,server 需要接受来自客户端的请求,然后根据协议定义调用应用程序(application),应用程序处理请求并返回结果给 server,最终响应给客户端。

Django 框架同时实现了 WSGI 的 server 和 application。其中内置的 WSGI 服务器是基于 Python 的内置模块 wsgiref 实现的,主要是添加了一些异常处理和错误记录,但是没有考虑到运行效率,故不适合在生产环境中使用,它主要被使用在开发和测试过程中。在这里进行一下简单的讲解,不作为本节的重点,在和 manage.py 同级目录下新建一个 python_webtest.py 文件,编写如下代码:

from wsgiref.simple_server import make_server
#定义服务器调用对象application
def application(environ,start_response): 
    """
    :param environ:  #包含所有客户端的请求信息即上下文请求,application从这个参数中获取客户端请求意图
    :param start_response: 一个可调用对象,用于发送http请求状态
    :return: [b'Hello World!\n'] #返回可迭代对象 且必须是字节流,Http是面向字节流协议
     """
    status='200 OK'
    response_headers=[('Conteny-type','text/plain')] #响应头是一个列表
    start_response(status,response_headers) #返回给server之前调用 start_response
    return [b"Hello World!\n"]
#创建WSGI服务器,指定调用application,这里的调用对象也可以是一个类或者实例
httpeserver=make_server('127.0.0.1',8000,application)
#处理请求后退出
httpeserver.handle_request()

然后在 CMD命令行执行下面的  python python_webtest 命令,注意要在 python_webtest 对应的目录下,然后再使用 curl 命令发送请求进行测试,最终如下所示:

C:\Users\Administrator> curl -i 127.0.0.1:8000
HTTP/1.0 200 OK
Date: Thu, 30 Jul 2020 08:41:45 GMT
Server: WSGIServer/0.2 CPython/3.7.4
Conteny-type: text/plain
Content-Length: 13
Hello World!

安装uwsgi

sudo pip3 install uwsgi

使用上述命令安装 uWSGI,安装完成后在 BookStore 项目的根目录下,新建 uwsgi.ini 配置文件(和 manage.py 文件同级目录),并在该文件中进行如下配置:

[uwsgi]
# 套接字方式的 IP地址:端口号
# socket=127.0.0.1:8000
# Http通信方式的 IP地址:端口号
http=127.0.0.1:8000
#上述两种方式选择其一,在使用Nginx需要使用socket
# 项目当前工作目录自行配置
chdir=/home/.../.../my_projectname 这里需要换为项目文件夹的绝对路径
# 项目中wsgi.py文件的目录,相对于当前工作目录
wsgi-file=my_project/wsgi.py
#是否启动主进程来管理其他进程
master=true
# 进程个数,根据电脑配置设置
process=4
# 每个进程的线程个数
threads=2
# 服务的pid记录文件
pidfile=uwsgi.pid
# 服务的日志文件位置
daemonize=uwsgi.log

然后修改 settings.py 文件将其设置为适合线上生产环境使用,如下所示:

DEBUG=False                    #关闭调试模式
ALLOWED_HOSTS = ['*']   #任何ip都可以访问

启动uwsgi

uwsgi --http :9090 --wsgi-file python_webtest.py

说明:当 uWSGI 启动后,当前 Django 项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止。执行完我启动命令后,可以看到在项目的主目录下又生成了两个文件分别是 uwsgi.pid 与 uwsgi.log,它们分别用来记录,uWsgi 的进程号码 pid 与 uWSGI 的相关运行日志。启动成功的标志如下所示:

[uWSGI] getting INI configuration from uwsgi.ini

此时我们我们在没有使用 runserver 启动的情况下,可以访问 127.0.0.1:8000/admin 进行测试,你会看到,我们成功等了后台界面,如下所示:

posted @ 2021-09-26 20:57  def_Class  阅读(29)  评论(0编辑  收藏  举报