Nginx+uWsgi部署Django项目
最近需要部署一个Django项目但是不能用宝塔面板!
呜呜呜 不能懒人式一键部署了
那就学习一下黑框框部署吧
基本原理
- 首先用户浏览器向nginx发送请求,nginx判断是动态请求还是静态请求,如果是静态请求,则直接返回静态文件。如果是动态请求,则将请求转发给uwsgi服务器,uwsgi调用我们的django进行处理请求,然后一步一步的再返回。
- WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口
- uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议
- uwsgi是Nginx服务器和uWSGI服务器的通信协议,规定了怎么把请求转发给应用程序和返回
使用Xshell完成
1.上传文件到服务器
使用scp命令
1 2 3
| scp 文件名 用户名@服务器HOST:上传到服务器的路径 // 需要提供 root 密码 scp name root@82.156.215.40:/root/ipbdTCF/
|
使用xftp等其他方式也可
2.配置虚拟环境
检查是否安装virtualenv
安装virtualenv
1
| pip3 install virtualenv virtualenvwrapper
|
1 2
| // 遇到权限问题在前面加上 sudo sudo pip3 install virtualenv virtualenvwrapper
|
创建虚拟环境
1
| virtualenv --no-site-packages --python=python3 虚拟环境文件夹名
|
- –no-site-packages 这是构建干净,隔离的模块的参数 (如果virtualenv版本大于20默认携带此参数不需要此参数)
- –python=python3 这个参数是指定虚拟环境以哪一个物理解释器为基础的
- 最后一个是虚拟环境的名字 会创建这么一个文件夹
激活虚拟环境
1
| source /路径/虚拟环境文件夹名/bin/activate
|
激活虚拟环境的原理就是修改了PATH变量,path的执行是有顺序的
修改了环境变量的位置
- echo $PATH 检查环境变量
- which python3
- which pip3 检查虚拟环境是否正常
退出虚拟环境
项目依赖都装在虚拟环境中管理!
3.配置uwsgi
检查是否安装uwsgi
1 2 3 4 5 6
| uwsgi --version
pip install uwsgi
|
启动项目
- 注意:启动前先runserver测试一下是否配置完成能够正常运行
1 2 3 4 5 6
|
uwsgi --http 0.0.0.0:80 --file teacher/wsgi.py --static-map=/static=static
|
启动后可在自己服务器的公网IP访问到Django项目
配置uwsgi
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 28 29 30 31 32
| [uwsgi]
chdir=/opt/project_teacher/teacher/
uid=root gid=root
module=项目名.wsgi:application
socket=/项目绝对路径/uwsgi.sock
master=true
workers=4 pidfile=/项目绝对路径/uwsgi.pid
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=1028
daemonize=/项目绝对路径/uwsgi.log
|
1 2 3 4 5 6
| uwsgi --ini uwsgi.ini
uwsgi --reload uwsgi.pid
uwsgi --stop uwsgi.pid
|
Nginx配置
nginx的安装请查看另外一篇博客
配置文件
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| worker_processes 4;
user root;
events { worker_connections 1024; }
http { keepalive_timeout 65; server { listen 80; listen 443 ssl http2; server_name www.abc.com 123.123.24.23; charset utf-8; gzip on; 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; ssl_certificate /usr/local/nginx/conf/cert/tcfapi/tcfapi.snowhouse.space_bundle.pem; ssl_certificate_key /usr/local/nginx/conf/cert/tcfapi/tcfapi.snowhouse.space.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on;
error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location / { include uwsgi_params; uwsgi_connect_timeout 30; uwsgi_pass unix:/root/IPBDPythonGroup/medicalSys/tichengfen/uwsgi.sock; } location /static/ { alias /root/IPBDPythonGroup/medicalSys/tichengfen/static/; index index.html index.htm; } } }
|