143 lines
5.5 KiB
Markdown
143 lines
5.5 KiB
Markdown
---
|
|
title: Jelu
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, books, social, fediverse, kotlin, spring, lecture, partage]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Books, https://github.com/bachman/jelu]
|
|
---
|
|
|
|
# 📕 Jelu
|
|
|
|
> **La plateforme de lecture sociale auto-hébergée** — catalogue de livres, suivi de lectures, critiques, et fédération ActivityPub pour partager vos avis avec Mastodon, BookWyrm et Pleroma.
|
|
|
|
| Métadonnée | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [https://github.com/bachman/jelu](https://github.com/bachman/jelu) |
|
|
| **GitHub** | [https://github.com/bachman/jelu](https://github.com/bachman/jelu) |
|
|
| **License** | MIT |
|
|
| **Langage** | Kotlin (Spring Boot) |
|
|
| **Étoiles GitHub** | 30 ⭐ |
|
|
| **Dernière MAJ** | 2025-10 |
|
|
| **Catégorie** | [[cat-books\|Books]] |
|
|
|
|
## Description
|
|
|
|
Jelu (de l'auteur, basé sur *Jelu* en espéranto) est une **plateforme de lecture sociale** écrite en **Kotlin / Spring Boot**, conçue pour self-héberger un véritable *Goodreads* personnel et **fédéré**. C'est l'une des rares alternatives à supporter nativement **ActivityPub**, ce qui lui permet d'interagir avec BookWyrm, Mastodon, Pleroma et le reste du fediverse littéraire.
|
|
|
|
L'interface propose un **catalogue de livres** enrichi par les métadonnées (Google Books, OpenLibrary), un **journal de lectures** (lu, en cours, à lire, abandonné), des **critiques** (markup simple), des **listes** thématiques, des **citations** partageables, et un **flux social** des activités des comptes que vous suivez. Chaque action (note, critique, ajout) peut être **publiée en ActivityPub** sur votre timeline Mastodon.
|
|
|
|
Côté technique : **Spring Boot 3**, base **PostgreSQL**, frontend **Vue.js** servi depuis le JAR, **OAuth2** pour la connexion via Mastodon, **WebSocket** pour les notifications temps réel, et **Docker** prêt à l'emploi. Le code est modulaire et bien testé.
|
|
|
|
**Points forts** : federation ActivityPub (rare pour une app livres), moderne (Kotlin), API REST documentée, déploiement simple, respect de la vie privée.
|
|
|
|
**Points faibles** : pas d'application mobile native, communauté encore petite (~30 étoiles), pas de lecteur EPUB intégré, l'instance solo reste un point de friction pour découvrir d'autres lecteurs (sauf via fediverse).
|
|
|
|
## Installation
|
|
|
|
### Via Docker (recommandé)
|
|
|
|
L'image officielle est publiée sur `ghcr.io` :
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
services:
|
|
jelu:
|
|
image: ghcr.io/bachman/jelu:latest
|
|
container_name: jelu
|
|
restart: unless-stopped
|
|
environment:
|
|
- JELU_DB_URL=jdbc:postgresql://db:5432/jelu
|
|
- JELU_DB_USERNAME=jelu
|
|
- JELU_DB_PASSWORD=change-me-strong
|
|
- JELU_BASE_URL=https://jelu.example.com
|
|
- JELU_ACTIVITYPUB_ENABLED=true
|
|
- JELU_OAUTH_ENABLED=true
|
|
- TZ=Europe/Paris
|
|
volumes:
|
|
- ./data:/app/data
|
|
- ./config:/app/config
|
|
ports:
|
|
- "8089:8080"
|
|
depends_on:
|
|
- db
|
|
|
|
db:
|
|
image: postgres:16-alpine
|
|
restart: unless-stopped
|
|
environment:
|
|
POSTGRES_DB: jelu
|
|
POSTGRES_USER: jelu
|
|
POSTGRES_PASSWORD: change-me-strong
|
|
volumes:
|
|
- jelu_db:/var/lib/postgresql/data
|
|
|
|
volumes:
|
|
jelu_db:
|
|
```
|
|
|
|
### Installation manuelle (JAR)
|
|
|
|
```bash
|
|
# Cloner et compiler
|
|
git clone https://github.com/bachman/jelu.git
|
|
cd jelu
|
|
./gradlew bootJar
|
|
|
|
# Lancer
|
|
java -jar build/libs/jelu-*.jar \
|
|
--spring.datasource.url=jdbc:postgresql://localhost:5432/jelu \
|
|
--spring.datasource.username=jelu \
|
|
--spring.datasource.password=changeme
|
|
```
|
|
|
|
Prérequis : **JDK 17+**, **PostgreSQL 13+**, **2 Go de RAM** minimum.
|
|
|
|
## Configuration
|
|
|
|
1. Premier lancement : accéder à `http://localhost:8089`, créer le compte admin.
|
|
2. Paramétrer **JELU_BASE_URL** (URL publique HTTPS), **JELU_ACTIVITYPUB_ENABLED** (`true`), **JELU_OAUTH_ENABLED** (`true`).
|
|
3. Configurer le **reverse-proxy** (Caddy/Nginx) avec HTTPS et WebSocket (`/ws`).
|
|
4. (Optionnel) Activer les **sources de métadonnées** : Google Books, OpenLibrary.
|
|
5. Pour la **federation ActivityPub** : vérifier que le port 443/80 est joignable depuis Internet et que le fichier `/.well-known/host-meta` est servi correctement.
|
|
|
|
## Alternatives
|
|
|
|
### Open source
|
|
- [[app-bookwyrm]] — Référence fediverse livres, plus mature
|
|
- [[app-neodb]] — Catalogue social type Letterboxd pour livres
|
|
- [[app-mastodon]] — Pour la partie microblogage généraliste
|
|
- [[app-funkwhale]] — Federation audio (autre type de média)
|
|
- **OpenReads** — Suivi local sans réseau social
|
|
|
|
### Propriétaires
|
|
- **Goodreads** — Le géant Amazon, tracking publicitaire
|
|
- **StoryGraph** — Moderne, freemium, pas self-hostable
|
|
- **Babelio** — Francophone, propriétaire
|
|
|
|
## Sécurité
|
|
|
|
- ✅ **Authentification** : email + mot de passe (bcrypt), OAuth2 (Mastodon)
|
|
- ✅ **HTTPS** obligatoire (HSTS)
|
|
- ✅ **CSRF** + **CORS** configurables
|
|
- ✅ **Modération** : blocage de comptes, signalements
|
|
- ⚠️ **Activité ActivityPub** : un compte public attire les bots Mastodon
|
|
- ⚠️ **Sauvegardes** : `pg_dump` régulier de la base (volume `jelu_db`)
|
|
- ⚠️ **Pas de 2FA** natif — coupler avec Authelia/Authentik
|
|
|
|
## Ressources
|
|
|
|
- [Dépôt GitHub](https://github.com/bachman/jelu)
|
|
- [Wiki / Documentation](https://github.com/bachman/jelu/wiki)
|
|
- [selfh.st — Books](https://selfh.st/apps/?tag=Books)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-books]] — Catégorie parente
|
|
- [[app-bookwyrm]] — Alternative fediverse plus mature
|
|
- [[app-neodb]] — Catalogue social type Letterboxd
|
|
- [[recettes-docker-compose]] — Templates Docker
|
|
- [[app-caddy]] — Reverse-proxy HTTPS
|