163 lines
7.6 KiB
Markdown
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
|