django+vue+uwsgi+nginx部署在阿里云生产环境(全套配置代码)

13 篇文章 0 订阅
8 篇文章 0 订阅

前言

献给和我一样懵懂中不断汲取知识,进步的人们。


霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光
理论铺垫

1,

wsgi:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。
利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了;

uwsgi:同WSGI一样是一种通信协议
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它与WSGI相比是两样东西。

uWSGI :一种python web server或称为Server/Gateway
uWSGI类似tornadoweb或者flup,是一种python web
server,uWSGI是实现了uwsgi和WSGI两种协议的Web服务器,负责响应python 的web请求。
因为apache、nginx等,它们自己都没有解析动态语言如php的功能,而是分派给其他模块来做,比如apache就可以说内置了php模块,让人感觉好像apache就支持php一样。
uWSGI实现了wsgi协议、uwsgi协议、http等协议。
Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

2.项目流程和每个组件的用途

首先客户端请求服务资源,
nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi,
wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
wsgi将返回值进行打包,转发给uWSGI,
uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换

3.作用

  1. 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;
  2. 在nginx上加上安全性或其他的限制,可以达到保护程序的作用;
  3. uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡;
  4. django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。

准备工作

1.dajngo项目, (home目录下有一个runyi文件夹,runyi文件夹下面是django项目runyi,django项目runyi下面就是manage.py文件和子应用runyi)
2.打包生成的vue文件,也就是dist文件(把dist文件放到和子应用同级的目录)
3.uwsgi
4.nginx
备注:django只提供接口,没有用到django的模板

配置

##1.uwsgi配置
在django项目,manage.py同级目录下,新建uwsgi.ini文件,写入下面代码

[uwsgi]
# 项目目录
chdir=/home/runyi/runyi/
# 指定项目的application
module=runyi.wsgi:application
# 指定sock的文件路径,用于和 nginx 进行数据交互的端口,一定要和nginx配置保持一致!!
socket=127.0.0.1:8080
# 进程个数
workers=5
pidfile=/home/runyi/runyi/uwsgi.pid
# 指定IP端口 云服务器需要改成 0.0.0.0, # 对外提供 http 服务的端口
# http=127.0.0.1:8001
# 指定静态文件
# static-map=/static=/opt/pro/pro/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true

#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2

# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录, 设置这个的话,日志全部会出现在日志文件中,不会出现在启动uwsgi命令下面
daemonize=/home/runyi/runyi/uwsgi.log

# 不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中
disable-logging=true

# 以固定的文件大小(单位KB),切割日志文件。 例如:log-maxsize=10000000 就是10M一个日志文件
log-maxsize=10000000

# 在每一个日志行中都打印时间信息。你可以传入一个strftime()格式的参数,来格式化时间的格式
logdate=true

# ... with appropriate permissions - may be needed
chmod-socket=666

# auto restart uwsgi when *.py was changed.只适用于开发环境
py-auto-reload = 1

uwsgi操作命令

# 后台运行
uwsgi -d --ini uwsgi.ini
# 单纯启动  
uwsgi --ini uwsgi.ini

# 查看对应程序的进程号码
ps aux|grep uwsgi

# 关闭
uwsgi --stop uwsgi.pid

# 杀死进程
pkill -f uwsgi -9

# 重启uwsgi
uwsgi --reload uwsgi.pid

当出现下面代码说明启动成功

runyi@hecs01:~/runyi$ uwsgi -d --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini

当然为了万无一失,可以查看uwsgi的进程情况

runyi@hecs01:~/runyi$ ps aux|grep uwsgi
runyi     402757  0.8  0.8 163368 73252 ?        S    10:07   0:00 uwsgi -d --ini uwsgi.ini
runyi     402761  0.0  0.7 237100 58088 ?        Sl   10:07   0:00 uwsgi -d --ini uwsgi.ini
runyi     402763  0.0  0.7 237100 58088 ?        Sl   10:07   0:00 uwsgi -d --ini uwsgi.ini
runyi     402765  0.0  0.7 237100 58088 ?        Sl   10:07   0:00 uwsgi -d --ini uwsgi.ini
runyi     402767  0.0  0.7 237100 58088 ?        Sl   10:07   0:00 uwsgi -d --ini uwsgi.ini
runyi     402810  0.0  0.0   8900   736 pts/1    S+   10:09   0:00 grep --color=auto uwsgi

这样的话,uwsgi就成功开始运行了,uwsgi成功的接管了django,也就不需要使用python manage.py runserver来启动django,django会运行在和uwsgi一样的8080端口?(此处有待考究,有人知道的话,还请留言告知)

2.nginx配置


	server {
	    listen 80; # 网站访问的监听端口,需要到阿里云控制中心开放80端口
	    server_name www.fullmedbank.cn; # 如果服务器已经被域名解析,必须填域名
	    charset  utf-8;
	    # 指定项目路径uwsgi
	    location /api { #此处的api,指的是关于vue的跨域配置,跟随前端vue而变
	        include uwsgi_params;
	        uwsgi_connect_timeout 30;
	        uwsgi_pass  127.0.0.1:8080 ; #跟uwsgi的sock匹配
	        uwsgi_param  UWSGI_CHDIR /home/runyi/runyi/; #django 项目参考地址
                        uwsgi_param  UWSGI_SCRIPT runyi.wsgi;  # wsgi模块导入
	        }
	     # 对vue的配置
	     location / {
	         root   /home/runyi/runyi/dist/; #dist文件的位置
	         try_files $uri $uri/ /index.html;
	        }
	    }

  }

nginx命令

# 杀死nginx进程
killall -9 nginx

# 检查nginx配置是否有问题
nginx -t

# 启动nginx
nginx

记得重启nginx

配置完成,就可以在通过域名进行访问了

理论知识截取自:https://blog.csdn.net/c465869935/article/details/53242126

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值