Ubuntu平台使用nginx部署Django项目
简介
在 Django 的学习过程中, 我们一直使用 Django 的 manage.py 的runserver 命令来运行 Django 应用, 这个命令启动的是 Django 自带的用于开发的简易服务器, 它是一个用纯 Python 写的轻量级的 Web 服务器. 这个服务器内置在 Django 中是为了方便开发, 并不适用于实际的生产环境. 当项目真正部署上线的时候我们就必须 Django 项目部署到特定的web服务器上了.
这里我们采用的是 Ubuntu + nginx + django 方式.
我的配置
- 系统: ubuntu-20.04.1-desktop-amd64
- Web服务器软件: nginx/1.18.0 (Ubuntu)
- uwsgi: uWSGI-2.0
- Django: Django-3.1.3
安装Nginx
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, 并在一个BSD-like协议下发行. 其特点是占用内存少, 并发能力强, 事实上nginx的并发能力确实在同类型的网页服务器中表现较好.
打开Ubuntu终端, 利用Ubuntu的仓库安装, 运行命令sudo apt-get install nginx
即可进行安装.
启动, 关闭, 重载nginx则可用以下命令
1 | nginx |
这里可以启动测试一下, 进入 http://127.0.0.1:80/ 页面应该会出现”Welcome to nginx!”界面, 这样就说明启动成功了.
这样安装的Nginx的配置文件放在/etc/nginx/nginx.conf
位置, 后续我们要对配置进行修改.
安装uwsgi
是实现了uwsgi和WSGI两种协议的Web服务器, 但是并不全面, 所以我们后续还要配置nginx服务器
- uwsgi:https://pypi.python.org/pypi/uWSGI
- uwsgi 参数详解:http://uwsgi-docs.readthedocs.org/en/latest/Options.html
这里我们可以使用pip进行安装pip3 install uwsgi
配置Nginx和uwsgi
配置uwsgi需要我们在项目根目录创建一个ini或者xml文件, 项目目录如下
1 | mysite/ |
在我们通过Django创建mysite项目时, 在子目录mysite下已经帮我们生成的 wsgi.py文件. 所以, 我们只需要再创建uwsgi的配置文件即可, uwsgi支持多种类型的配置文件, 如xml,ini等, 此处,使用ini类型的配置.
ini 文件内容如下:
1 | [uwsgi] |
uwsgi的配置常用ini文件, 这里先列出一些参数:
- http: 协议类型和端口号
- processes: 开启的进程数量
- workers: 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
- chdir: 指定运行目录(chdir to specified directory before apps loading)
- wsgi-file: 载入wsgi-file(load .wsgi file)
- stats: 在指定的地址上,开启状态服务(enable the stats server on the specified address)
- threads: 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
- master: 允许主进程存在(enable master process)
- daemonize: 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
- pidfile: 指定pid文件的位置,记录主进程的pid号。
- vacuum: 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)
接下来, 进入mysite项目目录下, 通过uwsgi命令读取uwsgi.ini文件启动项目.uwsgi --ini myweb_uwsgi.ini
注意查看uwsgi的启动信息, 如果有错, 就要检查配置文件的参数是否设置有误.
再接下来要做的就是修改nginx.conf配置文件. 打开/etc/nginx/nginx.conf文件, 编辑内容:
1 | events { |
关于nginx.conf文件的配置, 可以参考 NGINX Docs | Configuration Guide
现在重新启动nginx,翻看上面重启动nginx的命令. 然后, 访问: http://127.0.0.1:80/ 即可.