Files
wiki/Catalogue-Self-Hosted/apps/app-baikal.md
T
2026-06-09 18:40:21 +02:00

163 lines
7.6 KiB
Markdown

---
title: Baïkal
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, calendar, caldav, carddav, php, lightweight, ui]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=calendar]
---
# 🌙 Baïkal
> **Le serveur CalDAV/CardDAV « clé en main » en PHP**, basé sur [[app-sabre-dav]]. C'est la version **avec UI admin** : installation en 5 minutes, gestion des utilisateurs via une interface web, et c'est tout. L'alternative la plus populaire à [[app-radicale]] côté PHP.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [sabre.io/baikal](https://sabre.io/baikal/) |
| **GitHub** | [sabre-io/Baikal](https://github.com/sabre-io/Baikal) |
| **License** | GPL-3.0 (Baïkal UI), avec sabre/dav en BSD-3 en dessous |
| **Langage** | PHP 8.1+ |
| **Étoiles** | 316 ⭐ |
| **Dernière MAJ** | 2026-03 (v0.10.x « Baïkal 2 ») |
| **Catégorie** | [[cat-calendar]] |
## Description
**Baïkal** (parfois écrit Baïkal, ou Baikal) est né en 2013 comme un wrapper « **UI admin** » au-dessus de [[app-sabre-dav]]. L'idée : ne pas demander à un admin système d'éditer un fichier PHP pour créer un utilisateur, mais lui donner une **interface web** pour gérer utilisateurs, calendriers et carnets d'adresses, le tout reposant sur la **librairie sabre/dav** qui reste la référence CalDAV/CardDAV en PHP.
Concrètement, Baïkal est une application PHP traditionnelle (Composer, Zend Framework minimaliste, PDO/SQLite/MySQL) qui expose une **UI d'admin Bootstrap** sur `/admin/` et un **serveur CalDAV/CardDAV** sur `/dav/`. Chaque utilisateur peut avoir plusieurs calendriers et carnets d'adresses. L'auth est basique (login/mot de passe en DB), des **plugins** permettent d'ajouter LDAP ou IMAP. La force du projet : **toute la conformité CalDAV** est déléguée à sabre/dav, Baïkal n'est qu'une surcouche admin.
**Points forts** : **UI web admin** (ce qui manque à [[app-radicale]]), **clé en main** : Docker, 5 minutes, ça marche, basé sur la **librairie la plus conforme** aux RFCs (sabre/dav), licence GPL-3.0, **SQLite** par défaut (pas de DB à gérer pour un petit setup), support CardDAV intégré, support CalDAV complet (iTip/iMip), **maturité** (le projet existe depuis 2013, très stable), communauté active.
**Points faibles** : **PHP** = stack à part (mais l'image Docker le rend indolore), **pas de clustering** natif (au-delà de quelques dizaines d'utilisateurs, passer à Nextcloud ou DAViCal), **sécurité de l'UI admin** = à protéger derrière HTTPS et idéalement restriction IP, **mise à jour manuelle** de la base de temps en temps (migrations SQLite), **pas de app store** ni d'API REST (c'est CalDAV, c'est tout), pas d'auth native **OAuth/OIDC** (LDAP via plugin).
## Installation
### Via Docker (méthode recommandée)
L'image **ckulka/baikal** ou **cschlosser/baikal** sont des images communautaires bien tenues. Voici la version la plus utilisée :
```yaml
# docker-compose.yml
services:
baikal:
image: ckulka/baikal:latest
container_name: baikal
restart: unless-stopped
ports:
- "8800:8800"
environment:
BAIKAL_ADMIN_PASSWORD: changez-moi
BAIKAL_DATABASE: sqlite
TZ: Europe/Paris
volumes:
- ./config:/var/www/baikal/config
- ./data:/var/www/baikal/Specific
```
UI admin : `http://localhost:8800/admin/` (login par défaut `admin` / `admin` ou `baikal` selon l'image). Serveur CalDAV : `http://localhost:8800/dav.php/`.
### Avec MySQL (au-delà de SQLite)
```yaml
services:
baikal:
image: ckulka/baikal:latest
restart: unless-stopped
ports:
- "8800:8800"
environment:
BAIKAL_DATABASE: mysql
BAIKAL_MYSQL_HOST: db
BAIKAL_MYSQL_DB: baikal
BAIKAL_MYSQL_USER: baikal
BAIKAL_MYSQL_PASSWORD: secret-db
volumes:
- ./config:/var/www/baikal/config
- ./data:/var/www/baikal/Specific
depends_on:
- db
db:
image: mysql:8
restart: unless-stopped
environment:
MYSQL_DATABASE: baikal
MYSQL_USER: baikal
MYSQL_PASSWORD: secret-db
MYSQL_ROOT_PASSWORD: secret-root
volumes:
- ./mysqldata:/var/lib/mysql
```
### Installation manuelle
PHP 8.1+, Composer, Apache/Nginx, SQLite ou MySQL. Télécharger la dernière release sur GitHub, décompresser, pointer un vhost sur le dossier `html/`, lancer `/admin/install/` dans le navigateur, suivre l'assistant (création du `config.php`, compte admin, choix SQLite/MySQL).
## Configuration
1. **Premier accès** : `https://baikal.example.com/admin/` → login `admin` / `admin` (CHANGER IMMÉDIATEMENT).
2. **Créer un utilisateur** : `Users → Add user` → username, password (bcrypt), display name, e-mail.
3. **Créer un calendrier** pour cet utilisateur : `Calendars → Add calendar` → nom, couleur, description.
4. **Connecter un client** : dans Thunderbird / iOS / DAVx5 / GNOME Online Accounts :
- URL CalDAV : `https://baikal.example.com/dav.php/calendars/alice/`
- User : `alice`
- Password : celui saisi à l'étape 2
5. **Activer LDAP** (optionnel) : plugin `ldap` ou `carddav` côté serveur.
6. **Timezone et locale** : `Settings → System` → fuseau horaire, format de date.
7. **Logs** : `config/SYSTEM/ENABLE_LOGGING = true` pour debug CalDAV.
## Alternatives
### Open Source
- [[app-radicale]] — **Concurrent direct** en Python, sans UI admin
- [[app-davical]] — Serveur CalDAV en PHP/PostgreSQL, plus « entreprise »
- [[app-sabre-dav]] — La **librairie** sur laquelle Baïkal est construit
- [[app-etesync]] — CalDAV-compatible mais avec **chiffrement E2E**
- **Xandikos** — Serveur CalDAV/CardDAV en Python, plus strict
- **DAViCal** — Concurrent historique PHP/PostgreSQL
- [[app-nextcloud]] — Suite complète (calendrier, contacts, fichiers, etc.)
### Propriétaires (ce que Baïkal remplace)
- **iCloud Calendar / Contacts** — Le service d'Apple, fermé
- **Google Calendar / Contacts** — Le géant, pas self-hostable
- **Outlook.com Calendar / People** — Microsoft, fermé
- **Yahoo Calendar** — Discontinué
- **fruux** (projet Evert Pot) — Service commercial de l'auteur de sabre/dav, fermé en 2022
## Sécurité
-**HTTPS obligatoire** (Let's Encrypt via [[app-traefik]] ou Caddy)
-**Mots de passe bcrypt** côté serveur
- ⚠️ **UI admin** : restreindre l'accès (restriction IP, 2FA via reverse-proxy) car c'est le point sensible
-**CSRF tokens** sur les formulaires admin
- ⚠️ **SQLite par défaut** : parfait pour ~10 users, migrer MySQL/PostgreSQL au-delà
-**GPL-3.0** = auditable
-**Pas de télémétrie** (contrairement aux SaaS)
- ⚠️ **Updates** : suivre les releases GitHub, surtout les CVE PHP-CGI (cf. 2024-2025)
- ⚠️ **Pas de rate-limiting natif** : déléguer à Nginx/Traefik
## Ressources
- [Site officiel](https://sabre.io/baikal/)
- [Documentation](https://sabre.io/baikal/install/)
- [Dépôt GitHub](https://github.com/sabre-io/Baikal)
- [Docker Hub ckulka/baikal](https://hub.docker.com/r/ckulka/baikal)
- [Forum sabre.io](https://groups.google.com/g/sabre)
- [selfh.st Calendar](https://selfh.st/apps/?tag=calendar)
- [RFC CalDAV 4791](https://datatracker.ietf.org/doc/html/rfc4791)
- [RFC CardDAV 6352](https://datatracker.ietf.org/doc/html/rfc6352)
## Pages Liées
- [[cat-calendar]] — Catégorie Calendar
- [[app-sabre-dav]] — **La librairie sur laquelle Baïkal est construit**
- [[app-davical]] — Concurrent PHP CalDAV plus orienté entreprise
- [[app-radicale]] — Concurrent Python minimaliste
- [[app-etesync]] — Calendrier E2E
- [[app-cal-com]] — Scheduler qui se connecte à Baïkal
- [[recettes-docker-compose]] — Templates Docker
- [[app-traefik]] — Reverse-proxy HTTPS