您的位置:首页 > 运维架构 > Nginx

flask 应用的架构和部署(flask+gunicorn+nginx)

2017-07-07 11:10 513 查看
本文主要介绍flask+gunicorn+nginx的配合部署过程,它只是入门的部署过程,当你的web应用有并发要求时,还应加上缓存和队列调度等等,这部分可以参考https://zhuanlan.zhihu.com/p/25038203

前言:

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.py

from 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx web flask gunicorn