运行环境
os: ubuntu 18.04
django: 2.0.4
python:3.6
uwsgi: 2.0.17
nginx: 1.14.0
主要原理
django 是后端框架, 主要进行的是逻辑处理 , 其自带 WSGI服务器(位置:project_name/wsgi.py),可用于调试,但高并发情况无法达到要求。
uWSGI:也可以用作服务器,比wsgi快很多,但是在实际环境中,主要和nginx一起使用,这时作为django 与 nginx 的中间件。
nginx:高性能反向代理服务器,对高并发支持得很好,可以直接响应转发静态文件,不用经过后端逻辑处理,所谓反向代理就是浏览器发送的http 请求强制首先被nginx进行代理,然后由nginx决定是否发给后台,可以均衡负载。
操作
django:
安装:pip install django
启动:django 项目必须可以启动,python manage.py runserver 正常启动后没有问题
uWSGI:
安装:pip install uwsgi
启动命令:uwsgi --http 127.0.0.1:8080 --file 项目名称/wsgi.py
(http 是django 的url,file是django目录下的wsgi.py文件位置)
上面这个命令比较简单,但是实际配置的时候经常由很多参数要写,导致需要输入一个很长的命令。
所以我们编写一个配置文件来代替,每次启动只需要使用配置文件启动。
配置文件:(可以放在任何位置 ,文件名随意,后缀名.ini)
[uwsgi] socket = 127.0.0.1:8080 //与nginx通信的socket(一定要和nginx配置保持一致!!!) chdir = /home/lihansen/pyproject/django/detection_server //django 项目的根目录 module = detection_server.wsgi //django项目下的wsgi.py 模块,(这里可以写绝对路径,也可以用python import 的方式) processes = 2 threads = 4 master = true buffer-size = 60000 vacuum = true
(复制后请把注释删除,防止出现不必要的错误)
启动命令:uwsgi --ini 文件名.ini
nginx:
安装:sudo apt install nginx
配置文件:默认的配置文件是/etc/nginx/nginx.conf,我们的网站配置文件是放在/etc/nginx/site-enabled/*.conf
所以我们在这个目录下编写一个文件
server { listen 8888; #网站访问的监听端口 server_name localhost; #网站的url charset utf-8; client_max_body_size 75M; location /static { alias /home/lihansen/pyproject/django/detection_server/static; #静态文件地址 } location / { #uwsgi配置 include uwsgi_params; uwsgi_pass 127.0.0.1:8080 ; #与uwsgi通信的地址 uwsgi_param UWSGI_CHDIR /home/lihansen/pyproject/django/detecion_server; #django 项目参考地址 uwsgi_param UWSGI_SCRIPT detection_server.wsgi; # wsgi模块导入 } }
语法可参考:http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Vars.html
创建配置文件后保存
我们可以用 nginx -t来测试配置文件
完成配置后,我们输入 service nginx restart 来重新启动
现在配置已经完成,打开http://127.0.0.1:8888 就可以显示出django 项目的主页了!
(这时候的uWSGI服务器一定是开启状态)
关闭nginx:
nginx -s quit #网上的关闭命令通常不好用,网站还能上去,我使用的是杀死master进程的方式
ps -ef | grep nginx #查看nginx所有的进程,查看master 的进程pid
kill -quit pid #杀死master进程的pid,nginx被完全关闭,再次输入网站url ,发现网站已经被关闭
nginx常用命令:
终端输入 nginx -h 查看常用命令,like this:
root@648700565:/etc/nginx# nginx -h
nginx version: nginx/1.14.0 (Ubuntu)
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/share/nginx/)
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
-g directives : set global directives out of configuration file
nginx -c filepath #更改配置文件的路径
nginx -t #测试
service nginx start #开启
参考资料:
http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/index.html