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

7.6 KiB


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
GitHub 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 :

# 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)

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-radicaleConcurrent 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

Pages Liées