Aar*_*nDT 8 python google-app-engine nginx flask google-cloud-platform
我在Google Cloud App Engine(flex)上运行Flask应用.在本地运行它可以正常工作,但一旦它部署我得到一个502 Bad Gateway error (nginx).现在我想弄清楚导致这种情况的原因,但我找不到任何选项来查看我的应用程序创建的控制台日志.
由于它在我的本地环境中运行良好,我当前解决此问题的工作流程涉及在本地更改我的代码并部署它以查看它是否可以在以后工作,但每次部署只需要花费30分钟才能确定它仍然无效.必须有一种方法可以更有效地做到这一点.
按照文档https://cloud.google.com/appengine/docs/flexible/python/debugging-an-instance 我能够以调试模式SSH进入我的实例并从Cloud Shell启动Flask应用程序,但是它告诉我在http://127.0.0.1:8080/上访问它,我无法从云服务器访问它.因此,我无法浏览网页以重现502错误,然后在控制台中查看输出.
如何找出导致服务器上的502错误的原因?
小智 6
有类似的问题。发现应用程序引擎在 main.py 文件中查找应用程序变量。我的最终 app.yaml 如下所示。
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3
Run Code Online (Sandbox Code Playgroud)
并且有requirements.txt,如下所示。
Flask==1.1.1
gunicorn==20.0.4
Run Code Online (Sandbox Code Playgroud)
这是我的理论:
127.0.0.1) 正在使用;应该使用0.0.0.0注意:您可以使用 Cloud Shell 开发和测试这些解决方案。Cloud Shell(现在)包含Web 预览功能,允许浏览:8080在 Cloud Shell 实例上运行的服务器的端点(包括 )。
Flask 包含一个开发 (WSGI) 服务器,教程通常包括:
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
Run Code Online (Sandbox Code Playgroud)
如果运行的话,python somefile.py将使用 Flask 的内置(开发)服务器并将其公开在本地主机(127.0.0.1)上。
这是其他机器无法访问的:
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 244-629-469
Run Code Online (Sandbox Code Playgroud)
如果相反,host='0.0.0.0'使用,那么这将起作用:
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 244-629-469
192.168.9.1 - - [08/May/2019 23:59:59] "GET / HTTP/1.1" 200 -
192.168.9.1 - - [08/May/2019 23:59:59] "GET /favicon.ico HTTP/1.1" 404 -
Run Code Online (Sandbox Code Playgroud)
不应使用 Flask 的内置服务器,Flex 的文档描述了如何使用gunicorn(各种替代方案之一)进行配置:
https://cloud.google.com/appengine/docs/flexible/python/runtime#application_startup
如果运行gunicorn --bind=0.0.0.0:8080 main:app会给出:
[INFO] Starting gunicorn 19.9.0
[INFO] Listening at: http://0.0.0.0:8080 (1)
[INFO] Using worker: sync
[INFO] Booting worker with pid: 7
Run Code Online (Sandbox Code Playgroud)
使用推荐的配置,app.yaml 将包括:
runtime: python
env: flex
entrypoint: gunicorn --bind:$PORT main:app
Run Code Online (Sandbox Code Playgroud)
您可以使用 Dockerfiles 在本地测试它们,并且如果您愿意,可以将它们作为自定义运行时部署到 Flex(修改后app.yaml):
FROM python:3.7-alpine
WORKDIR /app
ADD . .
RUN pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
对于烧瓶添加:
ENTRYPOINT ["python","main.py"]
Run Code Online (Sandbox Code Playgroud)
注意:在上面,配置结果来自于 somefile.pyapp.run(...)
对于枪角兽:
ENTRYPOINT ["gunicorn","--bind=0.0.0.0:8080","main:app"]
Run Code Online (Sandbox Code Playgroud)