Тестовое веб-приложение todo
создано для использования в качестве полезной нагрузки в сценариях из документации Yandex Cloud. Приложение адаптировано для запуска в облачной инфраструктуре. В качестве среды выполнения приложения обычно используется управляемый кластер Kubernetes.
Приложение состоит из двух компонентов: фронтенд и бэкенд. Компоненты размещены в соответствующих каталогах: frontend и backend.
Фронтенд написан на React. Для публикации фронтенда используется веб-сервер Angie.
Бэкенд написан на языке Go, для его работы необходима СУБД PostgreSQL. В соответствии с рекомендациями по построению отказоустойчивой инфраструктуры в приложении реализована проверка доступности (Health Check), которая отслеживает доступность подключаемых ресурсов, в данном случае - кластера PostgreSQL. Также в бэкенде реализовано разделение подключений к СУБД для записи и чтения.
Для сборки и упаковки компонентов приложения в состав репозитория включен манифест CI .gitlab-ci.yml
. Для сборки используется Yandex Managed Service for GitLab.
Оба компонента упаковываются в контейнерные образы на базе образа distroless gcr.io/distroless/base-debian12
, который обеспечивает максимальную компактность и безопасность.
Сборка вэб-сервера Angie для контейнерного образа фронтенда выполняется из исходного кода со статической линковкой.
Бэкенд конфигурируется с помощью переменных окружения. Параметры подключения к мастеру базы данных:
- DB_HOST
- DB_PORT=6432
- DB_DATABASE
- DB_USER
- DB_PASSWORD
- DB_SSL_MODE=prefer
- DB_TZ=UTC
И к реплике (необязательные):
- RO_DB_HOST
- RO_DB_PORT
- RO_DB_DATABASE
- RO_DB_USER
- RO_DB_PASSWORD
- RO_DB_SSL_MODE
- RO_DB_TZ
Бэкенд поддерживает следующие параметры запуска:
- migrate: создание необходимых для работы объектов БД
- run: обслуживание запросов пользователей
Бэкенд имеет единственный CRUD эндпоинт /api/todos/.
Фронтенд не имеет параметров конфигурирования. Для работы фронтенда требуется работающий CRUD эндпоинт /api/todos/ (бэкенд) на том же домене.
Для установки и запуска приложения в кластере Kubernetes используется helm чарт. Пример использования чарта смотрите в репозитории Развертывание веб-приложения в отказоустойчивой конфигурации в Yandex Cloud.