nginx + uwsgi + django + mysql +supervisor项目部署--day79
昨日内容回顾
1.nginx是什么
nginx是支持反向代理,负载均衡,且可以实现web服务器的软件
2.nginx如何实现404页面,access.log访问日志,多虚拟主机,反向代理等功能
nginx如果出现403(权限不足)的问题:
1.你的nginx代码放在了/root下
2.你的客户端被禁止访问了,去找nginx.conf中的配置
3.nginx负载均衡的实现
1.准备三台机器,准备3台虚拟机,或者和俩同桌交流一下
192.168.226.128 是nginx资源服务器,返回页面的
192.168.226.129 用作nginx负载均衡服务器
192.168.226.130 也用作nginx资源服务器
2.分别配置三台机器
确保 128和130这2台机器,能正确的资源返回即可
这三个机器,都是通过修改nginx.conf来实现效果的
128此时返回 超哥 一米五的 页面
130返回 主页页面
129配置反向代理
3.配置关键点如下
129负载均衡配置修改nginx.conf如下
添加负载均衡地址池的参数(备注:地址池是放在http的里面,第一个server的上面)
#默认是轮询方式,两台服务器
upstream s18django {
server 192.168.226.128;
server 192.168.226.130;
}
添加反向代理参数如下(将location / 里面的参数替换为下面的一句)
proxy_pass http://s18django;
4.配置完毕后,重启nginx,检测负载均衡效果
访问192.168.226.129这个负载均衡器
它会默认轮询的,丢给upstream中的地址池,每人一次
5.nginx负载均衡的算法
1.轮询方式(即上面的3所示)
2.加权轮询
upstream s18django {
server 192.168.226.128 weight=4;
server 192.168.226.130 weight=1;
}
3.ip_hash方式,对你的ip地址进行哈希,ip_hash方式不得与权重共用
upstream s18django {
server 192.168.226.128;
server 192.168.226.130;
ip_hash; #注意:不管是ip_hash还是权重,都是写在地址池中的
}
#####下面的才是真正的项目部署的代码:
crm项目部署
1.nginx + uwsgi + django + 虚拟环境 + supervisor + mysql
2.django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?
django只是一个web逻辑框架,它通过python3 manage.py runserver命令启动的socket服务端
是借助python内置的wsgi框架 - wsgiref框架实现的
它是一个单机模块,单进程模块,性能很低
因此在线上需要借助通过c语言编写的uwsgi这个web服务器软件,启动django
sanic 旋风小子
由低到高的性能框架
djano
flask
tornado
sanic
3.在进行uwsgi启动django的时候,是需要找到wsgi.py这个文件模块的
如果你报错提示 找不到application ,就是因为uwsgi 找不到wsgi.py
标注:wsgi.py 的绝对路径是 /opt/Crm_Project/Crm_Project/wsgi.py
打开文件,可以看到内部有 application = get_wsgi_application()
4.为什么要用nginx 和uwsgi?
nginx 可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保障后台服务器安全等等
为什么要用uwsgi
因为uwsgi支持多进程 多线程的方式,性能很高,启动django性能更好,但是uwsgi不解析django的静态文件
我们以后会收集所有的django项目静态文件,丢给nginx去处理
5.准备crm代码
6.准备一个新的虚拟环境,去启动crm,使用virtualenvwrapper创建新的虚拟环境
1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
在windows本地 通过
pip3 freeze > requirements.txt
就能将 python3解释器中所有的模块导出到这个文件中
标注:先在一个原来配置好的虚拟环境中启动crm,作为测试,注意运行crm项目之前要先打开MySQL
lsvirtualenv #列出所有的虚拟环境目录
workon mycrm #激活并进入该虚拟环境
systemctl start mariadb #启动MySQL restart是重启
ps -ef |grep mariadb #查看进程
netstat -tunlp |grep 3306 #查看端口
python3 /opt/Crm_Project/manage.py runserver 0.0.0.0:9999 #启动crm项目,并通过浏览器访问服务器IP:端口
2.将这个 requirements.txt 文件传输到服务器上,进行安装,就可以自动解决所有模块问题
pip3 install -r requirements.txt
pip3 install -i https://pypi.douban.com/simple -r requirements.txt #选择豆瓣源加速下载
7.使用uwsgi启动crm项目
确保进入虚拟环境,然后安装uwsgi
workon nginx_crm
下载uwsgi
pip3 install uwsgi
8.使用uwsgi命令启动django项目
uwsgi支持热加载的启动方式命令如下
uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1
cd /opt/
django-admin startproject mysite
cd /opt/mysite
vim mysite/settings.py ==> ALLOWED_HOSTS = ["*"]
uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1
uwsgi --http :8088 --module Crm_Project.wsgi --py-autoreload=1
--http指定http协议启动在 8088端口
--module 找到项目第二层的目录,里面的wsgi.py文件 先 cd /opt/Crm_Project
如果你想启动一个http页面,提供测试访问,就用--http参数
如果你结合了nginx反向代理,必须用--socket参数
uwsgi --socket :8000 --module Crm_Project.wsgi
8,使用uwsgi配置文件的方式启动django项目
由于参数过多,这里引入配置文件的概念 叫做 uwsgi.ini 同类的有 my.cnf nginx.conf
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
#正式启动环境在这里
touch uwsgi.ini
vim uwsgi.ini
启动crm的配置文件如下 uwsgi.ini内容如下(编辑 vim /opt/Crm_Project/uwsgi.ini ,写入如下内容)
[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir = /opt/Crm_Project
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module = Crm_Project.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home = /root/Envs/nginx_crm
# process-related settings
# master
master = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化
processes = 4
# the socket (use the full path to be safe
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
#如果你用了nginx反向代理,就填写socket参数
socket = 0.0.0.0:8000
#如果你没用nginx,想直接通过浏览器测试后端,使用http
#http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
此时通过uwsgi --ini uwsgi.ini方式启动代码
10.配置crm收集所有的crm静态文件
编辑项目的settings.py 写入如下参数(vim /opt/Crm_Project/Crm_Project/settings.py )
#收集所有的crm静态文件
STATIC_ROOT= '/opt/crmstatic' #是个文件夹!
11.执行命令,收集crm所有的静态文件
python3 manage.py collectstatic
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
#此时后端的配置完毕!!!!开始搞nginx
12.配置nginx,一是支持反向代理,二是支持静态文件加载
修改nginx.conf
vim /opt/s18tngx/conf/nginx.conf
代码如下
server { #第一个server里面
listen 80;
server_name localhost;
#当用户访问 www.s18dnf.com的时候,就进入这个虚拟主机
location / {
uwsgi_pass 0.0.0.0:8000;
include uwsgi_params;
}
#这个location是解决crm的静态文件的问题的
location /static {
#alias参数 就是将/static转化为/opt/crmstatic ,也就找到了我们所有的静态文件
alias /opt/crmstatic;
}
13.重启nginx 查看反向代理效果
ps -ef | grep nginx
netstat -tunlp | grep nginx
nginx -s reload #平滑重启nginx
uwsgi --ini /opt/Crm_Project/uwsgi.ini #启动项目
14.配置supervisro工具
注意要退出虚拟环境
注意要退出虚拟环境
注意要退出虚拟环境 deactivate #手动停止虚拟环境
1.安装easy_install
pip3是python3的软件包管理工具
easy_install 是python2的软件包管理工具
yum install python-setuptools
2.安装supervisor
easy_install supervisor
3.创建supervisor的配置文件
echo_supervisord_conf > /etc/supervisor.conf
4.修改supervisor的配置文件,添加启动uwsgi的命令
supervisor其实就是帮咱们执行了,需要手动执行的命令而已
vim /etc/supervisor.conf
写入如下内容,在最底部写
[program:s18crm]
command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.ini
stopasgroup=true
killasgroup=true
5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
5.测试用supervisor启动uwsgi ,注意要确保此时uwsgi已经退出
supervisord -c /etc/supervisor.conf #这是启动supervisor服务端命令
supervisorctl -c /etc/supervisor.conf #这是supervisor客户端管理命令
6.学习supervisor的命令
status s18crm #查看状态
start s18crm #启动任务
stop s18crm #停止任务
start all
stop all #启停所有的任务
感谢cctv
今日作业:
1.完成nginx + uwsgi + django + mysql +supervisor项目部署
2.演示效果用supervisor启停uwsgi后端
3.用户可以直接访问nginx,然后反向代理到uwsgi后端
浙公网安备 33010602011771号