Flask部署

1.解压工程,安装依赖包
1. [root@localhost src]# cd /usr/local/src
2. [root@localhost src]# cd Flasky/
3. [root@localhost Flasky]# tar xf /root/Flasky.tar.gz -C .
4. [root@localhost Flasky]# cd Flasky/
5. [root@localhost Flasky]# pip install -r requirements.txt
6. [root@localhost Flasky]# pip install gunicorn gevent

2.配置supervisor+gunicorn+gevent+flask
1. [root@localhost src]# yum -y install supervisor
2. [root@localhost Flasky]# yum -y install nginx
3. [root@localhost Flasky]# systemctl start supervisor
4. [root@localhost Flasky]# systemctl enable supervisord.service
5. [root@localhost Flasky]# vim /etc/supervisord.d/Flasky.ini

  [program:Flasky]
  command=/usr/bin/gunicorn --bind 127.0.0.1:5000 --workers 4 --worker-class gevent manage:app
  directory=/usr/local/src/Flasky/Flasky
  user=nginx
  statrtsecs=3

  autostart=true
  autorestart=true
  rediect_stderr=true
  stdout_logfile_maxbytes=50MB
  stdout_logfile_backups=10
  stdout_logfile=/var/log/Flasky.log

3.验证服务是否正常启动
1. [root@localhost Flasky]# supervisorctl reload
2. curl localhost:5000
3. 如果没起来,则:gunicorn manage:app,进行详细查看

其实这里面有个非常搞笑的问题,如果我用virtualenv了,那么python应用的根目录就为指定的路径,那么我在使用supervisor时,supervisor作为一个系统服务,那么如果它装在virtualenv下的话,就会出现无法启动这个服务,那么也就无法运行.如果以yum -y install supervisor时,这个时候supervisor是作为一个系统服务运行的,但是在启动python应用时就会出现问题,因为所写的python应用所依赖的模块全部放在virtualenv出来的目录里,在系统中找不到,所以这个时候面临一个选择:
1. 想法设法在virtualenv中启动supervisor,或者不用,写脚本实现应用高可用.
2. 将python应用放置系统中,不使用virtualenv

关于Nginx反向代理:可看一下链接

早期知乎架构图

用户请求过来时,先到LVS调度器,LVS将用户的请求通过一定的算法(见1)分发给后台的Nginx集群层,由于Nginx本身在设计的时候主要为了解决C10K Problem(见2).Nginx主要用于以下两个方面:
1. 动静分离

如常见的静态文件:html,css,图片等各种静态内容,动态文件在JAVA中有.jsp/.do等文件,所有东西交给应用服务器处理,好处:省事,不需要考虑大规模应用部署.
坏处:并发能力差.主要包含动静态资源的处理和静态内容的缓存,动态资源处理的压力只能通过增加机器来解决,而在静态内容的处理上,又包含以下两个方面:
  1. 用专门的web服务器处理静态内容,减轻应用服务器压力
  2. 缓存,公网上使用CDN服务进行分发静态内容.
  1. 反向代理
    静态内容的处理很好解决,如何减轻应用服务器的压力才是关键,目前认为主要包含两个方面:
    1. 请求的处理
      在这张图片中,LVS仅用来做4层分发,这也是LVS的优势.而在web应用中,一般是7层,那么这个地方就要涉及到请求的解析与处理,Nginx处理请求内容,做7层分发,可以解析头信息,处理与分发请求.
    2. 请求的分发
      当发现是静态内容时,不交给后台的应用服务器,自己处理返回.如果是动态内容,那么就交给后台的应用服务器处理.而在更多的应用场景中,Nginx本身也可以用作负载均衡器,一个Nginx后面可接几个应用服务器,当然,根据实际情况定.

[错误]
1. 如果出现: error: class ‘socket.error’, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
[root@localhost src]# systemctl start supervisor && systemctl enable supervisor
2. 如果无法安装psycopg2
[root@localhost src]# yum -y install python-devel postgresql-devel gcc && pip install psycopg2

附录
1. LVS算法
2. C10K Problem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值