Материал посвящен использованию Flask в Ubuntu. В рамках статьи рассмотрим основы функционирования Gunicorn и Nginx для развертывания прокси под Frontend.
Подготовка к проекту
Нам понадобится хост с предустановленной Ubuntu. Желательно создать на сервере обычного пользователя с правами sudo. Например, арендуйте готовую к эксплуатации удаленную машину у провайдера Timeweb Cloud.
Также понадобится:
- Инсталлировать веб-сервер Nginx.
- Зарегистрировать домен.
- Настроить записи DNS:
- А с указанием публичного IP в графе
your_domain. - А аналогично, но с добавлением
www.
Желательно иметь представление о спецификации WSGI. Это поможет понять, как Gunicorn обменивается данными и командами с приложениями Flask.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Инсталлируем компоненты
В рамках подготовки к работе постановим менеджер pip, с его помощью мы будем манипулировать компонентами Python. Плюс скачаем файлы, требуемые для создания ряда элементов Gunicorn. Но предварительно скачаем обновления пакетов и установим python3-pip, он нужен для организации среды разработки:
Зададим настройки виртуальной среде Python
Виртуальные окружения позволяют разделять зависимости приложений, размещенных на одном сервере. Первый этап:
Вторым этапом сделаем родительскую директорию, где будем хранить весь проект Flask. И сразу перейдем в нее:
Третьим этапом организуем непосредственно виртуальную среду Python:
Все используемые впоследствии файлы будут сохраняться в папке myprojectenv. Остается провести активацию:
Результат будет заметен по изменившемуся виду командной строки. Она примет такой вид:
Настроим приложение Flask
Обновим pip:
Следом загрузим Flask и Gunicorn:
Создадим свой модуль
Теперь применим Flask для создания простейшей программы. Но важно учитывать, что данную микроструктуру чаще берут в качестве дополнительного модуля, т.к. в ней минимум инструментов из тех, что обычно актуальны при веб-разработке. В качестве примера создадим простой вариант под названием myproject.py:
В указанный файл мы сохраним код программы. При запуске будет импортирован Flask и создан экземпляр объекта. Например, вот так:
После внесения изменений закройте файл с сохранением. Теперь проверим работоспособность кода, но сначала настроим брандмауэр, чтобы тот разрешал трафик по порту 5000.
Теперь система готова к тесту программного модуля Flask:
Теперь откроем наш домен по IP с указанием порта:
В окне браузера увидим «Hello!». Завершим сессию и отключим сервер нажатием комбинации <Ctrl+C> (в терминале).
Сделаем точку входа WSGI
Переходим к созданию файла, который послужит нам точкой входа в разрабатываемую программу. Он «подскажет» серверу Gunicorn, каким образом обмениваться данными с ним.
Перенесем экземпляр Flask в только что созданный файл, после чего откроем его:
По итогу закроем его.
Настроим Gunicorn
Перед продолжением работы убедимся, что сервер Gunicorn способен правильно обрабатывать нашу программу. Выполняется это передачей наименования точки входа без расширения и имени вызываемого элемента. Возьмем, например, wsgi:app. Еще в команде понадобится указать номер порта с интерфейсом:
Перейдем в браузер и введем IP нашего сервера с портом под номером 5000:
Программа выдаст сообщение «Hello!». Завершим работу нажатием кнопок <Ctrl + C> в окне терминала. И отключим виртуальную среду:
После этого все команды Python будут иметь отношение только к общей системной среде. Если работать с виртуальной придется постоянно, есть смысл запускать ее автоматически вместе с операционкой. С этой целью сгенерируем файл автозагрузки. Сначала создадим *.service и разместим в папке /etc/systemd/system:
Первоначально [Unit], куда обычно вносят метаданные и зависимости, внесем описание службы и зададим условие инициализировать «виртуалку» после подтверждения наличия связи:
В блоке [Service] укажем аккаунт и группу, от имени которых будет запускаться процесс.
Следующим шагом укажем переменную PATH, чтобы при активизации система сразу «понимала», где брать требуемые файлы (в «виртуалке»).
Следует учитывать, что для systemd нужно указывать полный путь к файлу Gunicorn, размещенному в «виртуалке».
В итоге добавим раздел [Install] и внесем в него:
Все, файл systemd подготовлен. Закройте его с сохранением изменений. И можно запускать службу Guricorn (сразу настроим ее загрузку вместе с операционкой):
Остается проверить ее текущее состояние:
Настроим Nginx
Переходим к работе с веб-сервером Nginx (Gunicorn не используется в качестве фронтенд-сервера, и обычно настраивается реверс-прокси. В нашем случае это будет Nginx). Сначала создадим файл с конфигурацией в директории с sites-available, назовем его myproject.
В нем укажем веб-серверу прослушивать порт 80 и использовать серверный блок при всех запросах нашего домена:
Следом добавим location, где укажем proxy_params, определяющий параметры настраиваемого прокси.
Закроем файл с сохранением изменений. И применим новую конфигурацию путем привязки к директории sites-enabled.
Также добавим пользователя www-data в группу текущего пользователя. Для этого выполним:
Проверим конфигурацию Nginx:
И если все в порядке, перезапустим его:
Завершим настройку внесением изменений в параметры брандмауэра. Например, правило насчет доступа через порт 5000 нам уже не понадобится, его можно смело удалять. Вместо него внесем другой, для открытия подключения к серверу Nginx:
Попробуйте зайти на наш сервер из браузера: http://your_domain. Программа выдаст сообщение «Hello!»
Защитим наше решение
Последняя задача в этом материале – установка SSL сертификата для защиты трафика. Мы рекомендуем получить бесплатный SSL Let’s Encrypt с помощью Certbot. Рекомендуемый способ установки Certbot — через snap, который уже предустановлен в Ubuntu.
Подробную инструкцию по выпуску SSL можно найти в официальной документации Certbot.
Выполните команду ниже, чтобы убедиться, что используется последняя версия snapd:
Если ранее вы устанавливали какие-то пакеты Certbot с помощью пакетного менеджера apt, удалите их командой:
Установите Certbot через snap:
Выполните следующее, чтобы убедиться, что команда certbot может быть запущена:
Выполните команду ниже, чтобы получить сертификат и автоматически внести необходимые изменений в конфигурацию Nginx:
Certbot будет автоматически обновлять сертификат. Вы можете протестировать обновление, запустив команду:
После проверьте открытие домена https://your_domain в браузере. Помимо традиционного результата в виде сообщения «Hello!», должен появиться замочек, подтверждающий защиту сайта.
Подготовили для вас выгодные тарифы на облачные серверы
477 ₽/мес
657 ₽/мес
Выводы
Вот мы и разобрались, как работать в микрофреймворке Flask на сервере Ubuntu с применением виртуальной среды Python. Система довольно гибкая, свободно обеспечивает работу приложений практически без структурных ограничений.
