Initial commit: Phase 1 – Projektstruktur, DB-Schema, Core-API
- 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>
This commit is contained in:
123
README.md
Normal file
123
README.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user