Skip to content

Latest commit

 

History

History
193 lines (138 loc) · 7.22 KB

README.md

File metadata and controls

193 lines (138 loc) · 7.22 KB

Filmoteka Microservices

Описание

Проект состоит из нескольких микросервисов, обеспечивающих функциональность Filmoteka. Основные компоненты включают:

  • FilmotekaApi: Сервис для работы с базой данных и бизнес-логикой.
  • Mail Sender: Сервис для отправки приветственных писем новым пользователям с использованием библиотеки gomail.
  • Apache-Kafka: Брокер сообщений, соединяющий FilmotekaApi и Mail Sender.
  • Frontend: Визуальное представление нашего сервиса.
  • PostgreSQL: База данных с таблицами users, films, actors, actors_films.

Компоненты

FilmotekaApi

Описание: Сервис, обеспечивающий работу с базой данных и бизнес-логикой.

Основные функции:

  • Добавление, обновление и удаление информации о фильмах и актерах.
  • Получение отсортированного списка фильмов.
  • Поиск фильмов по фрагменту названия и актерам.
  • Управление пользователями.

Запуск:

  • Для запуска необходимо наличие запущенных БД и Брокера сообщений

Структура конфигурационного файла

[server]
  port = ":<номер_порта>"
  session_key = "<128_символьный_ключ>"
  log_level = "info/debug/error"

[database]
  db_type = "<тип_бд>"
  user = "<логин>"
  password = "<пароль>"
  host = "<хост>"
  db_name = "<название_бд>"

[broker_client]
  broker_type = "<тип_брокера>"
  user = "<логин>"
  password = "<пароль>"
  host = "<хост>"
  port = "<порт>"
  topic = "<топик_или_название_очереди>"

Mail Sender

Описание: Сервис для отправки приветственных писем новым пользователям.

Используемая библиотека: gomail

Запуск:

  • Для запуска необходим запущенный Брокер сообщений

Структура конфигурационного файла

[server]
  log_level = "info/debug/error"

[broker_client]
  broker_type = "<тип_брокера>"
  user = "<логин>"
  password = "<пароль>"
  host = "<хост>"
  port = "<порт>"
  topic = "<топик_или_название_очереди>"

[mail_sender]
  host = "<почтовый_хост>"
  login = "<отправляющая_почта>"
  app_password = "<пароль_приложения>"
  md_type = "<тип_почтового_клиента>"
  body_template_path = "<относительный_путь_от_папки_сервиса_до_шаблона_письма>"

Apache-Kafka

Описание: Брокер сообщений для связи между FilmotekaApi и Mail Sender.

Frontend

Описание: Визуальное представление сервиса.

PostgreSQL

Описание: База данных с таблицами users, films, actors, actors_films.

Структура таблиц:

  • users: Таблица пользователей.
  • films: Таблица фильмов.
  • actors: Таблица актеров.
  • actors_films: Связующая таблица между актерами и фильмами.

Сборка и запуск всего проекта

Запуск на базе Dcoker Compose:

Для запуска на любой системе необходимо объявить данные переменные среды:

BACK_DOCKER_CONFIG_PATH="<путь_до_конфигурационного_файла_ api_при_запуске_в_контейнере>"
POSTGRES_USER="<логин_пользователя_в_бд>"
POSTGRES_PASSWORD="<пароль_пользователя_в_бд>"
POSTGRES_DB="<название_бд>"
MAIL_DOCKER_CONFIG_PATH="<путь_до_конфигурационного_файла_почтового_сервиса_при_запуске_в_контейнере>"
BROKER_TOPIC_NAME="<топик_или_название_очереди>

# Использовать только в случае создания защищённого подключения
BROKER_USER="<логин_пользователя_брокера>"
BROKER_PASSWORD="<пароль_пользователя_брокера>"

Создайте по шаблонам описанным выше конфигурационные файлы и примонтируйте их по пути указанному в переменных среды с окончанием *_DOCKER_CONFIG_PATH.

С использованием Taskfile:

task dev-up

С использованием cli docker:

docker-compose up --build

Запуск на базе Kubernetes:

С использованием Taskfile:

  1. Создание окружения:
task set-prod-environment
  1. Создание конфигурационных файлов:
task create-prod-configs
  1. Деплой приложения:
task prod-up

С использованием kubectl:

Создайте namespace с названием filmoteka:

kubectl create namespace filmoteka

Создайте нижеперечисленные ConfigMap для хранения и монтирования:

  1. Конфигурационного файла bakend:

    kubectl create configmap backend-config-toml --from-file=<относительный_путь_до_конфигурационного_файла> -n filmoteka
  2. конфигурационного файла mail_sender:

    kubectl create configmap mail-sender-config-toml --from-file=<относительный_путь_до_конфигурационного_файла> -n filmoteka
  3. Скрипта инициализации базы данных:

    kubectl create configmap db-init-sql --from-file=./data/init.sql -n filmoteka
  4. Шаблона для письма:

    kubectl create configmap mail-body-template --from-file=./mail_sender/templates/mail_body.html -n filmoteka

Заполните переменные среды которые указывают в шаблоне путь до места монтирования конфигурационных файлов, они описаны по шаблону <*>

Запустите файл deployments.example.yaml, предварительно переименовав в deployments.yaml:

kubectl apply -f ./k8s/deployments.yaml

Использование проекта

После успешного запуска проекта он будет доступен по адресу http://localhost:8081