# pipu-music Self-hosted музыкальный сервис: веб и Android-приложение, библиотека на NFS, умная бесконечная лента «Моя волна» с учётом вкуса, звучания треков и настроения. - Идея продукта: [docs/IDEA.md](docs/IDEA.md) - Документация: [docs/README.md](docs/README.md) - Установка сервера на свой домен: [docs/install-guide.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. ```bash pnpm install docker compose -f deploy/compose.dev.yaml up -d ``` API (из `services/api`): ```bash 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`): ```bash pnpm --filter @pipu/web dev ``` Проверки — те же, что в CI: ```bash pnpm typecheck && pnpm test && pnpm i18n:check && pnpm test:scripts ``` ```bash cd services/api && go vet ./... && go test ./... ``` ```bash cd services/recommender && uv run ruff check . && uv run mypy pipu_rec && uv run pytest ``` После изменения `api/openapi.yaml` или `packages/design-tokens/tokens.json` перегенерируйте код и закоммитьте результат: ```bash 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](docs/install-guide.md)). Нужные секреты перечислены в шапке `.gitea/workflows/release.yml`.