The wave logs each served candidate's feature vector to rec_impression_features. Nightly training joins them with impression outcomes, validates on the last week and activates the model only when it beats the v1 order and the active model. The service loads the active ranker and uses its order in place of the v1 score. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pipu-music
Self-hosted музыкальный сервис: веб и Android-приложение, библиотека на NFS, умная бесконечная лента «Моя волна» с учётом вкуса, звучания треков и настроения.
- Идея продукта: docs/IDEA.md
- Документация для разработки: docs/README.md
- План: docs/roadmap.md
- Установка сервера на свой домен: docs/install-guide.md
Структура
| Путь | Что |
|---|---|
api/openapi.yaml |
Контракт публичного API — источник истины для сервера и клиентов |
services/api |
Go: публичный API (cmd/api) и агент хранилищ (cmd/storage-agent) |
services/recommender |
Python: рекомендации (pipu-rec serve) и аудиоанализ (pipu-rec analyze) |
apps/web |
Веб-клиент (React + Vite) |
apps/mobile |
Android-приложение (React Native + Expo) |
packages/* |
Общий TS-код: api-client, core, i18n, design-tokens |
deploy/ |
Docker Compose, nginx, скрипты установки и обновления |
tests/fixtures/music |
Генератор тестовой библиотеки (нужен ffmpeg) |
.gitea/workflows |
CI по областям (ci-*.yml, docker.yml) и релиз по тегу (release.yml) |
Разработка
Нужны: Go 1.24+, Node 22 + pnpm 11, uv, Docker; для Android — JDK 17 и Android SDK.
pnpm install
docker compose -f deploy/compose.dev.yaml up -d
API (из services/api):
DATABASE_URL="postgres://pipu:pipu@localhost:5432/pipu?sslmode=disable" REDIS_URL="redis://localhost:6379/0" MEILI_URL="http://localhost:7700" MEILI_MASTER_KEY="dev-master-key-change-me" LIBRARY_HOST_ROOT="$PWD/../../tests/fixtures/music/out" X_ACCEL=false CACHE_DIR="$PWD/.cache" go run ./cmd/api
Веб на http://localhost:5173 (проксирует /api на :8080):
pnpm --filter @pipu/web dev
Проверки — те же, что в CI:
pnpm typecheck && pnpm test && pnpm i18n:check && pnpm test:scripts
cd services/api && go vet ./... && go test ./...
cd services/recommender && uv run ruff check . && uv run mypy pipu_rec && uv run pytest
После изменения api/openapi.yaml или packages/design-tokens/tokens.json перегенерируйте код и закоммитьте результат:
pnpm generate && (cd services/api && go generate ./...)
Релиз
Тег vX.Y.Z (или vX.Y.Z-rc.N) запускает .gitea/workflows/release.yml: Gitea Release с заметками → подписанный APK докладывается в него.
Docker-образы не публикуются: сервер клонирует репозиторий и собирает их сам (deploy/update.sh,
docs/install-guide.md). Нужные секреты — в шапке workflow и в docs/ci-cd.md.