本科的时候做公众号,开始提供学生教务查询服务,后端从PHP转到Python,无论是使用django还是flask,部署都没PHP那么方便,每次修改程序完,都是ps ax,然后再kill,再run。emmmmmm,其实一直都知道supervisor,之前配置过几次,都没配成功 ,也就没耐心好好去学一学,刚好寒假想重新学一下flask,就尝试了一下,配置成功,顺便记录下,以便以后的使用。

Flask项目开发

emmmmmm,这里就不赘述了,我这里部署的是自己根据Flask官方文档进行练习的项目,如果觉得还不错,可以给个star哦
Github地址:https://github.com/LDouble/Flask-Learning

用gunicorn运行Flask项目

Flask自带server性能等问题,没办法部署到生产环境,之前用的时候,官方提供了很多种方案,详情见http://www.pythondoc.com/flask/deploying/,我是误打误撞选择了gunicorn,而且觉得用起来挺舒服的。

  • 安装gunicorn
    pip3 install gunicorn

  • 通过命令启动程序
gunicorn --workers=2 test:app # test为模块名,test:app,意味着我的test.py中的服务器实例化对象为app workers=2 代表2个进程
[2018-02-18 16:50:18 +0800] [4858] [INFO] Starting gunicorn 19.7.1
[2018-02-18 16:50:18 +0800] [4858] [INFO] Listening at: http://127.0.0.1:8000 (4858) #默认运行在8000端口
[2018-02-18 16:50:18 +0800] [4858] [INFO] Using worker: sync #
[2018-02-18 16:50:18 +0800] [4863] [INFO] Booting worker with pid: 4863
[2018-02-18 16:50:18 +0800] [4864] [INFO] Booting worker with pid: 4864

其它更多参数以及说明参考
http://docs.gunicorn.org/en/stable/run.html#commands
http://blog.csdn.net/y472360651/article/details/78538188

  • 编写配置文件
    那么多配置文件,我们要是全部都在命令行输入,岂不是太麻烦了,所以我们可以通过加载配置文件来运行程序。配置文件的参数和上面提到的差不多,可以按照自己的需要选择何时的参数即可。
import  os
from  gevent import monkey
monkey.patch_all()
import multiprocessing
debug = False
bind = "0.0.0.0:5001"
pidfile = "gunicorn.pid"
logfile = "error.log"
workers = multiprocessing.cpu_count()*2 + 1
worker_class = "gevent" # 异步非阻塞
reload = True # 自动重新加载
#daemon = True
gunicorn -c gunc.py hello:app #运行程序

supervisor 配置管理进程

  • 安装supervisor并生成配置文件模板
pip install supervisor #因为supervisor目前只支持py2,所以不能用pip3进行安装 emmmmmm
echo_supervisord_conf > supervisor.conf # 导出配置模板
# 然后supervisor.conf 尾部添加内容如下:
[program:hello_world] ;hello_word 是自己给进程取的名,随意
command=gunicorn -c gunc.py hello:app    ; supervisor启动命令
directory=/www/Flask-Learning/hello_world                                             ; 项目的文件夹路径
startsecs=0                                                                             ; 启动时间
stopwaitsecs=0                                                                          ; 终止等待时间
autostart=false                                                                         ; 是否自动启动
autorestart=false                                                                       ; 是否自动重启
stdout_logfile=/www/log/hello.log                           ; log 日志
stderr_logfile=/www/log/hello.err                           ; 错误日志
# 加载配置文件并启动supervisor
supervisord -c supervisor.conf
# 管理项目
supervisorctl reload :修改完配置文件后重新启动supervisor
supervisorctl status :查看supervisor监管的进程状态
supervisorctl start 进程名 :启动XXX进程 进程名就是你刚刚配置文件的进程名
supervisorctl stop 进程名 :停止XXX进程
supervisorctl stop all:停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl update:根据最新的配置文件,启动新配置
  • 开机自动启动supervisor
# Ubuntu为例
vim /etc/rc.local
#添加以下内容
supervisord -c path/supervisor.conf # path是supervisor.conf的路径
supervisorctl start all #启动所有的程序

Nginx实现反向代理

至于为什么要用Nginx实现反向代理,各有自己的需求,这个在知乎上也有讨论,可以看看https://www.zhihu.com/question/38528616,我是因为一个服务器上有多个应用,而且期末的时候需要考虑到负载均衡。

反向代理和平常的反向代理一样的,
vim /etc/nginx/site-enable/default

# 添加server
server {listen    80;server_name hello_flask.it592.com;root /www/Flask-Learning/hello_world;location / {proxy_pass http://127.0.0.1:5001; #gunicorn运行的端口proxy_set_header Host $host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

部署完毕

这大概就是完整的部署过程了,我的网站地址:http://hello_flask.it592.com/api/

转载于:https://www.cnblogs.com/xmxj0707/p/8452881.html

Flask部署| gunicorn、nginx部署flask项目,并用supervisor来管理进程相关推荐

  1. Docker部署Angular+Nginx+uwsgi+Django项目

    Docker部署Angular+Nginx+uwsgi+Django项目 0.前言 在开发部署时,容易遇到服务器环境不一致,多台服务重复部署操作过于繁杂的情况.这时可以采用Docker来提供一套统一的 ...

  2. 【SSL/TLS】准备工作:HTTPS服务器部署:Nginx部署

    HTTPS服务器部署:Nginx部署 1. 准备工作 2. Nginx服务器YUM部署 2.1 直接安装 2.2 验证 3. Nginx服务器源码部署 3.1 下载源码包 3.2 部署过程 4. Ng ...

  3. python flask gunicorn nginx 部署

    WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议.WSGI协议就是用来统一这两者的接口的. ...

  4. python编程(webpy + gunicorn + nginx部署)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前虽然也用nginx + uwsgi + webpy的方法部署过网站,但是用了gunicorn ...

  5. vue项目部署到nginx

    vue项目部署到nginx 一.vue项目打包 修改config/index.js的assetsPublicPath为 ./(注意一定是build里面的,下面dev中也有这个配置) 这个路径的配置很重 ...

  6. 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署

    本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...

  7. python supervisor flask_python web 部署:nginx + gunicorn + supervisor + flask 部署笔记

    分享一篇文章,原文来自:python web 部署. Python web 部署 web开发中,各种语言争奇斗艳,web的部署方面,却没有太多的方式.简单而已,大概都是 nginx 做前端代理,中间 ...

  8. Flask 应用部署方式之 Flask+Gunicorn+Nginx

    1. Why Flask+Gunicorn+Nginx Flask+Gunicorn+Nginx是最常用的Flask部署方案,大家深究过为何用这样的搭配么? 1.1 Why? Flask 是一个web ...

  9. Flask+Gunicorn+Ngnix部署笔记

    1 前言 最近自己开发了一个基于Flask Web框架的小应用,用于对外服务.记录下将Web应用部署的步骤.采用比较常见的flask + gunicorn + nginx来部署. 其实我的环境很简单, ...

最新文章

  1. java图片序列化_Java中的强大武器——对象的序列化
  2. numpy.where用法
  3. 深入云原生 AI:基于 Alluxio 数据缓存的大规模深度学习训练性能优化
  4. 项目经理这些技能,是项目成功的关键保障
  5. OSChina 周一乱弹 —— 深入浅出讲技术
  6. 公众号质量改进调查问卷
  7. java retry(重试) spring retry, guava retrying 详解
  8. Bootstrap 表格 笔记
  9. int0低电平触发c语言,单片机中断的解释.ppt
  10. 国内手机产业混乱:产业一窝蜂 企业捞快钱
  11. r语言echarts画箱线图_R语言之数据可视化---交互式图表recharts
  12. Socket通信学习(一):Socket通信原理
  13. ***git自动化部署总结
  14. 运动状态下,百度人脸识别返回结果跟当前帧可能不一致
  15. python飞机大战素材黑马_Python基础day12飞机大战(上)
  16. react录制mp3格式音频,输出二进制数据流向后台请求音频的url
  17. php 压缩gif 不动,PHP怎么进行GIF动图压缩
  18. cf网络不稳定或服务器异常,电脑玩穿越火线为什么提示网络环境异常 - 卡饭网...
  19. 运维网络设备监控平台搭建,网管平台 智能化网 管解决方案,实现智能拓扑管理
  20. 23个部门联合发文:加快5G网络等信息基础设施建设和商用步伐,推动车联网部署应用...

热门文章

  1. C# 解决串口接收数据不完整
  2. Shiro过滤器源码
  3. 怎样把java换主题_如何为Eclipse安装主题(Color Theme)
  4. 学习《apache源代码全景分析》之存储段和存储段组摘录
  5. 简单接触一下scikit-learn
  6. matplotlib(四)核心模式以及注意事项
  7. xgboost使用自定义的loss function
  8. jquery获取当前的节点
  9. 发布5个月全系下跌500 麒麟980+40W快充 多亏了华为P30!
  10. Java8之Stream-函数式接口