← Назад к вопросам

Какие знаешь способы развернуть Flask-приложение для работы на сервере?

2.0 Middle🔥 251 комментариев
#DevOps и инфраструктура#FastAPI и Flask

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Способы развёртывания Flask-приложения на сервере

Существует несколько проверенных способов развернуть Flask-приложение для работы в боевых условиях. Flask сам по себе является лёгким и встроенный сервер не рекомендуется использовать в production.

1. Gunicorn (рекомендуемый вариант)

Gunicorn (Green Unicorn) — это популярный и надёжный WSGI HTTP сервер для Python приложений. Это классический выбор для Flask.

# requirements.txt
Flask==2.3.0
gunicorn==20.1.0

# Запуск
gunicorn -w 4 -b 0.0.0.0:8000 app:app

Параметры:

  • -w 4 — количество рабочих процессов (обычно 2×CPU + 1)
  • -b 0.0.0.0:8000 — адрес и порт прослушивания
  • app:app — модуль и переменная приложения

Преимущества:

  • Высокая производительность
  • Простая конфигурация
  • Хорошо интегрируется с Nginx
  • Поддержка горячей перезагрузки

2. uWSGI

универсальный WSGI сервер с более продвинутыми возможностями.

# Установка
pip install uwsgi

# Запуск
uwsgi --http :5000 --wsgi-file app.py --callable app --processes 4 --threads 2

Когда использовать: для сложных сценариев с пользовательскими параметрами.

3. Docker контейнеризация

Модерный способ развёртывания с гарантией одинакового окружения.

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]

Преимущества:

  • Изоляция окружения
  • Легкое масштабирование
  • Совместимость с оркестраторами (Kubernetes, Docker Compose)

4. Systemd сервис (Linux)

Для запуска приложения как сервиса в фоне.

# /etc/systemd/system/flask-app.service
[Unit]
Description=Flask Application
After=network.target

[Service]
User=www-data
WorkingDirectory=/var/www/flask-app
ExecStart=/usr/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl start flask-app
sudo systemctl enable flask-app

5. Nginx + Gunicorn (production setup)

Самая надёжная конфигурация для production.

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
}

6. AWS / облачные платформы

AWS Elastic Beanstalk — управляемый сервис с автоматическим масштабированием.

Heroku — просто деплой через git push (но платно).

Google Cloud Run — контейнеризованные приложения без управления серверами.

Рекомендуемый стек для production

Оптимальная конфигурация:

  1. Docker контейнер с Python приложением
  2. Gunicorn как WSGI сервер внутри контейнера (4-8 рабочих процессов)
  3. Nginx как reverse proxy и load balancer спереди
  4. Systemd или Docker Compose для управления процессами
  5. SSL/TLS через Let"s Encrypt для HTTPS

Для быстрого development:

  • Flask встроенный сервер (flask run) подходит только для разработки
  • Для локального тестирования используй Gunicorn

Важные моменты

  • Никогда не используй встроенный Flask сервер в production — он не масштабируется и небезопасен
  • Всегда запускай за reverse proxy (Nginx/Apache) для обработки HTTPS и статических файлов
  • Используй переменные окружения для конфигурации (database URL, API ключи)
  • Настрой логирование и мониторинг для отслеживания проблем
  • Используй процесс-менеджер (systemd, supervisor) для автоперезагрузки при падении
Какие знаешь способы развернуть Flask-приложение для работы на сервере? | PrepBro