/SHS-API

API хранилище истории сессий онлайн кинотеатра «Фильмопоиск». (Итоговый проект Тренировки по DevOps)

Primary LanguageLuaMIT LicenseMIT

SHS_API

API хранилище истории сессий онлайн кинотеатра «Фильмопоиск»

Session history storage API. (Итоговый проект Тренировки по DevOps)

Сервис доступен по адересу:

Для работы приложения используются:

Yandex Cloud;

compute instance group (ig);

COI (Container Optimized Image);

Docker;

Openresty - fork nginx;

PostgreSQL - база данных;

Terraform;

GitHub Actions.

Схема

sheme_shs

Openresty

Первая ig содержит одну виртуальную машину в которой поднят контейнер с приложением openresty. Openresty используется для балансировки и кэширования трафика между vm с приложением SHS (bing). Так же, он используется для доступа по протоколу HTTPS (до дедлайна поднял на nginx, но пришлось от него отказатья, на openresty настроил HTTPS после дедлайна). Openresty был выбран потому, что open source nginx не умеет проверять доступность upstream с помощью HTTP GET запроса. Способ настройки такой проверки в Openresty позволил лучше понять структуру HTTP запроса потому, что при настройке нужно было указать «сырой» запрос. ig проверяет доступрость сервиса по ендпоиту /nginx-status каждые 30 секунд.

Приложение SHS (bingo)

Вторая ig содержит две виртуальные машины на которых запущены контейнеры с приложением SHS. Для запуска приложения пришлось приложить много усилий. По выводу ошибок при запуске удалось понять в каких каталогах должен лежать конфиг файл и лог файл, необходимые директории были созданы в Docker имидже. Запуск приложения удалось ускорить заблокировав исходящие обрашения на DNS сервер Google по протоколу HTTP, так как приложение развернуто в контейнере необходимо было выбрать соответствующую цепочку. То что приложения совершает запрос на DNS Google удалось обнаружить с помощью приложения lsof. Для загрузки имиджа с приложением в реджистри был использован GitHub Actions, при пуше изменений в директории shs имидж собирается в GitHub Actions и пушиться в YC container registry. ig проверяет доступрость приложения по ендпоинту /ping с 30 секундным интервалом, в лучае сбоя - виртуальная машина перезагружается. Для оперативного восстановления приложения был написан микро скрипт, который каждые три секунды по ендпоинту /ping дергает приложения в случае недоступрости приложения перезагружает контейнер с приложением. Скрипт был оформлен в service systemd - watchdog.

PostgreSQL

Третья ig содержит одну виртуальную машину с развернутым на ней контейнером с СУБД PostgreSQL. Контейнер пулится из dockerhub, настройки - акаунта и имени базы передаются из переменных окружения с машины, на которой запустили деплой в переменные окружения в docker контейнере.

Terraform

Для автоматического деплоя приложения используется Terraform. Создаем сервисные аккаунты для управления ig и пуленьея докер имиждей из реджисти. Создаются ig и с помощью OCI в виртуальные машины заливаются контейнеры с соответсвующими приложениями. Для заливки конфигов в виртуальные машины используется секция metadata. Для копирования сертификатов SSL и акаунтов доступа к БД в контейнер, использовал функцию получения переменных окружения в Terraform.