Настройте сервер Flask dev, чтобы он был виден через сеть - PullRequest
336 голосов
/ 11 августа 2011

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

Ответы [ 11 ]

572 голосов
/ 11 августа 2011

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


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

Задокументировано на сайте Flask в разделе "Внешний видимый сервер" на странице быстрого запуска :

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

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

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

app.run(host='0.0.0.0')

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

87 голосов
/ 29 октября 2016

Если вы используете исполняемый файл фляги для запуска сервера, вы можете использовать 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/

17 голосов
/ 07 мая 2015

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

cool.app.run(
    host=cool.app.config.get("HOST", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            
14 голосов
/ 04 января 2018

Добавьте строки ниже к вашему проекту

if __name__ == '__main__':
    app.debug = True
    app.run(host = '0.0.0.0',port=5005)
6 голосов
/ 01 сентября 2018

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

в дистрибутиве 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
2 голосов
/ 04 июня 2019

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

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

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

Шаги

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

IPv4 (Windows)

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

Теперь просто запустите приложение фляги с полученным 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.?

2 голосов
/ 04 июля 2018

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

Config Python Server PyCharm в основном то, что я сделал, было создать новый сервер, но колбу, если не Python

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

1 голос
/ 24 марта 2019

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

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

Сегодня я запускаю свое приложение фляги как обычно, но я заметил, что оно не может подключиться с другого сервера. Затем я запускаю 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 section, я мог увидеть несколько правил:

iptables list result

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

0 голосов
/ 26 июня 2019

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

set FLASK_APP = ABC.py

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

Колба запустить -h [yourIP] -p 8080

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

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

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

0 голосов
/ 26 июня 2019

перейти к пути проекта set FLASK_APP = ABC.py SET FLASK_ENV = разработка

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

...