Centos7 + uWSGI + Nginx 运行 Django 2

以 EOJ 为例,前期我已经部署在Centos 7 上好了 EOJ 运行环境,本文描述的是部署 Django 完成后用 Nginx 作为对外的服务框架。
uWSGI 和 Nginx 都是 C 语言编写的,并且都是异步的,对高并发性能友好。

uWSGI

WSGI是一种WEB服务器 网关接口 。 是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)。
uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定。

Nginx

Nginx(“engine x”) 是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

安装

pip3 install uwsgi
# 测试功能是否正常
uwsgi --http 0.0.0.0:80 --file eoj3/wsgi.py  --static-map /static=static

yum install nginx -y

配置

使用 Nginx 默认的配置文件

# cd you_app_location
ls -l /etc/nginx/uwsgi_params

uWSGI 配置

vim eoj.ini

写入一下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[uwsgi]
#uid = nginx
#gid = nginx
# 启动一个master进程来管理其他进程
master = true
# 工作的进程数
processes = 2
listen = 120
socket = 127.0.0.1:8001
module = eoj3.wsgi:application # 新版得这样写,网上很多应该是老版本的
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize = /root/eoj3/uwsgi.log
#buffer-size = 65536

运行:

uwsgi --ini eoj3.ini --static-map /media=./media --static-map /static=./static

注:EOJ有两个静态资源文件夹分别是 media 和 static

nginx.conf

修改 Nginx 配置文件

vim /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
server {
listen 443;
#listen [::]:80 default_server;
server_name hpuoj.com www.hpuoj.com 47.107.161.88;

#SSL
ssl on;
ssl_certificate /etc/letsencrypt/live/hpuoj.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hpuoj.com/privkey.pem;

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 刚才uwsgi设置的socket
uwsgi_read_timeout 2;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

总结

  • 网上很多质料都是 Django V1.x 的,但是和 V2.x 还是有些区别(坑啊)。
  • Nginx 运行后,访问 web 端可能会出现访问错误,一般是权限问题,centos7 yum 安装的 Nginx 启动默认用户和用户组都是nginx。

还没有解决的问题:

  • 以非 root 权限运行 uWSGI,有些资源无法访问(修改了用户和所属组也无用)。