Home » Запуск Flask-приложений с Gunicorn и Nginx на Ubuntu 24.04
Запуск Flask-приложений с Gunicorn и Nginx на Ubuntu 24.04

Запуск Flask-приложений с Gunicorn и Nginx на Ubuntu 24.04

В этой статье разберёмся, как быстро и без боли развернуть Flask-приложение на Ubuntu 24.04 с помощью связки Gunicorn и Nginx. Почему это важно? Flask — один из самых популярных Python-фреймворков для веба, а Gunicorn и Nginx — проверенные временем инструменты для продакшн-развёртывания. Если вы когда-либо пытались запускать Flask через встроенный сервер, то знаете: для реального трафика этого мало. Здесь вы найдёте не только пошаговую инструкцию, но и разбор, почему всё устроено именно так, как это работает под капотом, и какие грабли можно встретить на пути. Будет и немного гиковских лайфхаков, и сравнения с альтернативами. Всё, чтобы вы могли быстро поднять свой проект и не тратить часы на гугление и отладку.

Как это работает: архитектура и взаимодействие компонентов

Давайте разложим по полочкам, что происходит, когда вы запускаете Flask-приложение в продакшене. Flask — это микрофреймворк, и его встроенный сервер (Werkzeug) не предназначен для работы под нагрузкой. Он хорош для разработки, но не для продакшна: нет поддержки многопоточности, нет защиты от DoS, нет graceful reload. Поэтому на передний план выходит Gunicorn — WSGI-сервер, который умеет запускать несколько воркеров, обрабатывать множество запросов параллельно и вообще вести себя как взрослый.

Но и Gunicorn — не серебряная пуля. Он не умеет отдавать статику (картинки, CSS, JS) быстро и безопасно, не занимается SSL-терминацией, не умеет балансировать нагрузку между несколькими приложениями. Для этого нужен фронтенд-прокси — и тут появляется Nginx. Он принимает все входящие запросы, раздаёт статику, занимается SSL, а запросы к вашему приложению прокидывает на Gunicorn через сокет или порт.

  • Flask — бизнес-логика, API, обработка данных.
  • Gunicorn — WSGI-сервер, запускает Flask, управляет воркерами.
  • Nginx — фронтенд-прокси, SSL, отдача статики, балансировка.

В итоге получаем надёжную, масштабируемую и быструю схему, которую используют тысячи проектов — от pet-проектов до крупных SaaS.

Как быстро и просто всё настроить: пошаговая инструкция

Переходим к практике. Всё ниже — для Ubuntu 24.04 (но подойдёт и для 22.04, 20.04 с минимальными изменениями). Предполагается, что у вас уже есть VPS или выделенный сервер (если нет — заказать VPS или выделенный сервер).

  1. Установка Python, pip, venv


    sudo apt update
    sudo apt install python3 python3-pip python3-venv -y
  2. Создание виртуального окружения и установка зависимостей


    python3 -m venv venv
    source venv/bin/activate
    pip install flask gunicorn
  3. Создаём простое Flask-приложение


    cat > app.py <<EOF
    from flask import Flask
    app = Flask(__name__)
    @app.route("/")
    def hello():
    return "Hello, Flask on Gunicorn!"
    EOF
  4. Проверяем запуск через Gunicorn


    gunicorn --bind 0.0.0.0:8000 app:app


    Откройте http://your_server_ip:8000 — должно работать.
  5. Настраиваем systemd для автозапуска Gunicorn


    sudo nano /etc/systemd/system/gunicorn.service


    Вставьте:

    [Unit]
    Description=gunicorn daemon
    After=network.target
    
    [Service]
    User=ubuntu
    Group=www-data
    WorkingDirectory=/home/ubuntu/your_project_folder
    Environment="PATH=/home/ubuntu/your_project_folder/venv/bin"
    ExecStart=/home/ubuntu/your_project_folder/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/your_project_folder/gunicorn.sock app:app
    
    [Install]
    WantedBy=multi-user.target
        


    sudo systemctl daemon-reload
    sudo systemctl start gunicorn
    sudo systemctl enable gunicorn
    sudo systemctl status gunicorn

  6. Установка и настройка Nginx


    sudo apt install nginx -y



    sudo nano /etc/nginx/sites-available/flask


    Пример конфига:

    server {
        listen 80;
        server_name your_domain_or_ip;
    
        location / {
            proxy_pass http://unix:/home/ubuntu/your_project_folder/gunicorn.sock;
            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;
        }
    
        location /static {
            alias /home/ubuntu/your_project_folder/static;
        }
    }
        


    sudo ln -s /etc/nginx/sites-available/flask /etc/nginx/sites-enabled/
    sudo nginx -t
    sudo systemctl restart nginx

  7. Проверяем работу

    Откройте http://your_domain_or_ip — должно работать через Nginx.

Примеры, схемы, практические советы

  • Положительный кейс: Flask-приложение на Gunicorn + Nginx выдерживает 1000+ одновременных соединений без падений, статика отдаётся мгновенно, SSL работает из коробки.
  • Отрицательный кейс: Flask на встроенном сервере — при 50+ соединениях начинает тормозить, возможны падения, нет логирования ошибок, нет graceful reload.
Схема Плюсы Минусы Когда использовать
Flask (встроенный сервер) Быстро для разработки, минимум настроек Нет продакшн-фич, низкая производительность, нет безопасности Только для локальной разработки
Flask + Gunicorn Многопроцессность, стабильность, логирование Нет SSL, плохо отдаёт статику API, внутренние сервисы без SSL/статики
Flask + Gunicorn + Nginx SSL, отдача статики, балансировка, безопасность Чуть сложнее настройка Продакшн, публичные сервисы

Похожие решения, альтернативы и утилиты

  • uWSGI — альтернатива Gunicorn, чуть сложнее в настройке, но гибче. Документация
  • Waitress — простой WSGI-сервер для Windows и Linux. Документация
  • Apache + mod_wsgi — старый добрый Apache, но сложнее и тяжелее, чем Nginx.
  • Docker — можно завернуть всё в контейнеры, но это отдельная тема.
  • supervisor — для управления процессами, если не хочется systemd.

Статистика и сравнение с другими решениями

  • Gunicorn + Nginx — стандарт де-факто для Python-приложений, используется в 70% продакшн-проектов (по опросам Stack Overflow и Python Software Foundation).
  • uWSGI — чуть менее популярен, но часто используется в крупных проектах с кастомными настройками.
  • Waitress — выбор для простых проектов и Windows-серверов.
  • Flask + встроенный сервер — только для разработки, не рекомендуется для продакшна.

Интересные факты и нестандартные способы использования

  • Gunicorn поддерживает hot reload воркеров без остановки сервиса — удобно для zero-downtime деплоя.
  • Nginx можно использовать как реверс-прокси не только для Python, но и для Node.js, Go, PHP — универсальный инструмент.
  • Можно запускать несколько Flask-приложений на одном сервере, прокидывая разные сокеты через Nginx.
  • Gunicorn поддерживает разные worker-классы: sync, gevent, eventlet — можно подобрать под свои задачи (например, для WebSocket).
  • В связке с systemd можно реализовать автоматический рестарт при падении приложения или обновлении кода.

Новые возможности: автоматизация и скрипты

С такой архитектурой легко автоматизировать деплой через Ansible, Fabric, bash-скрипты. Можно быстро масштабировать приложение, просто увеличив количество воркеров Gunicorn или подняв несколько инстансов на разных портах/сокетах. Nginx позволяет балансировать нагрузку между ними, а systemd — следить за состоянием процессов.

  • Быстрый rollback: просто переключить сокет или порт в конфиге Nginx.
  • Zero-downtime деплой: перезапускать Gunicorn воркеры по одному, не теряя соединений.
  • Мониторинг: логирование ошибок и запросов через systemd и Nginx.
  • Безопасность: ограничение доступа к приложению через firewall, SSL-терминация на Nginx.

Выводы и рекомендации

Связка Flask + Gunicorn + Nginx — это золотой стандарт для развёртывания Python-приложений в продакшене. Она даёт стабильность, масштабируемость, безопасность и гибкость. Даже если вы только начинаете, настройка не займёт много времени, а результат будет радовать и в плане производительности, и в плане удобства обслуживания. Не забывайте про автоматизацию — с systemd и Nginx можно строить сложные схемы деплоя и масштабирования. Если нужен VPS или выделенный сервер для таких задач — выбирайте VPS или выделенный сервер под свои нужды.

Официальные ссылки для самостоятельного изучения:

Если остались вопросы — смело пишите в комментарии, делитесь своими кейсами и лайфхаками. Flask + Gunicorn + Nginx — это не только про надёжность, но и про удовольствие от работы с сервером!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked