简介

在 Django 的学习过程中, 我们一直使用 Django 的 manage.py 的runserver 命令来运行 Django 应用, 这个命令启动的是 Django 自带的用于开发的简易服务器, 它是一个用纯 Python 写的轻量级的 Web 服务器. 这个服务器内置在 Django 中是为了方便开发, 并不适用于实际的生产环境. 当项目真正部署上线的时候我们就必须 Django 项目部署到特定的web服务器上了.

这里我们采用的是 Ubuntu + nginx + django 方式.

我的配置

安装Nginx

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器, 并在一个BSD-like协议下发行. 其特点是占用内存少, 并发能力强, 事实上nginx的并发能力确实在同类型的网页服务器中表现较好.

打开Ubuntu终端, 利用Ubuntu的仓库安装, 运行命令sudo apt-get install nginx即可进行安装.

启动, 关闭, 重载nginx则可用以下命令

1
2
3
nginx
nginx -s stop
nginx -s reload

这里可以启动测试一下, 进入 http://127.0.0.1:80/ 页面应该会出现”Welcome to nginx!”界面, 这样就说明启动成功了.

这样安装的Nginx的配置文件放在/etc/nginx/nginx.conf位置, 后续我们要对配置进行修改.

安装uwsgi

是实现了uwsgi和WSGI两种协议的Web服务器, 但是并不全面, 所以我们后续还要配置nginx服务器

这里我们可以使用pip进行安装pip3 install uwsgi

配置Nginx和uwsgi

配置uwsgi需要我们在项目根目录创建一个ini或者xml文件, 项目目录如下

1
2
3
4
5
6
7
8
mysite/
├── manage.py
├── mysite/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── uwsgi.ini

在我们通过Django创建mysite项目时, 在子目录mysite下已经帮我们生成的 wsgi.py文件. 所以, 我们只需要再创建uwsgi的配置文件即可, uwsgi支持多种类型的配置文件, 如xml,ini等, 此处,使用ini类型的配置.

ini 文件内容如下:

1
2
3
4
5
6
7
8
[uwsgi]
# Django-related settings
socket = :8099
chdir = /home/mysite #这里写入你自己项目的地址
module = mysite.wsgi
master = true
processes = 4
vacuum = true

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
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
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name 127.0.0.1; #这里一般填写网址, 没有的话就填写127.0.0.1
charset UTF-8;
access_log /var/log/nginx/mysite_access.log;
error_log /var/log/nginx/mysite_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8099; # 该处端口要和uwsgi的ini文件中一样
uwsgi_read_timeout 2;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/mysite/static/; # 静态文件地址
}
}
}

关于nginx.conf文件的配置, 可以参考 NGINX Docs | Configuration Guide

现在重新启动nginx,翻看上面重启动nginx的命令. 然后, 访问: http://127.0.0.1:80/ 即可.

参考资料

  1. 通过Nginx部署Django(基于ubuntu) - 虫师 - 博客园
  2. Django快速部署简约版 v3.0 - 简书