Installer un serveur CalDAV/CardDAV Baïkal sur Debian 13
- Mise à jour le 24 oct. 2026
Baïkal est un serveur CalDAV et CardDAV léger et open source qui permet d’héberger et de synchroniser vos calendriers et vos contacts sur votre propre infrastructure. Il constitue une alternative simple aux services de synchronisation dans le cloud.
J’ai longtemps utilisé Zimbra, dont j’appréciais l’interface web, la gestion des courriels et les fonctions de calendrier partagé. Son édition gratuite et open source répondait bien à mes besoins, même si sa maintenance et ses mises à jour sont progressivement devenues plus complexes. Cependant, au fil des changements de propriétaire et de licence, la disponibilité et l’avenir de cette édition sont devenus de plus en plus incertains. J’ai donc commencé à rechercher des alternatives pour ses différents composants : calendrier, webmail, etc.
Dans cet article, je vous explique comment installer et configurer un serveur CalDAV/CardDAV Baïkal sur Debian 13, activer un accès sécurisé en HTTPS et synchroniser vos calendriers avec Thunderbird et DAVx⁵ sur Android. Baïkal propose également une interface web d’administration pour gérer les utilisateurs, les calendriers et les carnets d’adresses.
Pour cette installation, nous utiliserons SQLite, qui convient bien à un petit nombre d’utilisateurs et nécessite peu d’administration.
- Configuration:
- Debian: 13 (Trixie)
- Baïkal: 0.13.0
- SQLite: 3.46
- PHP: 8.4
Et un grand merci à ByteHamster pour assurer la maintenance de Baïkal, ce projet libre et open source.
Installation de Baïkal
Prérequis
- Installez les paquets nécessaires :
root@host:~# apt update && apt install apache2 php-sqlite3 git sqlite3 unzip php php-xml libapache2-mod-php
- Téléchargez la dernière version de Baïkal en consultant le dépôt GitHub officiel : versions de Baïkal :
root@host:~# wget https://github.com/sabre-io/Baikal/releases/download/0.13.0/baikal-0.13.0.zip
- Décompressez l’archive et déplacez le dossier dans
/var/www/baikal/:
root@host:~# unzip baikal-0.13.0.zip
root@host:~# mv baikal /var/www/baikal
- Définissez
www-datacomme propriétaire du dossier :
root@host:~# chown -R www-data:www-data /var/www/baikal/
Certificats TLS
Pour activer HTTPS sur votre serveur Baïkal, vous avez besoin de certificats TLS. Vous pouvez générer des certificats autosignés ou utiliser des certificats Let’s Encrypt.
Les certificats autosignés sont faciles à générer, mais les appareils et applications externes ne leur font pas confiance par défaut. Les clients affichent donc des avertissements de sécurité lors de la connexion au serveur.
Let’s Encrypt fournit des certificats TLS gratuits et reconnus publiquement. Ils sont automatiquement reconnus par les systèmes d’exploitation, les navigateurs et les clients CalDAV/CardDAV, ce qui évite les avertissements de sécurité.
Ce guide présente les deux méthodes afin que vous puissiez choisir celle qui convient le mieux à votre environnement.
Certificats autosignés
- Créez d’abord le répertoire
/etc/apache2/ssl/pour y stocker les certificats TLS et les clés privées :
root@host:~# mkdir /etc/apache2/ssl/
- Générez le certificat TLS autosigné avec
openssl:
root@host:~# openssl req -x509 -nodes -days 3650 \
-newkey rsa:4096 \
-keyout /etc/apache2/ssl/selfsigned.key \
-out /etc/apache2/ssl/selfsigned.crt \
-subj "/CN=baikal.std.rocks" \
-addext "subjectAltName=DNS:baikal.std.rocks"
- Limitez les permissions de la clé privée
selfsigned.keyafin que seul son propriétaire puisse la lire ou la modifier :
root@host:~# chmod 600 /etc/apache2/ssl/selfsigned.key
- Modifiez le fichier de configuration du VirtualHost Apache
/etc/apache2/sites-available/000-default.conf:
<VirtualHost *:443>
DocumentRoot /var/www/baikal/html
ServerName baikal.std.rocks
RewriteEngine On
# Généralement déjà défini dans la configuration globale d’Apache
#RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule /.well-known/carddav /dav.php [R=308,L]
RewriteRule /.well-known/caldav /dav.php [R=308,L]
<Directory "/var/www/baikal/html">
Options None
# Cette option peut être nécessaire en cas d’installation par clonage du dépôt Git
Options +FollowSymlinks
AllowOverride None
# Configuration pour Apache 2.4 :
Require all granted
</Directory>
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
SSLEngine On
#PARAMÈTRES SSL SÉCURISÉS
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder On
#CERTIFICATS AUTOSIGNÉS
SSLCertificateFile /etc/apache2/ssl/selfsigned.crt
SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key
#CERTIFICATS LET’S ENCRYPT
#SSLCertificateFile /etc/letsencrypt/live/baikal.std.rocks/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/baikal.std.rocks/privkey.pem
</VirtualHost>
Certificats Let's Encrypt
- Arrêtez d’abord le service Apache pour permettre à Certbot d’écouter sur le port HTTP pendant la validation du certificat :
root@host:~# systemctl stop apache2.service
- Installez le paquet
certbot:
root@debian:~# apt update && sudo apt install certbot
- Utilisez
certbotpour demander un certificat SSL/TLS Let’s Encrypt. Remplacezbaikal.std.rockspar votre nom de domaine etletsencrypt@std.rockspar votre adresse électronique d’administration :
root@debian:~# certbot certonly --standalone -d baikal.std.rocks --email letsencrypt@std.rocks --agree-tos --noninteractive
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for baikal.std.rocks
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/baikal.std.rocks/fullchain.pem
Key is saved at: /etc/letsencrypt/live/baikal.std.rocks/privkey.pem
This certificate expires on 2026-04-23.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Modifiez le fichier de configuration du VirtualHost Apache
/etc/apache2/sites-available/000-default.conf:
<VirtualHost *:443>
DocumentRoot /var/www/baikal/html
ServerName baikal.std.rocks
RewriteEngine On
# Généralement déjà défini dans la configuration globale d’Apache
#RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule /.well-known/carddav /dav.php [R=308,L]
RewriteRule /.well-known/caldav /dav.php [R=308,L]
<Directory "/var/www/baikal/html">
Options None
# Cette option peut être nécessaire en cas d’installation par clonage du dépôt Git
Options +FollowSymlinks
AllowOverride None
# Configuration pour Apache 2.4 :
Require all granted
</Directory>
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
SSLEngine On
#PARAMÈTRES SSL SÉCURISÉS
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder On
#CERTIFICATS AUTOSIGNÉS
#SSLCertificateFile /etc/apache2/ssl/selfsigned.crt
#SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key
#CERTIFICATS LET’S ENCRYPT
SSLCertificateFile /etc/letsencrypt/live/baikal.std.rocks/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/baikal.std.rocks/privkey.pem
</VirtualHost>
Finaliser la configuration
Une fois votre certificat autosigné ou Let’s Encrypt généré, vous pouvez poursuivre l’installation de Baïkal.
- Activez les modules Apache nécessaires à la réécriture des URL et à la prise en charge de SSL :
root@host:~# a2enmod rewrite
root@host:~# a2enmod ssl
- Redémarrez le service Apache pour appliquer la configuration :
root@host:~# systemctl restart apache2
Vous pouvez maintenant configurer Baïkal.
Configuration de Baïkal
- Ouvrez un navigateur et accédez à l’interface web de Baïkal avec l’adresse IP du serveur (
https://IP_SERVER) ou son nom DNS (https://DNS_NAME), puis définissez le mot de passe administrateur :
- Conservez la configuration par défaut de la base de données (SQLite), puis cliquez sur Save changes (Enregistrer les modifications) :
- Cliquez ensuite sur Start using Baïkal (Commencer à utiliser Baïkal) :
- Saisissez le mot de passe défini précédemment et cliquez sur Authenticate (S’authentifier) :
- Pour ajouter des utilisateurs, cliquez sur Users and Resources (Utilisateurs et ressources) dans le tableau de bord :
- Cliquez ensuite sur Add User (Ajouter un utilisateur) :
- Renseignez les informations du nouveau compte et cliquez sur Save changes (Enregistrer les modifications) :
- L’utilisateur est créé. Cliquez sur Calendars (Calendriers) :
- Vous pouvez ici ajouter un calendrier et obtenir son URI, qui peut être utile selon le client de calendrier :
Configurer les clients de calendrier
Notre serveur de calendriers partagés est maintenant opérationnel. Nous allons y connecter les clients. Je vous présente la configuration de Thunderbird, qui intègre un agenda, et de l’application DAVx⁵, qui permet de synchroniser les calendriers sur les appareils Android.
Thunderbird
- Ouvrez Thunderbird, cliquez sur le bouton Agenda, puis sélectionnez Nouvel agenda… (New Calendar) :
- Sélectionnez Sur le réseau (On the Network), puis cliquez sur Suivant (Next) :
- Saisissez le nom d’utilisateur et l’URL du serveur Baïkal avec son adresse IP (
https://IP_SERVER) ou son nom DNS (https://DNS_NAME), puis cliquez sur Rechercher des agendas (Find Calendars) :
- Si vous utilisez un certificat autosigné, confirmez l’exception de sécurité :
- Saisissez le mot de passe de l’utilisateur créé précédemment :
- Cliquez enfin sur S’abonner (Subscribe) pour ajouter le calendrier :
- Le calendrier partagé apparaît dans Thunderbird :
DAVx⁵
- Ouvrez l’application DAVx⁵ et appuyez sur le symbole plus pour ajouter un compte :
- Sélectionnez Connexion avec une URL (Connect with URL) et renseignez les informations demandées :
- Comme dans Thunderbird, un avertissement s’affiche si le certificat est autosigné. Appuyez sur Accepter (Accept) :
- Appuyez enfin sur Créer (Create) :
Mettre à jour Baïkal
Baïkal est activement maintenu et de nouvelles versions paraissent régulièrement. Voici comment mettre à jour Baïkal tout en conservant les données des utilisateurs. Comme pour toute opération de ce type, commencez par effectuer une sauvegarde complète de votre système.
- Arrêtez le service
apache2:
root@host:~# systemctl stop apache2
- Sauvegardez la base de données
sqlite3:
root@host:~# sqlite3 /var/www/baikal/Specific/db/db.sqlite ".backup 'backup.db.sqlite'"
- Sauvegardez le dossier baikal :
root@host:~# cp -a /var/www/baikal /var/www/$(date +%Y%m%d).baikal
- Téléchargez la dernière version de Baïkal depuis le dépôt officiel, puis décompressez-la dans
/tmp/:
root@host:~# cd /tmp/
root@host:~# wget https://github.com/sabre-io/Baikal/releases/download/0.13.0/baikal-0.13.0.zip
root@host:~# unzip baikal-0.13.0.zip
- Copiez les dossiers config et Specific de l’installation actuelle dans
/tmp/baikal:
root@host:~# cp -ra /var/www/baikal/config /tmp/baikal/
root@host:~# cp -ra /var/www/baikal/Specific /tmp/baikal/
- Renommez l’ancien dossier baikal :
root@host:~# cd /var/www/
root@host:~# mv baikal baikal.OLD
- Déplacez la nouvelle version de baikal dans
/var/www/:
root@host:~# mv /tmp/baikal /var/www/
- Rétablissez
www-datacomme propriétaire des fichiers :
root@host:~# chown -R www-data:www-data /var/www/baikal/
- Démarrez le service
apache:
root@host:~# systemctl start apache2
- Ouvrez la page d’administration de Baïkal, par exemple
https://baikal.std.rocks/admin/install/, puis cliquez sur Start the upgrade (Démarrer la mise à jour) :