Веб

Открыть Flask dev сервер для LAN (host 0.0.0.0 и firewall)

Запустите Flask с host=0.0.0.0, откройте порт 5000 в брандмауэре и настройте переменные окружения или Docker. Доступ через <IP>:5000 с любого устройства в сети.

Как сделать сервер разработки Flask доступным с других машин в сети?
Сейчас, когда я запускаю приложение в режиме разработки, оно открывается только по адресу http://localhost:5000, поэтому с другого устройства я к нему не могу подключиться. Хочу обращаться к нему по http://[ip‑устройства]:5000. Какие настройки или параметры командной строки нужно задать, чтобы включить сетевой доступ?

The Flask dev server binds to 127.0.0.1 by default, so it only listens on the local machine. To expose it on your network, just tell Flask to listen on all interfaces and ensure the firewall allows traffic on the port you pick.


Contents


Запуск Flask с host=0.0.0.0

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

python
# app.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from the dev server!"

if __name__ == "__main__":
    # Listen on all interfaces, port 5000
    app.run(host="0.0.0.0", port=5000, debug=True)

Запустив python app.py, вы увидите:

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Другие устройства в той же локальной сети могут подключиться, открыв http://<dev‑host‑ip>:5000.


Параметры командной строки

Если предпочитаете использовать CLI flask, просто передайте тот же аргумент:

bash
# Сначала активируйте окружение
export FLASK_APP=app.py
flask run --host=0.0.0.0 --port=5000

По официальной документации Flask, добавление --host=0.0.0.0 делает сервер видимым в сети.
Flask Quickstart


Использование переменных окружения

Можно избежать правки кода или командной строки, установив переменные окружения:

Переменная Значение Пример
FLASK_RUN_HOST Хост для привязки export FLASK_RUN_HOST=0.0.0.0
FLASK_RUN_PORT Порт прослушивания export FLASK_RUN_PORT=5000
bash
export FLASK_APP=app.py
export FLASK_RUN_HOST=0.0.0.0
export FLASK_RUN_PORT=5000
flask run

Такой подход удобен для CI/CD пайплайнов или Dockerfile.
Stack Overflow discussion


Открытие порта в файрволах

Даже если Flask слушает 0.0.0.0, ОС‑файрвол может всё равно блокировать входящий трафик.

Linux (UFW)

bash
sudo ufw allow 5000/tcp
sudo ufw reload

Windows

  1. Откройте Windows Defender Firewall with Advanced Security.
  2. Создайте новое Inbound Rule → Port → TCP → Specific local ports: 5000.
  3. Разрешите соединение для всех профилей.

После открытия порта проверьте связь, пинганием IP сервера с другого устройства и открытием http://<dev‑host‑ip>:5000.
Ask Ubuntu guide


Запуск внутри Docker

Когда приложение Flask работает в контейнере, нужно сопоставить порт контейнера с хостом:

Dockerfile
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
bash
docker build -t flask-dev .
docker run --rm -p 5000:5000 flask-dev

Теперь любой узел, который может достичь хоста по порту 5000, увидит Flask‑приложение.

Модуль сети Docker использует 0.0.0.0 внутри контейнера для экспонирования сервисов.
Reddit discussion on Docker


Проблемы безопасности

Разработческий сервер Flask не предназначен для продакшена.

  • Оставляйте debug=True только в доверенных сетях.
  • При публичном развертывании лучше использовать легковесный продакшн‑сервер (Gunicorn, uWSGI) за обратным прокси.

Расширение доступности dev‑сервера может привести к случайным утечкам данных или атакам отказа в обслуживании.
Sentry guidance on dev server visibility


Вывод

  • Привяжите Flask к всем интерфейсам, используя host="0.0.0.0" в app.run() или flask run --host=0.0.0.0.
  • Убедитесь, что файрвол пропускает трафик на выбранный порт (по умолчанию 5000).
  • При работе в Docker сопоставьте порт контейнера с хостом.
  • Помните, что dev‑сервер подходит только для локальных или доверенных сетей; для публичного доступа переключитесь на продакшн‑сервер.

Следуя этим шагам, вы сможете открыть свой Flask‑приложение с любого устройства в той же локальной сети через http://<dev‑host‑ip>:5000.


Источники

  1. Configure Flask dev server to be visible across the network – Stack Overflow
  2. Flask Quickstart – Official Documentation
  3. What does app.run(host=‘0.0.0.0’) mean in Flask – Stack Overflow
  4. Explain command —-flask run — host=0.0.0.0 – Medium
  5. How to allow remote connections to Flask? – Ask Ubuntu
  6. Docker and host 0.0.0.0 in Flask – Reddit
  7. Sentry: Configure Flask Dev Server to be Visible Across the Network
Авторы
Проверено модерацией
Модерация