- FastAPI-Backend mit vollständiger ABS v2.x API-Kompatibilität - SQLAlchemy-Models: User, Library, LibraryItem, BookFile, Chapter, Podcast, PodcastEpisode, MediaProgress, Bookmark, PlaybackSession - Auth: JWT-Login (/login, /logout, /api/authorize) - Library + Items Endpoints inkl. camelCase ABS-Response-Format - HLS-Streaming via FFmpeg (POST /api/items/:id/play, Session-Sync) - Me/Progress Endpoints + Lesezeichen - User-Management + Server-Settings (Admin) - Library-Scanner (MP3/WAV Discovery, Hintergrund-Task) - File Watcher (watchdog, 30s Debounce) - Matching-Skelett (MusicBrainz, OpenLibrary, Google Books – Phase 5) - Docker-Setup: backend (Python 3.12+FFmpeg), frontend (React/Vite), nginx Reverse-Proxy auf Port 3000 - setup.sh: Installiert Docker auf Debian/Ubuntu, richtet .env ein Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
124 lines
3.6 KiB
Markdown
124 lines
3.6 KiB
Markdown
# Audiolib
|
|
|
|
Selbst gehosteter Audiobook- und Podcast-Server, vollständig API-kompatibel mit **Audiobookshelf (ABS) v2.x**. Bestehende Audiobookshelf-Apps (iOS, Android, etc.) funktionieren ohne Änderungen.
|
|
|
|
## Voraussetzungen
|
|
|
|
- Docker und Docker Compose installiert
|
|
- Audiodateien (MP3/WAV) auf dem Server verfügbar
|
|
|
|
## Schnellstart
|
|
|
|
### 1. Repository klonen / Dateien vorbereiten
|
|
|
|
```bash
|
|
cd /opt/audiolib
|
|
cp .env.example .env
|
|
```
|
|
|
|
### 2. `.env` anpassen
|
|
|
|
Mindestens folgende Werte setzen:
|
|
|
|
```env
|
|
JWT_SECRET=mein_langer_geheimer_zufallsstring
|
|
ADMIN_USERNAME=admin
|
|
ADMIN_PASSWORD=sicheres_passwort
|
|
AUDIOFILES_PATH=/pfad/zu/meinen/audiodateien
|
|
```
|
|
|
|
### 3. Starten
|
|
|
|
```bash
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
Der Server ist dann erreichbar unter: `http://<server-ip>:3000`
|
|
|
|
### 4. Erste Schritte
|
|
|
|
1. Öffne `http://<server-ip>:3000` im Browser
|
|
2. Melde dich mit den in `.env` gesetzten Admin-Daten an
|
|
3. In der Audiobookshelf-App: Server-URL `http://<server-ip>:3000` eintragen
|
|
4. Library scannen: Admin → Libraries → Scan
|
|
|
|
## Konfiguration
|
|
|
|
Alle Einstellungen werden über die `.env`-Datei konfiguriert:
|
|
|
|
| Variable | Standard | Beschreibung |
|
|
|---|---|---|
|
|
| `SERVER_PORT` | `3000` | Externer Port |
|
|
| `JWT_SECRET` | — | **Unbedingt ändern!** Langer zufälliger String |
|
|
| `ADMIN_USERNAME` | `admin` | Admin-Benutzername |
|
|
| `ADMIN_PASSWORD` | `changeme` | **Unbedingt ändern!** |
|
|
| `AUDIOFILES_PATH` | `./audiofiles` | Pfad zu den Audiodateien (NAS-Mount möglich) |
|
|
| `AUTO_MATCH_BOOKS` | `true` | Automatisches Metadaten-Matching für Hörbücher |
|
|
| `AUTO_MATCH_PODCASTS` | `true` | Automatisches Matching für Podcasts |
|
|
| `PODCAST_UPDATE_INTERVAL_HOURS` | `24` | Wie oft Podcast-Feeds aktualisiert werden |
|
|
|
|
## Projektstruktur
|
|
|
|
```
|
|
audiolib/
|
|
├── backend/ Python/FastAPI Backend
|
|
│ └── app/
|
|
│ ├── models/ SQLAlchemy-Datenmodelle
|
|
│ ├── routers/ API-Endpoints
|
|
│ ├── schemas/ Pydantic-Schemas (ABS-kompatibel)
|
|
│ └── services/ Scanner, HLS, File Watcher, Matching
|
|
├── frontend/ React/Vite Web-Interface (Phase 8)
|
|
├── nginx/ Reverse-Proxy-Konfiguration
|
|
├── data/ Persistente Daten (DB, Cover, HLS-Cache)
|
|
└── docker-compose.yml
|
|
```
|
|
|
|
## API-Kompatibilität
|
|
|
|
Implementierte ABS-Endpoints:
|
|
|
|
- `POST /login` — Authentifizierung
|
|
- `GET /api/authorize` — Token-Validierung + User/Libraries
|
|
- `GET /api/libraries` — Library-Liste
|
|
- `GET /api/libraries/:id/items` — Hörbücher/Podcasts einer Library
|
|
- `GET /api/items/:id` — Einzelnes Item mit Metadaten
|
|
- `GET /api/items/:id/cover` — Cover-Bild
|
|
- `POST /api/items/:id/play` — HLS-Streaming starten
|
|
- `POST /api/playback-session/:id/sync` — Fortschritt synchronisieren
|
|
- `GET /api/me` — User-Profil mit Fortschritt
|
|
- `PATCH /api/me/progress/:id` — Hörfortschritt setzen
|
|
- `POST /api/me/bookmark/:id` — Lesezeichen setzen
|
|
- `GET /api/users` — User-Verwaltung (Admin)
|
|
- `GET /api/settings` — Server-Einstellungen
|
|
|
|
## Entwicklung
|
|
|
|
### Backend lokal starten (ohne Docker)
|
|
|
|
```bash
|
|
cd backend
|
|
pip install -r requirements.txt
|
|
cp ../.env.example .env
|
|
uvicorn app.main:app --reload --port 8000
|
|
```
|
|
|
|
### Frontend lokal starten
|
|
|
|
```bash
|
|
cd frontend
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
## Geplante Features (nächste Phasen)
|
|
|
|
- [ ] Phase 5: Matching-Engine Hörbücher (MusicBrainz, OpenLibrary, Google Books)
|
|
- [ ] Phase 6: Matching-Engine Podcasts (iTunes, Podcastindex)
|
|
- [ ] Phase 7: Vollständiger Podcast-Support (RSS-Feeds, Episoden)
|
|
- [ ] Phase 8: Vollständiges Web-Interface mit Player
|
|
- [ ] Phase 9: Web-Player mit Kapitelnavigation, Lesezeichen, Sleep-Timer
|
|
|
|
## Lizenz
|
|
|
|
MIT
|