将Flask应用程序部署到Google Compute Engine上
本文主要介绍如何构建一个Flask应用程序,并将其部署到最可靠的IaaS基础设施之一:Google Compute Engine。
我们将在谷歌云控制台中设置一个虚拟机,并将Flask应用部署到设置的机器上。此外,我们将指定运行我们应用程序的实例的数量,以尽量减少停机时间。最后,读者应该已经掌握了创建Flask应用程序并将其部署到远程虚拟机上的步骤。
前提条件
要跟上这篇文章,你需要具备以下条件。
- 使用Flask的基本技能。
- 谷歌云平台账户。
什么是Flask?
Flask是一个基于Python的后端引擎,用于在大多数Web应用程序中编写服务器端代码。Flask在Jinja模板引擎上运行,允许程序员编写类似于传统Python语法的代码。
根据维基百科,Flask成立于2010年4月,从那时起,大多数开发者都采用Flask并在项目中使用。
作为一个Flask爱好者,我喜欢用Flask开发我的应用程序,因为它的工作需要轻量级和独特的库和工具。
此外,Flask可以很容易地使用Python的广泛扩展,使其成为一个非常独立和可靠的技术栈。
基础设施即服务
基础设施即服务是基于云的计算,开发者可以获得云托管的硬件资源,而不是独立获取这些资源。
不幸的是,大多数计算硬件的购置成本很高,所以需要通过互联网提供。
有几个基础设施即服务(IaaS)供应商,包括数字海洋、亚马逊网络服务、Azure和谷歌计算引擎,但我们将在本文中探讨谷歌的。
使用IaaS的好处是资源池,每个人都可以获得大量的共享资源,否则他们是无法获得的。此外,通过策略,部署的系统是容错的,更多的用户得到支持。
谷歌计算引擎(GCE)
从其维基百科页面来看,谷歌计算引擎(GCE)是谷歌于2012年6月开发的基础设施即服务(IaaS)。目前,GCE运行谷歌的大部分应用程序,包括Gmail、YouTube和其搜索引擎。
IaaS允许人们创建一个虚拟机,根据应用程序的要求进行设置,并通过互联网进行托管,从而减少了人们暴露在硬件下的停机风险。
在谷歌云外壳上创建一个项目
谷歌提供的大多数服务都是使用API密钥来访问的,该密钥可以唯一地将一个用户与其他用户区分开来。出于同样的原因,我们需要创建一个新的项目,并拥有我们独特的API密钥来访问我们需要从谷歌获得的服务。
下一步是安装谷歌云软件开发工具包。然后,由于我们打算在创建和部署应用程序时使用gcloud命令行工具,我们需要打开谷歌云shell。

在云端shell终端,运行下面的命令来安装Flask。
pip install Flask
在接下来的步骤中,我们需要创建应用程序的主代码文件和requirements.txt 文件,以包含运行该应用程序所需的要求。
创建一个名为app.py 的文件,然后添加以下代码片段。
from flask import Flask, render_template
import Flask
app = Flask(__name__)
@app.route('/home')
def index():
return render_template('home.html')
if __name__ == '__main__':
app.run(debug=True)
按照惯例,Flask会在一个有特定名称的文件夹中寻找视图文件。所以我们需要创建一个名字为templates 的文件夹,并以同样的理由添加我们的视图文件。
在templates 文件夹中,创建一个新文件并命名为home.html 。这个文件包含了在我们的应用程序的主页上呈现的代码片断。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RUNNING FLASK ON GCE</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="jumbotron text-center">
<h2>FLASK APPLICATION RUNNING ON GCE</h4>
<p>Conventionally, Flask looks for view files in a folder with specific name. For the same reason we need to create a folder with the `templates` name and add our view files. In the `templates` folder, create a new file and name it `home.html`. This file contains the code snippets rendered on the homepage of our application.
</p>
</div>
</div>
</body>
</html>
为了设置一旦我们将应用程序迁移到虚拟机上就会安装的要求,创建一个名为requirements.txt 的新文件,然后添加以下代码片段。
Flask
gunicorn

防火墙规则配置
导航到网络组⇾VPC网络⇾选择防火墙。这个页面列出了为当前项目设置的所有防火墙规则。
在这一步,我们将配置一个新的规则,允许流量通过8080端口。首先,点击CREATE FIREWALL BUTTON ,然后填写下面的细节。
- 名称:allow-http-8080
- 目标:指定的目标标签
- 目标标签:http-server-8080
- 来源-ip:0.0.0.0/0
- TCP:8080
创建一个虚拟机
虚拟机是一个计算机系统的模拟。同样,虚拟机提供了计算机的功能,但在这种情况下,用户不需要从物理上获得计算机的硬件资源。
就像我们在开发过程中通常在本地运行我们的应用程序一样,虚拟机将在互联网上运行该应用程序。
我们需要设置一个虚拟机来托管我们的应用程序,并从我的终端远程运行它。谷歌为虚拟机提供了一系列的配置。我们将使用这些配置中的一种,为应用程序设置一个虚拟机。
要创建一个虚拟机,进入导航菜单⇾计算引擎⇾虚拟机实例⇾创建实例。

你可以填写下面的字段,并确保你展开网络标签,在Networking tags 字段上填写创建防火墙规则时指定的标签名称。

这些配置可能因项目不同而不同。因此,人们只能选择根据他们要部署的项目来设置虚拟机。

为部署设置虚拟机
设置虚拟机包括在虚拟机中安装所有的应用程序依赖。
例如,我们正在运行一个flask应用程序,这意味着我们需要拥有所有的软件,以及设置和运行flask应用程序所需的框架,就像我们在使用物理计算机时那样。
对于我们的情况,我们将登录到虚拟机,更新系统,升级可用的可升级依赖,安装python和虚拟环境,并获取最新版本的更新。
我更喜欢从谷歌云的shell登录,因为这将使我们能够轻松地将我们从shell创建的应用程序复制到虚拟机上。
-
前往云端shell执行命令。
gcloud compute ssh flask-app --zone us-central1-a你可以根据创建虚拟机时指定的离你最近的地方来改变区域。
-
下一步是更新Debian软件包列表。
sudo apt update -
使用命令升级可升级的依赖项。
sudo apt upgrade -
使用命令安装所需的依赖项。
apt-get install Python Python3-pip pip install --upgrade pip virtualenv -
使用CRTL+D注销虚拟机以进入Google cloud shell。
将文件复制到虚拟机上
此刻,我们的文件正漂浮在Google Cloud shell上的某个地方。因此,我们需要做的最直接的事情是将文件从谷歌云外壳迁移到新创建的虚拟机上。
幸运的是,谷歌为我们提供了一个单一的命令,可以递归地将所有的文件从云外壳复制到虚拟机上。因此,我们只需要指定部署的运行实例设计。
在这一步,我们要把所有的项目文件复制到虚拟机上进行部署。就像在本地机器中一样,虚拟机需要设置并拥有我们在云外壳中创建的所有文件来运行应用程序。
接下来,CD 在父目录下,然后将所有应用程序的文件复制到虚拟机上。
gcloud compute scp --recurse flask-app lab1: --zone us-central1-a
部署应用程序
部署是我们需要执行的最后一步,以便我们的应用程序能够运行。因此,我们首先登录到虚拟机,并导航到我们的应用程序文件夹。
在应用程序文件夹中,我们在requirement.txt文件中列出了需要的要求。接下来,我们将调用pip来安装文件中的依赖项,然后在虚拟机的localhost中试运行应用程序。
-
前往Google Cloud Shell,然后使用命令
ssh进入虚拟机。gcloud compute ssh flask-app --zone us-central1-a -
改变目录,进入应用程序的文件夹。
cd flask-app -
安装所需的Flask依赖项。
pip install requirements.txt -
使用下面的命令运行应用程序。
set FLASK_APP='app.py' flask run -p 5000
成功地按照步骤操作后,你应该暴露出网址并通过浏览器查看应用程序。可以做进一步的配置,将URL映射到一个自定义域。
总结
大多数开发者都在使用Google Compute Engine来托管他们的应用程序,赌的是可靠性和效率。通过这篇文章,知道如何将Flask应用部署到这个平台上,是任何程序员都能承受的优势。
这篇文章讨论了将Flask应用程序部署到GCE的一个逐步过程。首先,我们使用Flask框架开发了一个应用程序,并将其部署到计算引擎。
这个过程应该能让读者深入了解基础设施即服务,并改变托管网络应用的思维动态。
进一步阅读
这个概念并没有到此为止。读者应该学会使用围绕移动和网络开发的其他技术栈进行开发和部署。