flask 应用的架构和部署(flask+gunicorn+nginx)
2017-07-07 11:10
513 查看
本文主要介绍flask+gunicorn+nginx的配合部署过程,它只是入门的部署过程,当你的web应用有并发要求时,还应加上缓存和队列调度等等,这部分可以参考https://zhuanlan.zhihu.com/p/25038203
目前我们使用flask内建的wsgi server,这个server由于是单进程单线程模型的,所以性能很差,一个请求不处理完的话服务器就会阻塞住其他请求,我们需要对这个server做替换。
而gunicorn是一个python编写的高效的WSGI HTTP服务器,它比uwsgi使用更简单
2.为什么需要nginx?
nginx反向代理能带给我们很多好处:
- 负载均衡,把请求平均地分到上游的app server进程。
- 静态文件处理,静态文件的访问交给nginx来处理,降低了app server的压力。
- 接收完客户端所有的TCP包,再一次交给上游的应用来处理,防止app server被慢请求干扰。
- 访问控制和路由重写。
- 强大的ngx_lua模块。
- Proxy cache。
- Gzip,SSL…
在项目中编写upstart.conf并复制到服务器命名为blog.conf
在服务器端
在服务器端
前言:
1.为什么要使用gunicorn?目前我们使用flask内建的wsgi server,这个server由于是单进程单线程模型的,所以性能很差,一个请求不处理完的话服务器就会阻塞住其他请求,我们需要对这个server做替换。
而gunicorn是一个python编写的高效的WSGI HTTP服务器,它比uwsgi使用更简单
2.为什么需要nginx?
nginx反向代理能带给我们很多好处:
- 负载均衡,把请求平均地分到上游的app server进程。
- 静态文件处理,静态文件的访问交给nginx来处理,降低了app server的压力。
- 接收完客户端所有的TCP包,再一次交给上游的应用来处理,防止app server被慢请求干扰。
- 访问控制和路由重写。
- 强大的ngx_lua模块。
- Proxy cache。
- Gzip,SSL…
应用架构:
部署步骤:
1. wsgi
项目中创建wsgi.pyfrom app import create_app application = create_app('production') if __name__ == '__main__': application.run()
2.远程复制scp
远程复制项目文件到服务器# 在本地目录内执行 scp -r app jason@10.222.32.10:/usr/share/www
3.安装各种环境和依赖包并测试gunicorn服务
在服务器上执行# 安装venv环境 virtualenv venv . venv/bin/activate # 安装依赖包 pip install -r requirements.txt #安装gunicorn pip install gunicorn # 测试运行服务 gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application # 解释 -w :要开多少个worker,即开启几个进程 -b :指定host地址 wsgi: :声明入口wsgi文件中的全局变量
4.配置upstart
在linux启动时就跟随启动起来在项目中编写upstart.conf并复制到服务器命名为blog.conf
description "My Blog service" # 运行级别 start on runlevel [2345] stop on runlevel [!2345] # 用户id和用户组 respawn setuid root setgid www-data # 运行路径和服务运行时的工作目录 env PATH=/usr/share/www/venv/bin chdir /usr/share/www/ exec gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application
在服务器端
# 建立服务目录配置 sudo nano /etc/init/blog.conf # 测试建立的文件 deactivate # 开启服务 sudo service blog start
5. 配置nginx(反向代理)
在项目中编写nginx.conf# /ect/nginx/sites-available/default server { listen 80; server_name 10.211.55.10; location / { # 要和gunicorn配置的host地址对应上 proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
在服务器端
# 进入nginx默认配置文件 sudo nano /ect/nginx/sites-available/default # 将server{}中的内容替换为上面写的内容 # 重启nginx sudo service nginx restart
6. 初始化数据库并重启服务
在服务器端createdb blog-db cd /usr/share/www . venv/bin/activate python manage.py db upgrade deactivate sudo service blog restart
相关文章推荐
- 使用flask开发RESTful架构的api服务器端–部署flask应用到nginx
- 部署flask应用到nginx和tornado
- Python应用 ---- Mac环境下Flask+Nginx+FastCGI实现Python应用部署
- Python基础 - Ubuntu+Nginx+uwsgi+supervisor部署Flask应用
- 采用flask+uwsgi+nginx架构将flask应用程序部署在腾讯云
- Flask + Gunicorn + Nginx 部署
- 部署 flask 应用到 nginx 和 tornado
- 阿里云ECS+Gunicorn+Supervisor+Nginx部署Flask
- Python日记——nginx+Gunicorn部署你的Flask项目
- 利用gunicorn、supervisor、nginx 等部署flask项目
- Flask + Gunicorn + Nginx 部署
- 使用 uWSGI + Nginx 部署 Flask 应用
- nginx+uwsgi+django+python 应用架构部署
- 网站部署过程 Nginx + Gunicorn +Supervisor +Flask
- UWSGI + Nginx 部署 Flask web 应用
- 在Mac上使用Nginx和FastCGI部署Flask应用
- 【金】nginx+uwsgi+django+python 应用架构部署
- 阿里云部署Django项目(超详细图文教程) —— Part2. 使用Nginx, Gunicorn, virtualenv, supervisor 部署Django应用
- Flask Nginx Gunicorn Supervisor 网站部署 详解
- 在 Ubuntu 上使用 Nginx 部署 Flask 应用