Flask应用部署与运维

WSGI

WSGI简介

  • WSGI(Python Web Server Gateway Interface)
  • 定义了Web服务器和Web应用程序之间通信的接口规范。

WSGI应用

  • WSGI 应用是一个接受两个参数的可调用对象。

  • 两个参数

  1. environ 参数是个字典对象,包含 CGI 风格的环境变量。
  2. start_response 参数是一个接受两个固定参数和一个可选参数的可调用者。

WSGI服务器

  • WSGI 服务器为每一个HTTP请求,调用WSGI应用。
  • 简单的服务器实现(在python标准库中)
    wsgiref — WSGI Utilities and Reference Implementation
    例程:
# wsgi app

def application(environ,start_response):

    response_body = "<h1>Hello World</h1>"

    header = [('Content-Type','text/html')]
    status = "200 OK"

    start_response(status,header)

    print("environ http request method:"+environ['REQUEST_METHOD'])

    return [response_body.encode('utf8')]

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    httpd = make_server("0.0.0.0",8081,application)
    print("httpd run on:"+str(httpd.server_port))
    httpd.serve_forever()

通过Advanced REST client测试
在这里插入图片描述

部署方案设计

服务器系统的选择

Centos与Ubuntu

常用WSGI服务器

  1. Gunicorn
  2. uWSGI
  3. CherryPy
  4. Tornado
  5. Gevent

Web服务器

Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。

部署工具的安装与使用

  • Virtualenv简介
    用于创建独立的python运行环境,解决版本问题,依赖问题,权限问题。
  • Virtualenv安装与使用
    sudo pip3 install virtualenv
    创建虚拟环境,激活虚拟环境,激活虚拟环境(类似anaconda)
virtualenv venv   创建环境
source venv/bin/activate     进入环境
 pip3 install flask    在该环境下可以不用sudo
 python3  需要运行的.py代码
 deactivate      退出环境

进程管理工具,功能有应用程序进程的控制,多应用进程的管理,应用中断后的快速恢复。

  • Supervisor安装与使用
    sudo apt-get install supervisor
    在/etc/supervisor下有supervisord.conf配置文件
    在conf.d文件夹克配置自定义的进程启动的*.conf文件
    笔者配置了一个virtest.conf文件
[program:virtest2]
command = python3 /home/tarena/tarena_home/16virtualenv/virtest2.py
directory=/home/tarena/tarena_home/16virtualenv

sudo /etc/init.d/supervisor start启动supervisor
返回[ ok ] Starting supervisor (via systemctl): supervisor.service.
为开启成功
sudo service supervisor start/stop启动/停止程序

用于添加程序,并使用supervisorctl进行控制
sudo supervisorctl能查看和控制程序运行态
返回

virtest                          RUNNING   pid 11780, uptime 0:00:08
virtest2                         RUNNING   pid 11779, uptime 0:00:08

curl 127.0.0.1:8081命令可以测试是否有信息返回

Flask应用部署

部署工具的安装和配置

sudo apt-get install mongodb-server
sudo apt-get install nginx

在工程文件夹中创建一个requirements.txt文件,包含以下内容

flask
flask-wtf
flask-script
pymongo==3.9.0
flask-mongoengine
gunicorn

virtualenv venv创建虚拟环境
source venv/bin/activate进入环境
pip3 install -r requirements.txt在该环境中国安装所需库

当所在的虚拟环境中有可执行Flask代码时,可执行
gunicorn -b 0.0.0.0:8083 run:app应用使用了工厂方法,所以只在run.py文件中创建了应用对象app,gunicorn命令的参数必须是应用对象,所以这里是”run:app”
现在就可以通过”http://127.0.0.1:8083″来访问应用,监听端口是8083。

部署应用

/etc/nginx下的sites-available为可用的配置文件, sites-enabled为生效的配置文件。可在sites-available创建自定配置文件,在sites-enabled创建自定义文件软连接。
如在sites-available下创建一个todo_app,内容如下

server {
	listen 80;
	location /static {
		alias  /home/shin/Todo/app/static;
	}
	location / {
		proxy_pass http://127.0.0.1:9000;
	}
}

然后到sites-enabled文件夹下,创建软连接
sudo ln -s ../sites-available/todo_app .
接着可重启nginx,sudo service nginx reload
假如nginx启动错误,应去查看错误日志,nginx.conf是绝对错误日志路径的文件,可在此查看。/var/log/nginx/error.log

nginx结束后继续到/etc/supervisor/conf.d中建文件todo.conf,sudo vim todo.conf。内容如下:nginx监测的80端口,会转到9000上

[program:todo]
command = /home/shin/Todo/venv/bin/gunicorn -b 127.0.0.1:9000 run:app
directory = /home/sbin/Tode

然后进入supervisorctl控制台,sudo supervisorctl查看运行情况。用reload重新加载配置文件,status查看状态。

最后就能直接通过IP来访问。

在这里插入图片描述

轻量级运维方案的设计与实现

DevOps(Development和Operations的组合)

用于促进软件开发过程中,开发部门,技术运营,质量保证部门的快速开发和协作。让大家能快速协调开发过程中的问题。

  • DevOps优点:自动化,快速发布,快速恢复。

Fabric

一个通过SSH进行应用部署以及系统任务管理的命令行工具。
功能:在本地或者远程执行shell命令,上传和下载文件,提示用户输入,中断操作。

轻量级运维方案的设计

在这里插入图片描述
在本地进行代码操作,把写好的最新代码push发送到gitlab上,再通过Fabric让appServer服务器自己从gitlab获取最新代码,并执行。
通过sudo pip3 install fabric安装fabric应用

在项目文件下创建fabfile.py文件,内容如下:

from fabric import Connection
# env.hosts = ['192.168.1.108']
# env.user = 'shin'
# env.password = '123456'
def hello():
    print("hello world")

def deploy():
    c = Connection("shin@192.168.1.108",connect_kwargs={"password":"123456"})
    
    with c.cd('/home/shin/Todo'):
        c.run('git pull')
        c.sudo('supervisorctl restart todo')
        c.sudo('supervisorctl status')

然后直接python3 fabfile.py,最新代码就已经部署到正式环境并重启了服务。
这样每次开发的改动,就能快速部署到我们服务器上了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值