nginx uwsgi django
nginx实现负载均衡的配置,动静分离的效果
1.环境准备,准备三台机器
192.168.16.37  资源服务器
192.168.16.140  资源服务器 
192.168.16.241  充当代理服务器作用,以及负载均衡的作用 
 
2.分别配置三台机器
192.168.16.37  资源服务器  提供dnf的页面 
192.168.16.140  资源服务器 ,提供小猫咪的页面 
(讲道理,应该是和192.168.16.37一样的代码配置,一样的页面)
192.168.16.241  负载均衡的配置
	nginx.conf修改为如下的配置
	1.添加负载均衡池,写入web服务器的地址
	 upstream  mydjango  {
		#负载均衡的方式,默认是轮训,1s一次
		#还有其他的负载均衡的规则
		server  192.168.16.37 ;  
		server 192.168.16.140 ;
}
	负载均衡的规则
	调度算法      概述
	轮询        按时间顺序逐一分配到不同的后端服务器(默认)
	weight       加权轮询,weight值越大,分配到的访问几率越高,最常用的方式,
	ip_hash      每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
	url_hash      按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
	least_conn    最少链接数,那个机器链接数少就分发
	
	1.轮询(不做配置,默认轮询)
	2.weight权重(优先级)
	3.ip_hash配置,根据客户端ip哈希分配,不能和weight一起用
2.负载均衡的配置方式第二步骤
#负载均衡器,接收到请求后,转发给负载均衡的地址池
location / {
        proxy_pass http://mydjango;
        }
3.动静分离的配置
	1.配置动态请求的服务器
	192.168.16.140  充当静态服务器,返回小猫咪的页面,以及一些图片资源
	需要安装nginx即可
	nginx.conf配置文件如下
	#当所有请求来自于 192.168.16.140/时,就进入如下路径匹配,返回小猫咪页面
	location / {
            root   html;
            index  index.html index.htm;
        }
	#当请求是192.168.16.140/**.jpg 就进入如下location匹配,返回/opt/images/目录下的内容 
         location ~* .*\.(png|jpg|gif)$ {
                root /opt/images/;
        }
	
	2.配置静态请求的服务器
	192.168.16.37 运行django页面 
	安装nginx,以及django动态页面
	
		1.先后台运行django页面
		python3 nginx_django/manage.py runserver 0.0.0.0:8000 & 
		2.修改nginx的配置,可以转发,动静的请求
						upstream mydjango {
							server 192.168.16.37:8000;
						}
					upstream mystatic {
						server 192.168.16.140;
					}
					
					server {
						listen       80;
						server_name  192.168.16.37;
						#当外部请求,是192.168.16.37:80时候,就进入如下location,返回django页面,反向
				代理
						location / {
								proxy_pass http://mydjango;
						}
						#当外部请求时,192.168.16.37:80/**.jpg,就转发给那台静态资源服务器,去处理
						 location ~ .*\.(png|jpg|gif)$ {
								proxy_pass http://mystatic;
					}
				}
	
	
	
	3.在负载均衡器上,配置请求转发
	192.168.16.241  配置负载均衡,动静分离
		1.定义一个upstrem地址池,进行请求分发定义
			 upstream  myserver  {
						server  192.168.16.37;
						server 192.168.16.140;
			}
		
		2.通过location进行请求分发的操作
		  location / {
				proxy_pass http://myserver;
			}
		
ob_crm项目部署:
django自带了socket服务端吗?wsgiref这个是python自带的socket模块,django默认用的是wsgiref的单机socket模块
Python manage.py runserver 这是调试命令,测试django是否有问题的
最终上线 是 uwsgi + django 的方式,
	
为什么要用nginx结合uwsgi
1.nginx支持静态文件处理性能更好,django uwsgi,默认不支持静态文件解析 
2.nginx的负载均衡特性,让网站并发性更高
3.并且反向代理特性,用户访问 80,即可访问到8000的应用
4.uwsgi支持多进程的方式,启动django,性能更高
5.nginx转发请求给uwsgi ,应该用 uwsgI_pass  ,实现了uwsgi协议的请求转发
如果出现错误,  
python app  application  not found  
就是你的uwsgi 没找到 wsgi.py 这个文件对象 application = get_wsgi_application()
配置步骤:
1.nginx + uwsgi + 虚拟环境 + mysql  + supervisor
环境准备,准备一台linux
192.168.16.37 ,
第一步,先准备后端代码 ob_crm 
第二步:安装python3解释器,以及虚拟环境工具virtualenvwrapper 
第三部,学习uwsgi命令,通过uwsgi启动ob_crm 
	1.激活虚拟环境在虚拟环境下,安装所需的模块
		安装如下内容即可
		(ob_crm) [root@nginx1 ob_crm]# cat requirements.txt 
		Django==1.11.20
		django-multiselectfield==0.1.8
		PyMySQL==0.9.3
		pytz==2019.1
	2.安装这个文件
	pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
	
	3.安装uwsgi命令
	pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple  uwsgi
	4.学习uwsgi启动ob_crm的命令
	uwsgi --http  :8088 --module mysite.wsgi --py-autoreload=1 
		--http  指定用http协议 
		:8088  指定ob_crm启动的端口
		--module   指定django的wsgi.py的文件地址
			指定你的django项目第二层的目录名,下面的wsgi.py
		--py-autoreload=1     开启uwsgi的热加载功能
	
	所以咱们用的命令应该是如下:
		1.必须进入项目目录 
			cd /opt/teaching_plan/ob_crm
		2.使用命令启动ob_crm (uwsgi不解析django的静态文件)
			uwsgi --http  :8088 --module ob_crm.wsgi
		3.让你的项目支持热加载
			uwsgi --http  :8088 --module ob_crm.wsgi  --py-autoreload=1
		
	由于uwsgi的启动参数过多,我们互选择配置文件的方式,启动项目
	uwsgi.ini  这个文件的名字,可以手动创建的
	
	1.创建uwsgi.ini文件,写入如下参数
	touch uwsgi.ini 
	写入如下内容,根据你自己的项目目录路径来更改
		[uwsgi]
		# the base directory (full path)
		#填写你项目的绝对路径,第一层
		chdir           = /opt/teaching_plan/ob_crm/
		#找到django的那个wsgi.py文件
		#根据上面一条参数,的相对路径来写
		module          = ob_crm.wsgi
		#虚拟环境的绝对路径
		home            = /root/Envs/ob_crm
		master          = true
		#根据你的cpu核数来定义这个参数,启动多少个进程
		processes       = 4
		# the socket (use the full path to be safe
		#指定你的django启动在什么地址上,并且是什么协议
		#如果你用了nginx,进行反向代理,请用socket参数
		#如果你用了nginx,进行反向代理,请用socket参数
		#如果你用了nginx,进行反向代理,请用socket参数
		socket          = 0.0.0.0:8000
		#如果你没用nginx反向代理,想要直接访问django用这个参数
		#如果你没用nginx反向代理,想要直接访问django用这个参数
		#http = 0.0.0.0:8000
		vacuum          = true
		py-autoreload    =   1
		~                            
	2.通过配置文件启动项目
	uwsgi --ini  uwsgi.ini 
	
	3.收集django的所有静态文件,统一管理,丢给nginx去解析
		1.修改django的settings.py,写入如下参数
			STATIC_ROOT='/opt/s19static'
			STATIC_URL = '/static/'
			STATICFILES_DIRS = [
					os.path.join(BASE_DIR, 'static')
			]
		2.执行命令,收集静态文件
			python3 manage.py collectstatic
		
	
nginx配置来了!!!
1.nginx的反向代理功能
2.nginx解析静态文件的功能
 location / {
        uwsgi_pass 127.0.0.1:8000;
        include uwsgi_params;
        }
location /static {
        alias /opt/s19static;
}
进程管理工具supervisor的使用
#supervisor其实就是在帮咱们去执行命令 
退出虚拟环境,在物理环境下安装
退出虚拟环境,在物理环境下安装
退出虚拟环境,在物理环境下安装
1.安装supervisor,通过pip直接安装
pip3 install supervisor 
2.生成supervisor的配置文件
echo_supervisord_conf >  /etc/supervisor.conf
3.修改配置,写入你管理ob_crm的命令参数
vim /etc/supervisor.conf  #直接进入最底行,写任务
[program:s19_ob_crm]
command=/root/Envs/ob_crm/bin/uwsgi --ini /opt/teaching_plan/ob_crm/uwsgi.ini
stopasgroup=true    
killasgroup=true    
4.通过命令,启动supervisor,同时启动ob_crm 
[root@nginx1 conf]# supervisor
supervisorctl  这是管理命令
supervisord  	这个是服务端命令 
#启动服务端的命令
supervisord -c /etc/supervisor.conf 
#通过客户端命令,管理ob_crm
[root@nginx1 conf]# supervisorctl -c /etc/supervisor.conf 
s19_ob_crm                       RUNNING   pid 10483, uptime 0:00:36
supervisor> 
#停止任务
supervisor> stop s19_ob_crm 
s19_ob_crm: stopped
#查看任务状态
supervisor> status 
s19_ob_crm                       STOPPED   May 08 12:23 PM
#停止所有的任务
supervisor> stop all 
s19_ob_crm                       STOPPED   May 08 12:23 PM
#启动所有任务
supervisor> start all 
s19_ob_crm                       RUNNING   May 08 12:23 PM
    当你的才华还撑不起你的野心的时候,你就应该静下心来学习;
当你的能力还驾驭不了你的目标时,就应该沉下心来历练。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号