Проект состоит из нескольких микросервисов, обеспечивающих функциональность Filmoteka. Основные компоненты включают:
- FilmotekaApi: Сервис для работы с базой данных и бизнес-логикой.
- Mail Sender: Сервис для отправки приветственных писем новым пользователям с использованием библиотеки
gomail
. - Apache-Kafka: Брокер сообщений, соединяющий FilmotekaApi и Mail Sender.
- Frontend: Визуальное представление нашего сервиса.
- PostgreSQL: База данных с таблицами
users
,films
,actors
,actors_films
.
Описание: Сервис, обеспечивающий работу с базой данных и бизнес-логикой.
Основные функции:
- Добавление, обновление и удаление информации о фильмах и актерах.
- Получение отсортированного списка фильмов.
- Поиск фильмов по фрагменту названия и актерам.
- Управление пользователями.
Запуск:
- Для запуска необходимо наличие запущенных БД и Брокера сообщений
Структура конфигурационного файла
[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 = "<топик_или_название_очереди>"
Описание: Сервис для отправки приветственных писем новым пользователям.
Используемая библиотека: 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 = "<относительный_путь_от_папки_сервиса_до_шаблона_письма>"
Описание: Брокер сообщений для связи между FilmotekaApi и Mail Sender.
Описание: Визуальное представление сервиса.
Описание: База данных с таблицами users
, films
, actors
, actors_films
.
Структура таблиц:
users
: Таблица пользователей.films
: Таблица фильмов.actors
: Таблица актеров.actors_films
: Связующая таблица между актерами и фильмами.
Для запуска на любой системе необходимо объявить данные переменные среды:
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
С использованием Taskfile:
- Создание окружения:
task set-prod-environment
- Создание конфигурационных файлов:
task create-prod-configs
- Деплой приложения:
task prod-up
С использованием kubectl:
Создайте namespace с названием filmoteka:
kubectl create namespace filmoteka
Создайте нижеперечисленные ConfigMap для хранения и монтирования:
-
Конфигурационного файла bakend:
kubectl create configmap backend-config-toml --from-file=<относительный_путь_до_конфигурационного_файла> -n filmoteka
-
конфигурационного файла mail_sender:
kubectl create configmap mail-sender-config-toml --from-file=<относительный_путь_до_конфигурационного_файла> -n filmoteka
-
Скрипта инициализации базы данных:
kubectl create configmap db-init-sql --from-file=./data/init.sql -n filmoteka
-
Шаблона для письма:
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