Краткое руководство по созданию в Flask

Мы уже установили, как мы хотели бы, чтобы наше приложение было структурировано в соответствии с этой историей. Я улучшил код того, как приложение использует учетные данные базы данных. Flask использует встроенный сервер разработки при локальном запуске, что не рекомендуется для производства.

Вы должны настроить сервер WSGI, чтобы приложение могло обслуживать производственный трафик. Доступно несколько серверов WSGI, но я выбрал Gunicorn из-за его зрелости. Однако Gunicorn в первую очередь не предназначен для обслуживания статического контента и графики. Вместо того, чтобы возлагать на Gunicorn эти задачи, мы должны позволить Nginx, боссу HTTP в отрасли, обрабатывать все запросы трафика и балансировать нагрузку в качестве обратного прокси-сервера.

Таким образом, у нас будет два контейнера, работающих бок о бок в модуле podman, и трафик будет поступать в контейнер приложения через Nginx.

Ниже файл Dockerfile создаст образ приложения на основе образа ubi/python38, и при запуске будет запущен сервер gunicorn, как указано в файле appentry.sh.

Сервер Nginx должен быть настроен для отправки трафика в контейнер приложения. В файле конфигурации Nginx включите configs, чтобы указать Nginx отправлять весь трафик, полученный через/маршрут, на сервер gunicorn по адресу port 8000. Затем эти конфигурации будут добавлены в образ Nginx в соответствии с Dockerfile.

У нас есть кодовая база и файлы Dockerfile как для приложения govt_structure, так и для Nginx. Мы создадим модуль, доступный на port 8181, и развернем в нем контейнеры приложений. Запустите следующий скрипт для выполнения этих задач:

Наконец, наше приложение запущено и работает, и его можно протестировать по адресу http://localhost:8181/sayhello (/sayhello просто возвращает сообщение).

Спасибо за чтение. Вы можете найти полный код в моем репозитории GitHub в ветке govt.

Следите за следующим:

  • Содержимое пипфайла
  • Реестр Redhat для извлечения базового образа ubi8/python-38
  • Учетные данные базы данных не фиксируются в git
  • используйте журналы podman ‹имя_контейнера› для проверки журналов на случай сбоя контейнера