Задать вопрос
Все статьи / VDS / Создание и настройка виртуальных машин / Обслуживание приложений Flask с помощью Nginx и Gunicorn в Ubuntu
Найти результаты:
Период:
с:
 
по:
Помощь в поиске

Помощь в поиске

apple banana
Найти записи, которые содержат хотя бы одно из двух слов.

+apple +juice
Найти записи, которые содержат оба слова.

+apple macintosh
Найти записи, которые содержат слово 'apple', но положение записей выше, если они также содержат 'macintosh'.

+apple -macintosh
Найти записи, которые содержат слово 'apple', но не 'macintosh'.

+apple ~macintosh
Найти записи, которые содержат слово 'apple', но если запись также содержит слово 'macintosh', rate it lower than if row does not. Это более "мягкий" чем поиск '+apple -macintosh', для которого наличие 'macintosh' вызывает что записи не будут возвращены вовсе.

+apple +(>turnover <strudel)
Найти записи, которые содержат слова 'apple' и 'turnover', или 'apple' и 'strudel' (в любом порядке), но ранг 'apple turnover' выше чем 'apple strudel'.

apple*
Найти записи, которые содержат такие слова как 'apple', 'apples', 'applesauce', или 'applet'.

"some words"
Найти записи, которые содержат точную фразу 'some words' (например записи содержащие 'some words of wisdom', но не "some noise words").

Обслуживание приложений Flask с помощью Nginx и Gunicorn в Ubuntu

Flask – это фреймворк для языка программирования Python, который предоставляет инструменты для разработки веб-приложений. Он позволяет создавать веб-приложения с минимальными усилиями и прост в использовании. 

Установить и запустить Flask в Ubuntu возможно. В процессе разработки веб-приложений на Flask вы можете использовать сервер Nginx в качестве прокси-сервера, а Gunicorn или другие серверы приложений в качестве веб-сервера для обработки запросов, переданных от Nginx.

Далее мы рассмотрим, как работать в микрофреймворке Flask на сервере Ubuntu.  

Подготовка к работе 

  1. Первое, что вам потребуется – это сервер с установленной ОС Ubuntu и наличием обычного пользователя с правами sudo. В нашем руководстве мы будем использовать сервер с Ubuntu 22.04 LTS. 

Если у вас нет подходящего сервера, то вы можете арендовать его у нас. Аренда сервера в Sweb позволяет настраивать его под свои задачи и сразу получать готовое решение для ваших проектов. 

  1. Далее необходимо инсталлировать веб-сервер Nginx. 
  2. И зарегистрировать домен. 
  3. Настройте записи DNS. О том, как это сделать, мы уже рассказывали в другой статье

Обязательно создайте следующие записи DNS:

  • Запись A с «exampledomain», которая указывает на общедоступный IP-адрес вашего сервера.
  • Запись A с «www.exampledomain», которая указывает на общедоступный IP-адрес вашего сервера.

Установим компоненты из репозиториев Ubuntu

Для начала давайте установим все необходимые компоненты из официальных репозиториев Ubuntu: pip, менеджер пакетов Python, который будет управлять Python-компонентами и так далее. 

  1. Обновите пакеты:
sudo apt update

  1. Установите следующие пакеты, необходимые для создания Python-окружения:
sudo apt install python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools

Эти пакеты обеспечат наличие необходимых инструментов и файлов для работы с Python.

  1. Когда система запросит, введите «y».

  1. Дождитесь завершения установки, это может занять пару минут.

Создадим виртуальную среду Python

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

  1. Установите пакет «python3-venv», который включает в себя модуль «venv»:
sudo apt install python3-venv

  1. Введите «y», чтобы продолжить установку.
  2. Создайте родительскую директорию для вашего проекта Flask и перейдите в нее с помощью следующих команд:
mkdir ~/jdproject
cd ~/jdproject

  1. Теперь создайте виртуальную среду, в которой будут храниться зависимости вашего проекта Flask. Выполните следующую команду:
python3 -m venv jdprojectenv

Эта команда установит локальную копию Python и pip в директорию с именем «jdprojectenv» внутри вашего проекта.

  1. Активируйте виртуальную среду с помощью следующей команды:
source jdprojectenv/bin/activate

После активации виртуальной среды рядом с вашим логином появится новое значение: 

«(jdprojectenv) johndoe@srv:~/jdproject$».

Настроим приложение Flask и инсталлируем Gunicorn

Оставайтесь в созданной виртуальной среде Python. Здесь мы установим Flask и Gunicorn, чтобы после начать работу над созданием веб-приложения.

  1. Сначала установите «wheel» с использованием локальной копии «pip»:
pip install wheel

  1. Теперь установите Flask и Gunicorn, которые необходимы для разработки веб-приложения:
pip install gunicorn flask

Эти команды установят Flask, веб-фреймворк для Python, и Gunicorn, веб-сервер, который будет обрабатывать запросы для вашего приложения.

Теперь ваша виртуальная среда настроена и готова к работе с Flask. 

Создадим простое Flask-приложение

Теперь, когда Flask установлен и настроен, давайте создадим простое веб-приложение. 

  1. Откройте редактор nano для создания файла приложения:
nano ~/jdproject/jdproject.py

  1. Вставьте следующий код для создания простого Flask-приложения:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "<h1 style='color:yellow>Hi everyone!</h1>"
if __name__ == "__main__":
    app.run(host='0.0.0.0')

  1. Сохраните и закройте файлы.
  2. Если у вас включен брандмауэр UFW, разрешите доступ к порту 5000:
sudo ufw allow 5000

  1. Введите пароль, когда система того потребует. 
  2. Теперь запустите Flask-приложение для тестирования:
python ~/jdproject/jdproject.py

Вы увидите сообщение о запуске Flask-приложения.

  1. Посетите IP-адрес вашего сервера, добавив «:5000» в адресную строку браузера:
[http://IP_вашего_сервера:5000](http://IP_вашего_сервера:5000)

Приложение должно выдать сообщение «Hi everyone!» желтым цветом.

  1. Когда тестирование будет завершено, нажмите CTRL-C в терминале, чтобы остановить Flask-сервер.

Создадим точку входа WSGI

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

  1. Создайте файл wsgi.py:
nano ~/jdproject/wsgi.py

  1. В этом файле выполните импорт экземпляра Flask из нашего приложения и запустите его:
from jdproject import app
if __name__ == "__main__":
    app.run()

  1. Сохраните и закройте файл по завершении редактирования.

Настроим Gunicorn

Прежде чем продолжить, убедитесь, что Gunicorn может правильно обслуживать ваше приложение.

  1. Для этого передайте ему имя точки входа в приложение. 
  2. Также укажите интерфейс и порт для привязки, используя аргумент 0.0.0.0:5000:
cd ~/jdproject
gunicorn --bind 0.0.0.0:5000 wsgi:app

Вывод будет примерно следующим:

[2023-12-29 23:16:17 +0000] [4885] [INFO] Starting gunicorn 21.2.4
[2023-12-29 23:16:17 +0000] [4885] [INFO] Listening at: http://0.0.0.0:5000 (4885)
[2023-12-29 23:16:17 +0000] [4885] [INFO] Using worker: sync
[2023-12-29 23:16:17 +0000] [4885] [INFO] Booting worker with pid: 4885

  1. Перейдите в браузер и откройте:
http://IP_вашего_сервера:5000

На экране должен отобразиться вывод вашего приложения.

  1. Когда вы подтвердите, что все работает должным образом, нажмите CTRL-C. 
  2. Когда вы закончите использование виртуальной среды, ее можно деактивировать:
deactivate

  1. Создайте файл с расширением .service в директории «/etc/systemd/system». Введите пароль, когда потребуется:
sudo nano /etc/systemd/system/jdproject.service

Это позволит Ubuntu автоматически запускать Gunicorn и обслуживать Flask-приложение при каждом запуске сервера.

  1. Начнем с секции [Unit], где указываются метаданные и зависимости:
[Unit]
Description=Gunicorn instance to serve jdproject
After=network.target

  1. Затем добавьте секцию [Service]. Здесь указываются пользователь и группа, от имени которых должен работать процесс:
[Unit]
Description=Gunicorn instance to serve jdproject
After=network.target
[Service]
User=johndoe
Group=www-data

  1. Затем укажите рабочий каталог и установите переменную окружения PATH, чтобы система инициализации знала, где находятся исполняемые файлы процесса:
[Unit]
Description=Gunicorn instance to serve jdproject
After=network.target
[Service]
User=johndoe
Group=www-data
WorkingDirectory=/home/johndoe/jdproject
Environment="PATH=/home/johndoe/jdproject/jdprojectenv/bin"
ExecStart=/home/johndoe/jdproject/jdprojectenv/bin/gunicorn --workers 3 --bind unix:jdproject.sock -m 007 wsgi:app
 
  1. Наконец, добавьте секцию [Install]:
[Unit]
Description=Gunicorn instance to serve jdproject
After=network.target
[Service]
User=johndoe
Group=www-data
WorkingDirectory=/home/johndoe/jdproject
Environment="PATH=/home/johndoe/jdproject/jdprojectenv/bin"
ExecStart=/home/johndoe/jdproject/jdprojectenv/bin/gunicorn --workers 3 --bind unix:jdproject.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target

Теперь ваш файл systemd готов. 

  1. Сохраните и закройте его.
  2. Запустите Gunicorn и укажите, чтобы он автоматически запускался при загрузке:
sudo systemctl start jdproject
sudo systemctl enable jdproject

  1. Проверьте статус:
sudo systemctl status jdproject

Вы должны увидеть примерно следующий вывод:

●jdproject.service - Gunicorn instance to serve jdproject
     Loaded: loaded (/etc/systemd/system/jdproject.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-12-29 23:33:58 UTC; 1 min 17s ago
   Main PID: 4904 (gunicorn)
      Tasks: 4 (limit: 2191)
     Memory: 51.0M
        CPU: 206ms
     CGroup: /system.slice/jdproject.service
             ├─4904 /home/johndoe/jdproject/jdprojectenv/bin/python3 /home/johndoe/jdproject/jdprojectenv/bin/gunicorn --workers 3 --bind unix:jdproject.sock -m 007 wsgi:app
             ├─4905 /home/johndoe/jdproject/jdprojectenv/bin/python3 /home/johndoe/jdproject/jdprojectenv/bin/gunicorn --workers 3 --bind unix:jdproject.sock -m 007 wsgi:app
             ├─4906 /home/johndoe/jdproject/jdprojectenv/bin/python3 /home/johndoe/jdproject/jdprojectenv/bin/gunicorn --workers 3 --bind unix:jdproject.sock -m 007 wsgi:app
             └─4907 /home/johndoe/jdproject/jdprojectenv/bin/python3 /home/johndoe/jdproject/jdprojectenv/bin/gunicorn --workers 3 --bind unix:jdproject.sock -m 007 wsgi:app
Dec 29 23:33:58 srv systemd[1]: Started Gunicorn instance to serve jdproject.
 

Настройка Nginx

Переходим к настройке веб-сервера Nginx. 

  1. Для начала создайте файл конфигурации в директории «sites-available».
sudo nano /etc/nginx/sites-available/jdproject

  1. В этом файле укажите, чтобы веб-сервер слушал порт 80 и использовал серверный блок для всех запросов вашего домена:
server {
    listen 80;
    server_name jddomain www.jddomain;
}

  1. Далее добавьте блок location, где задайте параметры прокси, включая proxy_params:
server {
    listen 80;
    server_name jddomain www.jddomain;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/username/jdproject/jdproject.sock;
    }
}

  1. Сохраните файл и примените новую конфигурацию:
sudo ln -s /etc/nginx/sites-available/jdproject /etc/nginx/sites-enabled

  1. Перезапустим Nginx:
sudo nginx -s reload

  1. Завершим настройку, внеся изменения в параметры брандмауэра. Например, правило для доступа через порт 5000 больше не нужно – его можно удалить. Вместо него, добавьте новое правило для открытия подключений к серверу Nginx:
sudo ufw delete allow 5000
sudo ufw allow 'Nginx Full'
  1. Попробуйте открыть ваш сервер в браузере. 

Установим SSL-сертификат

Итак, осталась только установка SSL-сертификата, который обеспечит безопасность передаваемого трафика. Для этой цели рекомендуем воспользоваться бесплатным SSL-сертификатом «Let's Encrypt» с помощью утилиты Certbot. 

  1. Убедитесь, что у вас установлена последняя версия «snapd», выполнив:
sudo snap install core; 
sudo snap refresh core

  1. Если вы ранее устанавливали пакеты Certbot с использованием менеджера пакетов apt, удалите их следующей командой:
sudo apt-get remove certbot

В противном случае установите Certbot через snap:

sudo snap install --classic certbot

  1. Убедитесь, что команда Certbot может быть выполнена:
sudo ln -s /snap/bin/certbot /usr/bin/certbot

  1. Далее пропишите команду, чтобы получить сертификат и автоматически внести необходимые изменения в конфигурацию Nginx:
sudo certbot --nginx

  1. Certbot будет автоматически обновлять сертификат. Вы можете протестировать обновление, запустив команду:
sudo certbot renew --dry-run

В конце проверьте свой домен через браузер. Помимо обычного сообщения «Hi everyone!», вы также должны увидеть значок «замка», подтверждающий, что ваш сайт защищен.

Заключение

Настройка и обслуживание приложений Flask с использованием Nginx и Gunicorn в Linux (Ubuntu) – это надежное и эффективное решение для развертывания веб-приложений. 

Использование Gunicorn в связке с Nginx обеспечивает высокую производительность и безопасность, а интеграция SSL-сертификата с Certbot добавляет дополнительный уровень защиты. 

В этой статье мы рассмотрели простые шаги по настройке производительной инфраструктуры для ваших Flask-приложений.

Предыдущая статья
Настройка IP-адреса на VPS
Следующая статья
Создание изолированной среды для Nextcloud