131 lines
5.9 KiB
Markdown
131 lines
5.9 KiB
Markdown
---
|
|
title: BookHaven
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, books, epub, reader, opds, python, oidc, rbac]
|
|
confidence: medium
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=books, https://github.com/HrBingR/BookHaven]
|
|
---
|
|
|
|
# 📚 BookHaven
|
|
|
|
> **Lecteur EPUB browser-based avec gestion de bibliothèque** : scannez votre dossier local d'EPUBs, lisez et téléchargez depuis n'importe quel device, avec support OPDS et OIDC.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [github.com/HrBingR/BookHaven](https://github.com/HrBingR/BookHaven) |
|
|
| **GitHub** | [HrBingR/BookHaven](https://github.com/HrBingR/BookHaven) |
|
|
| **License** | GPL-3.0 |
|
|
| **Langage** | Python (backend), TypeScript/Vue (frontend) |
|
|
| **Étoiles** | 115 ⭐ |
|
|
| **Dernière MAJ** | 2025-11 (v1.7.x) |
|
|
| **Catégorie** | [[cat-books]] |
|
|
|
|
## Description
|
|
|
|
BookHaven est un **gestionnaire/lecteur de bibliothèque EPUB** développé comme **alternative minimale** aux solutions type Calibre-Web ou Kavita. L'auteur (HrBingR) voulait quelque chose de plus simple à déployer et plus moderne côté UI. Le pari est tenu : stack légère (Python + Vue), DB au choix (SQLite/MySQL/PostgreSQL), cache Redis, image Docker officielle.
|
|
|
|
L'application **scanne automatiquement** un dossier local d'EPUBs (intervalle configurable + scan manuel), extrait les métadonnées (titre, auteur, série, couverture) **sans toucher aux fichiers originaux** — toutes les modifications sont stockées en base. C'est un choix architectural important : BookHaven est **non-destructif**.
|
|
|
|
Côté fonctionnalités : **lecteur EPUB dans le navigateur** (basé sur Readium ou epub.js), **téléchargement** direct, **recherche** plein texte (auteur, titre, série), **filtres** par statut (favoris, terminés, en cours), **page auteur** avec grille alphabétique, **uploads** utilisateurs (avec correction de métadonnées post-upload), **RBAC basique** (admin, editor, user), **requêtes de livres** (les users peuvent demander l'ajout d'un titre), **OIDC** pour l'authentification centralisée, **OPDS** pour la lecture depuis des apps e-reader (KOReader, Moon+ Reader, etc.), et **support Cloudflare Access** pour bypass le login.
|
|
|
|
**Points forts** : non-destructif (métadonnées en DB, fichiers intacts), OIDC + RBAC + Cloudflare Access prêts à l'emploi, OPDS fonctionnel, image Docker officielle, README clair, install Docker en 4 étapes.
|
|
|
|
**Points faibles** : **EPUB uniquement** (pas de PDF, MOBI, AZW3), **bus factor 1** (un seul mainteneur), rythme de release lent (~1 release majeure/an), stack Python + Node à maintenir pour le build frontend, projets plus complets et matures (Calibre-Web, Kavita) existent.
|
|
|
|
## Installation
|
|
|
|
### Via Docker (recommandé)
|
|
|
|
L'image `hrbingr/bookhaven` est sur Docker Hub. La stack officielle inclut MySQL + Redis (mais SQLite fonctionne aussi).
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
bookhaven:
|
|
image: hrbingr/bookhaven:latest
|
|
container_name: bookhaven
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5000:5000"
|
|
env_file: .env
|
|
volumes:
|
|
- ./data:/app/data
|
|
- /chemin/vers/epubs:/library
|
|
depends_on:
|
|
- mysql
|
|
- redis
|
|
|
|
mysql:
|
|
image: mysql:8-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
MYSQL_DATABASE: bookhaven
|
|
MYSQL_USER: bookhaven
|
|
MYSQL_PASSWORD: change-me
|
|
MYSQL_ROOT_PASSWORD: change-me-root
|
|
volumes:
|
|
- bookhaven_db:/var/lib/mysql
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
bookhaven_db:
|
|
```
|
|
|
|
### Installation manuelle
|
|
|
|
Cloner le dépôt, `cp compose.exmaple.yml compose.yml` (sic, le repo contient une coquille), `cp .env.example .env`, lancer la stack.
|
|
|
|
## Configuration
|
|
|
|
1. Renommer `compose.yml.example` → `compose.yml` et `.env.example` → `.env`.
|
|
2. Choisir la base de données (`SQLITE`, `MYSQL` ou `POSTGRES` dans `.env`).
|
|
3. Définir `BASE_URL`, `APP_PORT` et un `SECRET_KEY` fort.
|
|
4. Configurer OIDC si vous avez un [[app-authentik]] ou Keycloak (sections dédiées dans `.env`).
|
|
5. Activer Cloudflare Access (`CF_ACCESS_ENABLED=true`) si vous êtes derriere un tunnel.
|
|
6. Premier démarrage : créer le compte admin, configurer le chemin de scan EPUB.
|
|
7. Activer OPDS via `OPDS_ENABLED=true` et donner l'URL à votre liseuse / app reader.
|
|
|
|
## Alternatives
|
|
|
|
### Open source
|
|
- [[app-calibre]] — Monstre sacré, EPUB/PDF/MOBI/AZW3, stack Python lourde
|
|
- **Calibre-Web** — Front web pour une DB Calibre existante, mature
|
|
- **Kavita** — Lecteur comics/manga/LN avec OPDS, interface moderne
|
|
- [[app-stump]] — Alternative Rust à Kavita
|
|
- **LibreShelves** — Outil minimaliste, EPUB/PDF, plus jeune que BookHaven
|
|
|
|
### Propriétaires
|
|
- **Calibre** (desktop, gratuit mais pas self-hostable en tant que serveur) — Le modèle historique
|
|
- **BookFusion** — Lecteur EPUB en ligne, freemium
|
|
- **Tolino** — Liseuse + écosystème cloud propriétaire
|
|
|
|
## Sécurité
|
|
|
|
- ✅ **OIDC** supporté (déléguer l'auth à Keycloak/Authentik)
|
|
- ✅ **RBAC** (admin/editor/user) — limiter qui peut uploader ou demander
|
|
- ⚠️ **Bus factor 1** : mainteneur unique, pas d'organisation derrière
|
|
- ✅ Pas d'auth native par défaut → mettre derrière HTTPS via [[app-caddy]] ou [[app-traefik]]
|
|
- ⚠️ **Uploads utilisateurs** : attention aux EPUB vérolés (XSS via EPUB malformé)
|
|
- ✅ Métadonnées stockées en DB = fichiers originaux intacts (rollback trivial)
|
|
- ⚠️ Releases peu fréquentes : rester attentif aux CVE Python/Node
|
|
|
|
## Ressources
|
|
|
|
- [GitHub HrBingR/BookHaven](https://github.com/HrBingR/BookHaven)
|
|
- [Reddit — présentation](https://www.reddit.com/r/selfhosted/comments/1ikog7v/bookhaven_a_selfhosted_epub_library_management/)
|
|
- [selfh.st Books](https://selfh.st/apps/?tag=books)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-books]] — Catégorie Books
|
|
- [[app-calibre]] — Alternative plus complète (mais plus lourde)
|
|
- [[app-kavita]] — Lecteur moderne avec OPDS, EPUB/CBZ
|
|
- [[app-authentik]] — SSO/OIDC à brancher
|
|
- [[recettes-docker-compose]] — Templates Docker
|