本文采用uwsgi+nginx来部署Django,环境是ubuntu16.04javascript
这种方式是将nginx做为服务器前端,将接受web全部的请求,统一管理。Nginx把全部的静态请求本身处理(静态文件处理是ngInx强项),而后把全部非静态请求经过uwsgi传递给Django,由Django来处理,从而完成一次web请求。php
1、uWSGIcss
pip install uwsgi
$ uwsgi --version
2.0.15
# test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] # python3 #return ["Hello World"] # python2
uwsgi --http :8000 --wsgi-file test.py
参数解释:html
http :8000表示使用http协议,端口号为8000,前端
wigi-file则表示要运行的wsgi应用程序文件。java
uwsgi运行后打开浏览器,访问http://127.0.0.1:8000/ ,或者是相应服务器地址的8000端口,就能够看到hello world 页面了
若是想要运行项目来测试python
# uwsgi --http :8000 --chdir 项目路径 -w 项目.wsg --static-map=/static=static uwsgi --http :8000 --chdir /home/teacher/ -w teacher.wsgi --static-map=/static=static
uWSGI经常使用命令:nginx
uwsgi --chdir=/path/to/your/project \ --module=mysite.wsgi:application \ --env DJANGO_SETTINGS_MODULE=mysite.settings \ --master --pidfile=/tmp/project-master.pid \ --socket=127.0.0.1:49152 \ # 能够ip地址,也能够是文件 --processes=5 \ # 进程数量 --uid=1000 --gid=2000 \ # 若是是root用户,uwsgi能够有删除权限 --harakiri=20 \ # 一个请求超时时间 --max-requests=5000 \ # 一个工做进程最大请求数 --vacuum \ # 退出时清楚环境 --home=/path/to/virtual/env \ # virtualenv的路径 -- static # 作一个映射,指定静态文件 --http # 这个就和runserver同样指定IP 端口 --daemonize=/var/log/uwsgi/yourproject.log # 日志
[uwsgi] # 项目目录 chdir=/opt/project_teacher/teacher/ # 指定项目的application module=teacher.wsgi:application # 进程个数 workers=5 pidfile=/opt/project_teacher/script/uwsgi.pid # 指定IP端口 http=192.168.31.123:8080 # 指定静态文件 static-map=/static=/opt/test_project/teacher/static # 启动uwsgi的用户名和用户组 uid=root gid=root # 启用主进程 master=true # 自动移除unix Socket和pid文件当服务中止的时候 vacuum=true # 序列化接受的内容,若是可能的话 thunder-lock=true # 启用线程 enable-threads=true # 设置自中断时间 harakiri=30 # 设置缓冲 post-buffering=4096 # 设置日志目录 daemonize=/opt/project_teacher/script/uwsgi.log # 指定sock的文件路径 socket=/opt/project_teacher/script/uwsgi.sock
$ uwsgi --ini uwsgi.ini # 启动uwsgi配置 [uwsgi-static] added mapping for /static => /home/trunk/static # 启动成功 $ uwsgi --stop uwsgi.pid # 关闭uwsgi signal_pidfile()/kill(): Operation not permitted [core/uwsgi.c line 1659]
2、Nginxweb
$ sudo apt-get install nginx #安装
$ /etc/init.d/nginx start
[ ok ] Starting nginx (via systemctl): nginx.service.
检查nginx是否启动成功json
$ ps -ef |grep -i nginx root 6961 1 0 03:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; www-data 6962 6961 0 03:56 ? 00:00:00 nginx: worker process pala 6985 2090 0 03:57 pts/0 00:00:00 grep --color=auto -i nginx
而后打开浏览器,访问ip地址,出现以下页面即表明nginx安装完成且能够正常启动。
Nginx经常使用命令
$ /etc/init.d/nginx start #启动 $ /etc/init.d/nginx stop #关闭 $ /etc/init.d/nginx restart #重启
3、Django + uWSGI +Nginx
$ vim /etc/nginx/conf.d/xxx.conf
server { # 这个server标识我要配置了 listen 80; # 我要监听那个端口 server_name 10.129.205.183 ; # 你访问的路径前面的url名称 access_log /var/log/nginx/access.log main; # Nginx日志配置 charset utf-8; # Nginx编码 gzip on; # 启用压缩,这个的做用就是给用户一个网页,好比3M压缩后1M这样传输速度就会提升不少 gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream; # 支持压缩的类型 error_page 404 /404.html; # 错误页面 error_page 500 502 503 504 /50x.html; # 错误页面 # 指定项目路径uwsgi location / { # 这个location就和我们Django的url(r'^admin/', admin.site.urls), include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通信的 uwsgi_connect_timeout 30; # 设置链接uWSGI超时时间 uwsgi_pass unix:/opt/project_teacher/script/uwsgi.sock; # 指定uwsgi的sock文件全部动态请求就会直接丢给他 } # 指定静态文件路径 location /static/ { alias /opt/project_teacher/teacher/static/; index index.html index.htm; }
uwsgi_params文件内容(放在项目根目录下)
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
重启nginx
$ /etc/init.d/nginx restart #重启
来源一位知乎小姐姐:https://zhuanlan.zhihu.com/p/29083368
对了,插一嘴,在ubuntu中,普通用户对计算机中的文件如 opt/ 、etc/等文件夹中内容修改时,没有办法直接修改,除了命令行执行命令加上sudo以外,能够使用sudo nautilus来移动或删除文件。有问题能够直接将问题发送至1005819387@qq.com来讨论,或者在评论里直接说也能够