系统 | Ubuntu16.04 64位 |
---|---|
环境 | Python |
Django | 2.2.16 |
Mysql | 5.7.16 |
Nginx | 1.14.0 |
uwsgi | 2.0.20 |
1.1 uWSGI
1.1.1 uWSGI介绍
什么是WSGI
WSGI 全称 Web Server Gateway Interface,是为python语言定义的web服务器和web应用程序和框架之间的一种简单而通用的接口。
什么是uWSGI
uWSGI 是一个Web服务器,它实现了WSGI、uwsgi、HTTP等协议。在nginx中ngx_http_uwsgi_module的作用是与uWSGI服务器进行交换。
关于WSGI、uwsgi、uWSGI三个概念区分:
- WSGI是Web服务器与Web应用程序或应用框架之间的接口,也可以看作是一个协议。
- uwsgi是一种传输协议。
- uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自带的协议,他用于传输信息的类型,每一个uwsgi packet的前4bytes都为传输信息类型的描述,他与WSGI相比是不同的两个协议。
1.1.2 安装uWSGI
pip install uWSGI
# https://pypi.python.org/pypi/uWSGI
测试uWSGI,创建test.py文件
test.py
def application(env,start_response):
start_response('200 ok',[('Content-Type','text/html')])
return [b"Hello World"]
通过uwsgi命令运行test.py文件
ubuntu终端
ian@ubuntu:/var/www/django_rest# uwsgi --http :8001 --wsgi-file test.py
浏览器访问:http://127.0.0.1:8001,返回Hello World
1.1.3 uWSGI运行Django
uwsgi命令常用参数如下:
--http 协议类型和端口号。
--processes:开启进程数量。
--wrokers:开启进程数量,等同于processes。
--chdir 指定运行目录。
--wsgi--file 载入wsgi-file(加载wsgi.py文件)。
--stats 在指定地址上开启状态服务。
--threads 开启的线程数量。
--master 允许主线程存在。
--daemonize 使进程在后台运行,并将日志输出到指定的日志文件或者UDP服务器。
--pidfile 指定PID文件的位置,记录主进程的PID号(PID,服务器进程ID)。
--vacuum 当服务器退出时指定清理环境,删除Unix Socket 文件和PID文件。
ian@ubuntu:/var/www/django_rest# uwsgi --http :8000 --wsgi-file test.py --chdir /var/www/django_rest/ --wsgi-file django_rest/wsgi.py --master --processes 4 --stats 127.0.0.1:9000
1.2 Nginx安装
非root用户,记得命令前加sudo
1、更新软件源
apt-get update
2、安装nginx
apt-get install nginx
3、启动nginx 默认80端口
etc/init.d/nginx start
4、nginx常用操作
etc/init.d/nginx reload 不重启重新载入最新配置文件内容
etc/init.d/nginx stop 停止服务
etc/init.d/nginx restart 重启服务
启动nginx
1.2.1 Nginx + uWSGI + Django
创建日志文件
touch /var/www/django_rest/uwsgi.log
整合Nginx 、uWSGI、Django,项目结构如下:
django_rest/
|— django_rest/
| |— __init__.py
| |— settings.py
| |— urls.py
| |_ wsgi.py
|— api/
| |— static/
| |— __init__.py
| |— admin.py
| |— apps.py
| |— models.py
| |— tests.py
| |_ views.py
|— manage.py
|_ django_uwsgi.ini
django_uwsgi.ini配置
[uwsgi]
# 请求方式与端口号
socket = :8001
# Django项目路径
chdir = /var/www/django_rest
# wsgi文件
module = django_rest.wsgi
# 允许主进程存在
master = true
# 开启进程数
processes = 3
# 当服务器退出时自动清理环境
vacuum = ture
# 使进程在后台运行,并将日志输出到指定的日志文件
daemonize = /var/www/django_rest/uwsgi.log
ubuntu终端
ian@ubuntu:/var/www/django_rest# uwsgi --ini django_uwsgi.ini
查看日志文件,如有错检查配置文件参数是否有误
tail -f uwsgi.log
Nginx 配置修改
server {
listen 8000;
listen [::]:8000;
server_name localhost;
client_max_body_size 100M;
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8001;
}
# 配置静态资源
location /static {
alias /var/www/django_rest/api/static;
}
}
启动nginx
etc/init.d/nginx start