Утилиты и Makefile
Relevant source files
The following files were used as context for generating this wiki page:
Этот раздел посвящен инструментам автоматизации, конфигурации и вспомогательным скриптам, используемым в проекте Music Service. Основными компонентами системы управления являются Makefile для автоматизации команд, Docker Compose для оркестрации контейнеров и встроенная система конфигурации на основе переменных окружения.
Система утилит обеспечивает полный жизненный цикл разработки: от локального запуска и миграций базы данных до генерации документации Swagger и развертывания на облачных платформах.
Команды Makefile
Makefile служит центральной точкой входа для выполнения стандартных задач разработки. Он абстрагирует сложные команды Docker и Go, предоставляя разработчику простой интерфейс.
Основные команды автоматизации
Ниже приведен список доступных команд и их назначение:
| Команда | Описание |
|---|---|
make run | Запуск приложения локально |
make build | Компиляция исполняемого файла приложения |
make test | Запуск всех тестов проекта |
make migrate-up | Применение всех доступных миграций БД |
make migrate-down | Откат последней миграции БД |
make swag | Генерация документации API (Swagger) |
make docker-up | Сборка и запуск контейнеров через docker-compose up --build |
make docker-down | Остановка и удаление контейнеров |
make lint | Запуск линтера для проверки качества кода |
make create-admin | Создание администратора (параметры: EMAIL, PASSWORD) |
Sources: README.md:144-154, README.md:126-128
Конфигурация и переменные окружения
Приложение использует гибкую систему конфигурации, которая считывает данные из переменных окружения. Если переменная не задана, используются значения по умолчанию, определенные в коде.
Параметры конфигурации
В файле internal/core/config/config.go определена структура Config, содержащая настройки для подключения к БД, Redis и параметры безопасности JWT.
| Переменная | По умолчанию | Описание |
|---|---|---|
APP_PORT | 8080 | Порт, на котором слушает HTTP сервер |
ENV | development | Среда запуска (development, production) |
DB_HOST | localhost | Адрес сервера PostgreSQL |
DB_NAME | music_service | Имя базы данных |
JWT_ACCESS_TTL | 15m | Время жизни Access токена |
FREE_PLAYLIST_LIMIT | 3 | Лимит плейлистов для бесплатных аккаунтов |
Sources: internal/core/config/config.go:12-45, README.md:33-51
Инфраструктура Docker и Docker Compose
Для обеспечения идентичности сред разработки и эксплуатации проект использует Docker. Конфигурация docker-compose.yml описывает многоконтейнерную архитектуру, включая приложение, базу данных и кэш.
Архитектура контейнеров
Схема показывает взаимосвязи между сервисами в Docker Compose, включая вспомогательные контейнеры для проброса портов (port-forwarders) через socat.
Sources: docker-compose.yml:5-75
Миграции базы данных
Управление схемой базы данных осуществляется с помощью утилиты goose или образа migrate/migrate. Миграции хранятся в директории migrations/ и представляют собой SQL-файлы.
Процесс применения миграций
При запуске через Docker Compose или вручную через make migrate-up, система последовательно применяет SQL-скрипты:
001_init.up.sql: Создание базовых таблиц (users,artists,tracks,playlists).003_rich_seed.up.sql: Наполнение базы данных тестовыми данными (сидирование).
Sources: migrations/001_init.up.sql:1-100, migrations/003_rich_seed.up.sql:1-100, README.md:158-167
Тестирование и CI/CD
Проект включает средства для автоматизированного тестирования. Интеграционные тесты используют библиотеку testcontainers-go для запуска временных экземпляров PostgreSQL.
Утилиты тестирования
- Локальный запуск:
go test ./... -v. - Интеграционные тесты: Файл
user_repository_test.goдемонстрирует автоматический запуск контейнера с БД, выполнение миграций и очистку ресурсов после тестов. - CI/CD: В проекте настроен GitLab CI/CD пайплайн с этапами
testиdeploy.
Последовательность действий при выполнении интеграционных тестов с использованием контейнеров.
Sources: internal/features/users/repository/postgres/user_repository_test.go:27-70, README.md:188-193
Утилиты деплоя (Fly.io)
Проект интегрирован с платформой Fly.io. Для управления деплоем используется CLI-инструмент flyctl.
Основные шаги развертывания:
- Авторизация через
flyctl auth login. - Настройка секретов (секретные переменные окружения) через
flyctl secrets set. - Запуск деплоя командой
flyctl deploy, которая используетDockerfileпроекта для сборки образа.
Sources: README.md:173-186
Заключение
Инструментарий проекта ориентирован на быструю разработку и надежное развертывание. Сочетание Makefile, Docker Compose и автоматизированных миграций позволяет минимизировать время настройки окружения, а использование testcontainers гарантирует высокую точность интеграционного тестирования.