Вот мои теории:
- localhost (
127.0.0.1
) используется; следует использовать 0.0.0.0
- Используется внутренний WSGI-сервер Flask; следует использовать, например, Gunicorn
NB Вы можете разрабатывать и тестировать эти решения с помощью Cloud Shell. Cloud Shell (сейчас) включает в себя веб-предварительный просмотр , который позволяет просматривать конечные точки (включая :8080
) для серверов, работающих на экземпляре Cloud Shell.
Настой
Flask включает сервер разработки (WSGI), а учебные пособия обычно включают:
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)
Который, если запускать как python somefile.py
, будет использовать встроенный (dev) сервер Flask и выставлять его на localhost (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
Если вместо этого используется 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 -
например. Gunicorn
Встроенный сервер 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
App Engine Flex
При использовании рекомендуемой конфигурации app.yaml будет включать в себя:
runtime: python
env: flex
entrypoint: gunicorn --bind:$PORT main:app
Dockerfiles
Вы можете протестировать их локально с помощью Dockerfiles и - при желании - развернуть их во Flex в качестве пользовательских сред выполнения (после изменения app.yaml
):
FROM python:3.7-alpine
WORKDIR /app
ADD . .
RUN pip install -r requirements.txt
Для колб добавить:
ENTRYPOINT ["python","main.py"]
NB Как указано выше, конфигурация получается из файла somefile.py app.run(...)
А для огнестрельного оружия:
ENTRYPOINT ["gunicorn","--bind=0.0.0.0:8080","main:app"]