Настроить сервер флагов, чтобы быть видимым по сети

Я не уверен, что это флажок, но когда я запускаю приложение в режиме dev (http://localhost:5000), я не могу получить доступ к нему с других компьютеров в сети (с помощью http://[dev-host-ip]:5000). Например, с Rails в режиме dev он работает нормально. Я не мог найти никаких документов относительно конфигурации сервера Flask dev. Любая идея, что должно быть настроено для этого?

Ответ 1

В то время как это возможно, вы не должны использовать сервер Flask dev в производстве. Сервер Flask dev не разработан, чтобы быть особенно безопасным, стабильным или эффективным. Для правильных решений см. Документы deploying.


Добавьте параметр app.run(). По умолчанию он запускается на локальном хосте, меняет его на app.run(host= '0.0.0.0') для запуска на вашем компьютере IP-адрес.

Документировано на сайте Flask в разделе "Внешне видимый сервер" на странице Быстрый старт:

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

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

Просто измените вызов метода run(), чтобы он выглядел следующим образом:

app.run(host='0.0.0.0')

Это означает, что ваша операционная система прослушивает общедоступный IP-адрес.

Ответ 2

Если вы используете исполняемую флэшку для запуска вашего сервера, вы можете использовать flask run --host=0.0.0.0, чтобы изменить значение по умолчанию от 127.0.0.1 и открыть его для не локальных подключений. Способы config и app.run, которые описывают другие ответы, вероятно, являются лучшей практикой, но это также может быть удобно.

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

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

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

Ссылка: http://flask.pocoo.org/docs/0.11/quickstart/

Ответ 3

Если ваше приложение cool имеет конфигурацию, загруженную из внешнего файла, как в следующем примере, не забудьте обновить соответствующий файл конфигурации с помощью HOST = "0.0.0.0"

cool.app.run(
    host=cool.app.config.get("HOST", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            

Ответ 4

Добавьте ниже строки в свой проект

if __name__ == '__main__':
    app.debug = True
    app.run(host = '0.0.0.0',port=5005)

Ответ 5

Проверьте, открыт ли конкретный порт на сервере для обслуживания клиента или нет?

в дистрибутиве Ubuntu или Linux

sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000

Настроить приложение для обработки удаленных запросов

app.run(host='0.0.0.0' , port=5000)


python3 app.py & #run application in background

Ответ 6

Попробуйте, если метод 0.0.0.0 не работает

Скучный материал

Я лично много боролся за то, чтобы сделать мое приложение доступным для других устройств (ноутбуков и мобильных телефонов) через локальный сервер. Я попробовал метод 0.0.0.0, но не повезло. Затем я попытался изменить порт, но он просто не работал. Поэтому, попробовав несколько разных комбинаций, я пришел к этому, и это решило мою проблему развертывания моего приложения на локальном сервере.

шаги

  1. Получите локальный IPv4-адрес вашего компьютера. Это можно сделать, набрав ipconfig в Windows и ifconfig в Linux и Mac.

IPv4 (Windows)

Обратите внимание: вышеуказанный шаг должен выполняться на компьютере, на котором вы запускаете приложение, а не на компьютере, к которому вы обращаетесь к нему. Также обратите внимание, что адрес IPv4 может измениться, если вы отключитесь и подключитесь к сети.

  1. Теперь просто запустите приложение фляги с полученным IPv4-адресом.

    flask run -h 192.168.X.X

    Например. В моем случае (см. изображение) я запустил его как:

    flask run -h 192.168.1.100

running the flask app

На моем мобильном устройстве

screenshot from my mobile phone

Дополнительный материал

Если вы выполняете эту процедуру в Windows и используете Power Shell в качестве интерфейса командной строки и по-прежнему не можете получить доступ к веб-сайту, попробуйте команду CTRL + C в оболочке, в которой выполняется приложение. Power Shell иногда зависает, и для его восстановления требуется щепотка. Это может даже привести к остановке сервера, но иногда это помогает.

Это. Поднимите палец вверх, если вы нашли это полезным.

Еще несколько дополнительных вещей

Я создал короткий сценарий Powershell, который будет сообщать вам ваш IP-адрес всякий раз, когда он вам нужен:

$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
    if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
        $ipv4 = $matches[1]
    }
}
echo $ipv4

Сохраните его в файл с расширением .ps1 (для PowerShell) и запустите его перед запуском приложения. Вы можете сохранить его в папке проекта и запустить как:

.\getIP.ps1; flask run -h $ipv4

Примечание. Я сохранил приведенный выше код оболочки в getIP.ps1.

Cool.👌

Ответ 7

У меня была та же проблема, я использую PyCharm в качестве редактора, и когда я создал проект, PyCharm создал Flask Server. То, что я сделал, это создать сервер с Python следующим образом;

Config Python Server PyCharm в основном то, что я сделал, это создать новый сервер, но фляж, если не python

Надеюсь, это поможет вам

Ответ 8

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

  1. использовать netstat -ano | grep <port> netstat -ano | grep <port> чтобы увидеть, является ли адрес 0.0.0.0 или ::. Если это 127.0.0.1, то это только для локальных запросов.
  2. используйте tcpdump, чтобы увидеть, отсутствует ли какой-либо пакет. Если он показывает очевидный дисбаланс, проверьте правила маршрутизации с помощью iptables.

Сегодня я запускаю свое приложение фляги как обычно, но я заметил, что оно не может подключиться с другого сервера. Затем я запускаю netstat -ano | grep <port> netstat -ano | grep <port>, и локальный адрес: :: или 0.0.0.0 (я пробовал оба, и я знаю, что 127.0.0.1 разрешает соединение только с локального хоста). Затем я использовал telnet host port, в результате получается connect to... Это очень странно. Тогда я подумал, что лучше проверить это с помощью tcpdump -i any port <port> -w w.pcap. И я заметил, что все это так:

tcpdump result shows it there is only SYN packets from remote host

Затем, проверив iptables --list OUTPUT, я увидел несколько правил:

iptables list result

эти правила запрещают выводить tcp жизненно важные пакеты при установлении связи. Удалив их, проблема исчезла.

Ответ 9

Если у вас возникли проблемы с доступом к серверу Flask, развернутому с помощью PyCharm, примите во внимание следующее:

PyCharm не запускает ваш основной файл .py напрямую, поэтому любой код в if __name__ == '__main__': не будет выполнен, и любые изменения (например, app.run(host='0.0.0.0', port=5000)) не вступят в силу.

Вместо этого вы должны сконфигурировать сервер Flask, используя Run Configurations, в частности, поместив --host 0.0.0.0 --port 5000 в поле дополнительных параметров.

Run cofigurations of Flask server PyCharm

Подробнее о настройке сервера Flask в PyCharm

Ответ 10

перейти к пути проекта, установленному FLASK_APP = ABC.py SET FLASK_ENV = разработка

При запуске колбы -h [yourIP] -p 8080 вы будете выполнять следующие действия в CMD: - * Обслуживание приложения Flask "expirement.py" (отложенная загрузка) * Среда: разработка * Режим отладки: включено * Перезапуск со статом * Отладчик активен! * PIN-код отладчика: 199-519-700 * Работает на http://[yourIP]: 8080/ (нажмите CTRL + C, чтобы выйти)

Ответ 11

Перейдите к пути вашего проекта в CMD (командная строка) и выполните следующую команду: -

set FLASK_APP = ABC.py

SET FLASK_ENV = разработка

колба работает -h [yourIP] -p 8080

Вы получите следующие o/p на CMD: -

  • Приложение для сервировки Flask "expirement.py" (отложенная загрузка)
    • Окружающая среда: развитие
    • Режим отладки: вкл
    • Перезапуск со статом
    • Отладчик активен!
    • PIN-код отладчика: 199-519-700
    • Запуск по http://[yourIP]: 8080/ (нажмите CTRL + C, чтобы выйти)

Теперь вы можете получить доступ к своему приложению фляги на другом компьютере, используя http://[yourIP]: 8080/ url

Ответ 12

В дополнение к ответу @Shawn есть также встроенная переменная конфигурации SERVER_NAME. мы можем установить значение 0.0.0.0 в файле конфигурации, который вы указываете в app.config.from_pyfile ("config.py"). Также обратите внимание, что это переопределит имя хоста app.run.
 Ссылка: http://flask.pocoo.org/docs/0.10/config/