Google Compute Engine - 保持简单Web服务的正常运行(Flask / Python + Firebase + Google Compute)

时间:2018-01-30 14:37:16

标签: web-services flask google-cloud-platform google-compute-engine

我创建了一个简单的Web应用程序,如this tutorial中所述,并使用Google的计算引擎将其托管在Linux VM上。

不幸的是,当我在烧瓶应用程序后关闭SSH连接时,外部IP地址和功能不会持续存在。

只要我的虚拟机启动并运行,如何让它保持正常运行?这是应用程序位于我的虚拟机中的问题(例如:www /文件夹vs / user /文件夹)?

3 个答案:

答案 0 :(得分:2)

您需要在后台流程或screentmux中运行该应用。这是good primer

有关如何使用屏幕的详细信息,请查看this文章。

此外,您还可以查看有关类似问题的this讨论。

答案 1 :(得分:2)

这是因为您以用户身份运行。关闭ssh连接几分钟后,您的会话将关闭,进程将被终止。您可以使用启动脚本(https://cloud.google.com/compute/docs/startupscript#startupscriptrunninginstances)或以root身份启动cron作业来运行它。

答案 2 :(得分:2)

上面的答案都很棒并且都有效。对于下一个对VM / Google Compute / Cloud来说相对较新的人来说,这就是我使用screen的方式。我认为这是最简单/最好的解决方案,只需学习/快速站起来。

进入虚拟机后,首先要创建一个屏幕。

screen -S <screen name>

在我的情况下,我使用了

screen -S one

现在您的终端很可能会在屏幕上清除,这是同一个虚拟机上的新进程窗口。这是我们可以运行烧瓶代码的地方。

现在实现你的烧瓶/网络服务器代码/无论如何。

export FLASK_APP=main.py
flask run

现在我可以点击弹出的网络服务器链接。现在你可以关闭这个终端/终止我的ssh连接,网络应用程序仍然有效。

下次我ssh in我可以简单地使用screen -ls来显示我的可用屏幕列表。它还会显示屏幕的状态。

googleUserName@one:~$ screen -ls
There is a screen on:
        761.one (02/01/2018 06:58:56 PM)        (Detached)

现在我可以重新连接到它,我只需使用-r指定屏幕即可重新连接。

screen -r <screen name>

就我而言

screen -r one

当我重新连接时,我的网络服务器仍在运行并显示我所有的输出和流量,我希望好像我从未关闭它。

现在,如果您想在屏幕和正常的ssh连接之间来回跳转,可以从中分离-d。 (在这种情况下,您不必指定屏幕名称,在我的情况下,因为您当前在屏幕上,并且将从当前分离。

screen -d

一些结束语......

我不知道你是否可以在屏幕上创建一个屏幕。

我不知道这个解决方案有多可持续/如果推荐的话。但是屏幕适用于我的用例。

这是我在main.py烧瓶应用程序中运行的代码。

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

你可以找到它here

我使用谷歌计算引擎,设置和网络服务器开始的教程是here