所需工具:
- Uwsgi
- Nginx
- Django
- Vue
详情介绍
Django + Uwsgi + Nginx 部署的作用
1、Django + Uwsgi + Nginx方案
-
web项目,使用nginx的目的是为了安全和负载均衡,配置了nginx做前端代理,uwsgi作后端代理的服务器。
-
在处理来自Internet的请求时,要先经过nginx的处理,nginx把请求再交给uwsgi,经过uwsgi才能访问到项目本身。
2、Django + uwsgi方案
-
没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。
-
nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。
-
而uwsgi则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。
所以只用uwsgi也是可以的。
3、nginx和uWSGI特点
- nginx的作用
-
反向代理,可以拦截一些web攻击,保护后端的web服务器
-
负载均衡,根据轮询算法,分配请求到多节点web服务器
-
缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用
- uWSGI的适用
-
单节点服务器的简易部署
-
轻量级,好部署
开始工作:Django部署
建议以下操作都在 虚拟环境下 使用 强烈推荐
linux下虚拟环境的使用
uwsgi:
-
要准备好 Django 项目,之前的和新创建的都没关系。
-
# 安装 uwsgi (env)[root@linux-node1 /]$ pip install uwsgi
cd 到项目 目录下 (不是子应用下也不是父应用下) Uwsgi启动Django
(env)[root@linux-node1 /]$ cd /home/work/django/ # 这里要写你的端口 (env)[root@linux-node1 django/]$ uwsgi --http 1.1.1.3:80 --file 项目名称/wsgi.py --static-map=/static=static
-
配置文件uWSGI.ini
# 项目路径 (env)[root@linux-node1 /]$ vim /home/work/demo2/uwsgi.ini
注意下面的项目路径一点要写自己的!!!
# uwsgi.ini [uwsgi] # 注意这里一定要写 0.0.0.0 socket = 0.0.0.0:3031 # 指定socket监听的地址和端口 chdir = /home/work/demo2 # 项目路径 wsgi-file = /home/work/demo2/wsgi.py # django的wsgi文件路径 processes = 5 # 启动五个线程 threads = 30 # 启动30个进程 master = true daemonize = /home/work/demo2/uwsgi.log # 日志存放路径 module=demo2.wsgi # 使用demo2.wsgi模块 pidfile = /home/work/demo2/uwsgi.pid # uwsgi启动进程id存放路径 chmod-socket=666 # socket权限 enable-threads = true # 允许用内嵌的语言启动线程,这将允许你在app程序中产生一个子线程
-
最后启动
(env)[root@linux-node1 django/]$ uwsgi --ini uwsgi.ini
nginx:
-
配置nginx YUM源
(env)[root@linux-node1 /]$ vim /etc/yum.repos.d/nginx.repo
# nginx.repo [nginx] name=nginx repo # 下面这行centos根据你自己的操作系统修改比如:OS/rehel # 6是你Linux系统的版本,可以通过URL查看路径是否正确 baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
-
安装nginx
(env)[root@linux-node1 /]$ yum -y install nginx
-
配置nginx+uwsgi
(env)[root@linux-node1 /]$ vim /etc/nginx/conf.d/django.conf
server { listen 8888; server_name 192.168.56.11; # 此处要写你的IP client_max_body_size 5M; gzip on; gzip_buffers 32 4K; #压缩在内存中缓冲32块 每块4K gzip_comp_level 6 ; #压缩级别 推荐6 gzip_min_length 4000; #开始压缩的最小长度4bit gzip_types text/plain application/json application/javascript application/x-javascript application/css application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png image/x-ms-bmp; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:3031; # 指定uWSGI-server的IP地址和端口,或者socket文件 uwsgi_ignore_client_abort on; # 忽略uWSGI-Server返回的终止响应. } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
-
使用 nginx + uwsgi 启动django
# 开启nginx (env)[root@linux-node1 django/]$ systemctl start nginx # 启动uwsgi的django项目 (env)[root@linux-node1 django/]$ uwsgi --ini uwsgi.ini http://192.168.56.11:8888/ 访问项目 # 关闭uwsgi uwsgi --stop uwsgi.pid
此时使用浏览器访问 http://192.168.56.11:8888/ 就会看到 Django项目的启动
如果大家此时报错 或看不到 最后的完成效果
# 查看此时 nginx 的状态
(env)[root@linux-node1 django/]$ systemctl status nginx
# 或者
# 查看 日志 nginx & uwsgi是否出现问题
(env)[root@linux-node1 django/]$ tail -f filename (默认最后10行,相当于增加参数 -n 10)
(env)[root@linux-node1 django/]$ tail -n 20 filename (显示filename最后20行)
此时我的使用是没有问题的,如果你的出了问题可能是 环境问题 此时推荐虚拟环境,
Vue部署:
-
将 Vue项目 打包发送到Linux服务器上
进入Vue目录 执行
npm run build
执行之后就会生成 dist 文件
-
找到此文件的路径,打包发送到 Linux 服务器上
这里可以使用 Xftp 直接拖拽,也可以 使用 rz 注:这里 要说一下如果使用 rz 命令是需要开发工具来支持的,如:Xshell(env)[root@linux-node1 work/]$ rz
-
解压收到的 dist 包
# 找到解压包的位置 (env)[root@linux-node1 work/]$ unzip filename.zip
-
配置Vue
生成配置文件 vue.conf(env)[root@linux-node1 /]$ vim /etc/nginx/conf.d/vue.conf
# vue.conf server { listen 9000; server_name 1.1.1.3; # 你的 ip 地址 #access_log logs/access_example.log main; root /home/work/dist; # dist文件的所在位置 location / { try_files $uri $uri/ @router; } location @router { rewrite ^.*$ /index.html last; } }
回到dist的目录下
-
启动查看
# 在 dist 目录下 (env)[root@linux-node1 dist/]$ systemctl reload nginx
此时使用浏览器访问 http://192.168.56.11:9000/ 就会看到 Vue 项目的启动
Django 的部署和 Vue 的部署就已经全部完成。
此时 Django&Vue 是同一项目 那么 端口的对应是 最关键的