Применение колбы не может быть выставлено на капли - PullRequest
0 голосов
/ 05 июля 2018

Я развертываю флеш-сервер для капли Digital Ocean.

from flask import Flask

app = Flask(__name__)

@app.route("/a/<string:b>")
def deploy(b):
    return "Response"

Используя следующую команду:

FLASK_APP=server.py python -m flask run --host=0.0.0.0 --port=5555

Когда я развертываю приложение локально, я могу получить ответ, выполнив

curl -XGET localhost:5555/a/random

При развертывании на капле она работает внутренне, но при внешнем вызове капли (несмотря на то, что на TCP открыт порт 5555) она не подключается.

Что могло измениться? Я также развертываю флеш-сервер Graphql на той же капле через докер, который отлично работает.

Ответы [ 2 ]

0 голосов
/ 25 июля 2018

Flask по умолчанию принимает соединения от localhost.

Чтобы сделать приложение Flask общедоступным, необходимо привязать его к адресу 0.0.0.0, добавив параметр --host=0.0.0.0.

Внешний видимый сервер

Если вы запустите сервер, вы заметите, что сервер доступен только с вашего компьютера, а не с любого другие в сети. Это значение по умолчанию, потому что в режиме отладки Пользователь приложения может выполнить произвольный код Python на вашем компьютер.

Если у вас отключен отладчик или вы доверяете пользователям вашей сети, вы можете сделать сервер общедоступным, просто добавив --host = 0.0.0.0 в командную строку:

flask run --host = 0.0.0.0 Это говорит вашей операционной системе о необходимости прослушивания все публичные IP-адреса.

0 голосов
/ 23 июля 2018

Это возможно распространенная проблема при использовании VPS. Такие люди, как я, часто забывают настроить firewall (s), если коды верны.

Вы упомянули, что это работает локально, но не внешне. Я думаю, это должно быть.

Цифровой уровень океана:

  • Добавить входящий TCP-порт 5555 в настройках брандмауэра для дроплетов

Системный уровень

  • iptables: например, iptables -A INPUT -p tcp -dport 5555 -j ACCEPT
  • firewalld: например, firewall-cmd --permanent --zone=public --add-port=5555/tcp

Или вы можете отключить брандмауэры ОС с помощью systemctl stop [service-name] или service [service-name] stop. Вы можете погуглить команды.

...