先用1张图表示centOS布署flask的关键点,以及可能遇到的问题,及解决办法。

图片看不清,可以【下载】下来看,清晰度能够看清字

【目标】

  • 局域网内,通过url可以访问flask编写的api
  • 更新flask项目后,自动布署

【工具】

自动布署涉及的工具:

  • gitlab
  • jenkins

布署flask项目,涉及的工具:

  • flask编程
  • gunicorn:gunicorn启动flask项目的方法
  • nginx:明确nginx与gunicorn之间的关系,当浏览器访问flask-api时,背后发生了什么
  • supervisor:掌握使用方法
  • linux操作:创建文件,切换目录,安装工具,启动/重启/关闭工具,查看被占端口号以及,杀死进程

【环境介绍】

  • flask运行环境:

  python3,pip3,python虚拟环境

  • 布署环境:

  centOS7

【操作步骤】

  配置gunicorn:

1.创建虚拟环境,并下载gunicorn(pip install gunicorn)

2.在项目根目录下创建gunicorn的启动文件,wsgi.py,内容如下:

from app import create_app

application = create_app()

if __name__ == '__main__':
application.run()

3.启动命令:

gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application

验证结果:

这时候通过命令请求url,可以看到响应结果。这样gunicorn就配置好了

curl http://127.0.0.1:8000 /users

  配置nginx: 

安装nginx:

yum -y install nginx

如果提示没有可用的软件包,解决办法:Centos 7下安装nginx,使用yum install nginx,提示没有可用的软件包

如果启动nginx失败,因为80端口号被占用,解决办法:centos7 ngxin启动失败:Job for nginx.service failed(80端口被占用的解决办法)

验证结果:

启动nginx后,打开浏览器输入http://10.2.1.92:8001(8001是nginx使用的端口)

看到如下界面,表示nginx环境搭建完毕

  配置使用nginx代理gunicorn服务

具体配置参照:gunicorn+nginx配置方法

验证结果:

验证结果前,要确保gunicorn是启动的

  配置supervisor管理gunicorn进程(启动|重启|关闭)

最后使用supervisor后台启动gunicorn进程,否则一关掉命令窗口,gunicorn进程也被杀死了,这当然不是大家希望看到的结果

supervisor的配置方法,参照supervisor的使用

验证结果:

通过supervisor启动gunicorn之后,关掉命令行窗口,注意器访问 A地址/路由地址(A地址是什么,参照上图),可以看到正确的响应结果,表示supervisor成功启动了gunicorn

这样nginx+gunicorn+supervisor布署flask项目就配置好了。

  配置项目更新,自动布署:

如果想要实现更新flask项目,自动布署,可以借助jenkins与gitlab的web-hook功能。

具体配置方法(只看前面与gitlab的配置即可,后面写的很乱,不用看):如何创建一个项目,让gitlab自动触发jenkins进行构建

验证结果:

在项目中新建1个测试文件:test.py,提交到仓库

在服务器~/.jenkins/workspace/job名称下查看,也存在test.py文件,即表示自动布署配置成功

具体的配置不太清楚时,可以看看这1篇,写的很乱,但可能会记录一些具体配置

【疑问】

为什么每次自动布署之后,请求接口请求到的内容还是之前的内容呢?

但是这样做之后,再更新接口,内容就更新过来了?(杀掉supervisor进程,再重启)

Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

centOS7 flask项目布署的更多相关文章

  1. flask环境布署--废弃不用,只留作备份

    [前置条件] 创建1个flask-demo,生成requirement.txt文件(下载好gunicorn),上传至git.创建demo参照:创建一个flask api-demo(响应体显示中文) g ...

  2. centos7使用wordpress布署网站(2)

    1.接下来需要配置数据库,为使用wordpress做准备 修改认证方式: vim .../phpMyAdmin/config.inc.php [...] $cfg['Servers'][$i]['au ...

  3. centos7使用wordpress布署网站(1)

    环境说明: 在同一台主机上实现LAMP(Linux + Apache + MariaDB + PHP)腾迅云主机CentOS 7.4.Apache .MariaDB .PHP 1.安装apache.m ...

  4. 部署Flask项目到腾讯云服务器CentOS7

    部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...

  5. CentOS7 Nodejs布署环境

    一.服务器设置:https://www.youtube.com/watch?v=1OU5ngq-WyM&list=PLQlWzK5tU-gDyxC1JTpyC2avvJlt3hrIh& ...

  6. 使用virtualenv, uwsgi, nginx来布署flask

    本文讲述了怎样使用virtualenv, uwsgi, nginx来布署flask的步骤. 升级软件包 运行下面命令,保证你的机器安装了最新的软件包. sudo apt-get update sudo ...

  7. 从pip+requirements.txt+virtualenv管理依赖到使用pipenv管理依赖-修改布署方式

    背景: 已经使用pip+requirements.txt+virtualenv管理了项目一段时间,为了不要每次都 导出依赖(本地),安装依赖(服务器) 现在要使用pipenv来管理项目的依赖关系 思路 ...

  8. 学习Linux系列--布署常用服务

    本系列文章记录了个人学习过程的点点滴滴. 回到目录 10.mediawiki 知名开源维基框架,我用来构建自己的知识库. 在mediawiki中新建一个http.conf文件 sudo vim /op ...

  9. vs调试windows mobile程序时布署时间太长的解决办法

    vs调试windows mobile程序时布署时间太长的解决办法 1.VS平台上,选工具-选项-项目和解决方案-MS BUILD项目生成输出详细信息中选择“诊断”,目的是在调试窗口中看出哪个过程编译的 ...

随机推荐

  1. mysql注入大全及防御

    0.明白存在的位置:get型 post型 cookie型 http头注入 1.先测试注入点,注册框.搜索框.地址栏啥的,判断是字符型,搜索型还是数字型 字符型 1' and '1'='1 成功, 1' ...

  2. 53道Java线程面试题

    53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...

  3. hier - 文件系统描述

    DESCRIPTION 描述 一个典型的Linux系统具有以下几个目录: / 根目录,是所有目录树开始的地方. /bin 此目录下包括了单用户方式及系统启动或修复所用到的所有执行程序. /boot 包 ...

  4. liunx weblogic服务启停脚本

    #!/bin/bash #sh xx.sh start xx项目 例如:sh autoWeblogic.sh start bius #经测试发现weblogic 启动大概需要完全启动成功35秒左右 停 ...

  5. Codeforces 967 贪心服务器分配资源 线性基XOR递增序列构造

    A #include<bits/stdc++.h> using namespace std; ][] = {{, -}, {, }, { -, }, {, }}; typedef long ...

  6. C语言实现栈代码

    /* 栈的特性:先进后出. 栈在计算语言处理和将递归算法改为非递归算法等方面起着非常重要的作用. */ #define INITSIZE 100 //储存空间的初始分配量 typedef int El ...

  7. sftp接口机上传脚本

    sftp只要有秘钥,就不需要输入密码. #!/bin/bash #上传现在时间的前一小时的文件 date=`date -d -1hour +%Y%m%d` hour=`date -d -1hour + ...

  8. 《Head First 软件开发》阅读四

    构建代码:自动化构建 代码的完成不只是能运行,还包括编译代码和打包成可配置的单元.学会一个构建工具来编写自己的说明处理源代码.新的团队成员需要立刻知道软件的关联组件和主要类去做测试,但开发人员不是心理 ...

  9. POJ-2762-Going from u to v or from v to u(强连通, 拓扑排序)

    链接: https://vjudge.net/problem/POJ-2762 题意: In order to make their sons brave, Jiajia and Wind take ...

  10. Java面试之持久层(10)

    91,什么是ORM?         对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术: 简单的说,O ...