部署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 进行测试,你会看到,我们成功等了后台界面,如下所示:
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/WG11/p/13562098.html,作者:def_Class