13 Разработка
Проект написан на Go и распространяется как открытый исходный код. Мы рады вкладу сообщества.
- Репозиторий: github.com/akovardin/adscoffee
- Сборка и тесты:
.github/workflows/go.yml(golangci-lint → build → test → coverage)
Требования
- Go (см.
go.modв корне репозитория); - Docker Engine и
docker composev2; - Taskfile.
Локальная разработка
-
Поднимите инфраструктуру (PostgreSQL, Redis Cluster, Kafka, ClickHouse, MinIO, Kafka UI):
task docker-up -
Запустите нужные сервисы:
# админка go run ./admin/cmd/admin/main.go serve -config=./admin/configs/config.yaml # рекламный сервер go run ./server/cmd/server/main.go serve -config=./server/configs/config.yaml # аналитика go run ./analytics/cmd/analytics/main.go aggregations -table=impressions -config=./analytics/configs/config.yaml -
Примените миграции БД:
go run ./admin/cmd/admin/main.go migrate -config=./admin/configs/config.yaml -
Создайте пользователя админки:
go run ./admin/cmd/admin/main.go user -account=admin -password=secret -config=./admin/configs/config.yaml
Локальные конфиги — admin/configs/config.yaml, server/configs/config.yaml, analytics/configs/config.yaml. Персональные оверрайды dev.yaml / prod.yaml не коммитятся. В VS Code есть готовые конфигурации запуска (.vscode/launch.json).
Полезные команды
task docker-down # остановить инфраструктуру
task test # go test -v ./...
task lint # golangci-lint run ./...
Структура репозитория
| Каталог | Назначение |
|---|---|
admin/ |
Админ-панель (QOR5) |
server/ |
Рекламный сервер (пайплайн плагинов) |
analytics/ |
Планировщик агрегаций (dagu) |
pkg/ |
Общие пакеты (redis, kafka, logger, telemetry и др.) |
sdk/ |
SDK для интеграции (Android) |
geoip/ |
Данные GeoIP для таргетинга по гео |
data/ |
Миграции и init-скрипты ClickHouse |
docker/ |
Docker-материалы (redis-cluster, grafana dashboards) |
dist/ |
Самодостаточный пакет для запуска платформы |
Как внести вклад
- Сделайте форк репозитория и создайте ветку.
- Внесите изменения, добавьте тесты.
- Прогоните
task lintиtask test. - Откройте pull request с описанием изменений.
Перед изменениями ядра рекомендуется обсудить идею в issue — так проще договориться о подходе.