Mise en place d'un calendrier partagé sur Debian Linux avec Baïkal
- Mise à jour le 11 janv. 2026
J'utilisais depuis quelques années le logiciel Zimbra, car son interface web est agréable et qu'il propose un calendrier. Initialement, il existait une version gratuite et open source qui remplissait parfaitement bien son rôle, et même si elle était devenue de plus en plus difficile à maintenir et à mettre à jour, elle restait globalement une solution correcte. Cependant, avec les développements récents (depuis la version 8.5 en fait) et des changements de propriétaires, l'édition gratuite a été complètement abandonnée. Je me suis donc retrouvé à la recherche de solutions alternatives pour les différents modules (calendrier, webmail, etc…).
Cet article se concentrera sur la mise en place d'un serveur de calendrier partagé. Je montrerai ici comment mettre en place la solution Baïkal sur GNU/Linux, qui supporte nativement CalDAV et CardDAV. Son interface web rend la gestion des utilisateurs et services plutôt aisée.
La base de données sqlite3 est un choix parfait pour un nombre raisonnable d'utilisateurs.
- Configuration:
- Debian: 13 (trixie)
- Baïkal: 0.11.1
- sqlite3: 3.46
- PHP: 8.4
Un grand merci à ByteHamster l'auteur de Baïkal pour avoir rendu ce produit gratuit et Open Source.
Installation de Baïkal
Prérequis
- Installation des prérequis:
root@host:~# apt update && apt install apache2 php-sqlite3 git sqlite3 unzip php php-xml libapache2-mod-php
- Télécharger la dernière version de Baïkal (voir le dépôt officiel GitHub pour vérifier la dernière version https://github.com/sabre-io/Baikal/releases) :
root@host:~# wget https://github.com/sabre-io/Baikal/releases/download/0.11.1/baikal-0.11.1.zip
- Décompresser et déplacer le dossier vers
/var/www/baikal/:
root@host:~# unzip baikal-0.11.1.zip
root@host:~# mv baikal /var/www/baikal
- Définir
www-datacomme propriétaire du dossier :
root@host:~# chown -R www-data:www-data /var/www/baikal/
Certificats
Pour activer HTTPS sur votre serveur Baïkal, vous devez disposer de certificats TLS. Vous pouvez choisir entre la génération de certificats auto-signés ou l’utilisation de certificats Let’s Encrypt.
Les certificats auto-signés sont simples à générer, mais ils ne sont pas reconnus par défaut par les appareils et applications externes. En conséquence, des avertissements de sécurité s’afficheront lors de la connexion des clients à votre serveur.
Let’s Encrypt fournit des certificats TLS gratuits et reconnus publiquement. Les certificats émis par Let’s Encrypt sont automatiquement approuvés par les systèmes d’exploitation, les navigateurs web et les clients CalDAV/CardDAV, ce qui permet d’éviter les alertes de sécurité.
Dans ce guide, les deux méthodes sont présentées afin que vous puissiez choisir la solution la plus adaptée à votre environnement.
Certificats auto-signés
- Commencez par créer le répertoire
/etc/apache2/ssl/, qui sera utilisé pour stocker les certificats TLS ainsi que les clés privées associées :
root@host:~# mkdir /etc/apache2/ssl/
- Générez le certificat TLS auto-signé à l’aide de
openssl:
root@host:~# openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/apache2/ssl/selfsigned.key -out /etc/apache2/ssl/selfsigned.crt
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:The Elements Of A State
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:STD Corp
Organizational Unit Name (eg, section) []:STD Department
Common Name (e.g. server FQDN or YOUR name) []:baikal.std.rocks
Email Address []:baikal@std.rocks
- Créez le fichier
cert.pemen concaténant la clé privée et le certificat :
root@host:~# cat /etc/apache2/ssl/selfsigned.key /etc/apache2/ssl/selfsigned.crt > /etc/apache2/ssl/cert.pem
- 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
# Generally already set by global Apache configuration
#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
# If you install cloning git repository, you may need the following
Options +FollowSymlinks
AllowOverride None
# Configuration for apache-2.4:
Require all granted
# Configuration for apache-2.2:
# Order allow,deny
# Allow from all
</Directory>
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
SSLEngine On
#SECURE SSL
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder On
#AUTOGENERATE CERTIFICATES
SSLCertificateFile /etc/apache2/ssl/cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key
#LETS ENCRYPT CERTIFICATES
#SSLCertificateFile /etc/letsencrypt/live/baikal.std.rocks/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/baikal.std.rocks/privkey.pem
</VirtualHost>
Certificats Let’s Encrypt
- Commencez par arrêter le service Apache afin de permettre à Certbot d’écouter sur le port HTTP durant le processus de 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 propre nom de domaine etletsencrypt@std.rockspar votre adresse e-mail 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 mail.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
# Generally already set by global Apache configuration
#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
# If you install cloning git repository, you may need the following
Options +FollowSymlinks
AllowOverride None
# Configuration for apache-2.4:
Require all granted
# Configuration for apache-2.2:
# Order allow,deny
# Allow from all
</Directory>
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
SSLEngine On
#SECURE SSL
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder On
#AUTOGENERATE CERTIFICATES
#SSLCertificateFile /etc/apache2/ssl/cert.pem
#SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key
#LETS ENCRYPT CERTIFICATES
SSLCertificateFile /etc/letsencrypt/live/baikal.std.rocks/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/baikal.std.rocks/privkey.pem
</VirtualHost>
Finalisation de la configuration
Une fois votre certificat auto-signé ou Let’s Encrypt généré, vous pouvez poursuivre l’installation de Baïkal.
- Activez les modules Apache requis pour 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 afin d’appliquer les modifications de configuration :
root@host:~# systemctl restart apache2
Vous pouvez maintenant poursuivre avec la configuration de Baïkal.
Configuration de Baïkal
- Ouvrir un navigateur web et se connecter à l'interface web de Baïkal (
https://IP_SERVER) afin de paramétrer le mot de passe administrateur :
- Garder la configuration par défaut et cliquer sur Enregistrer les modifications :
- Enfin, cliquer sur Commencer à utiliser Baïkal :
- Utiliser le mot de passe configuré précédemment et cliquer sur S'authentifier :
- Pour ajouter des utilisateurs, cliquer sur Utilisateurs et ressources depuis le tableau de bord :
- Ensuite, cliquer sur le bouton Ajouter un utilisateur :
- Saisir les informations du nouveau compte et cliquer sur Enregistrer les modifications :
- L'utilisateur est maintenant créé. Cliquer sur le bouton Calendriers :
- À partir de là, on pourra ajouter un calendrier et obtenir les informations URI (qui peuvent être utiles en fonction du client de calendrier) :
Configuration des Clients de Calendrier
À ce stade, nous disposons d'un serveur de calendrier partagé fonctionnel. Passons donc maintenant à la connexion des clients. Je vais ici montrer comment faire avec Thunderbird, qui dispose d'un calendrier intégré, ainsi qu'avec l'application Android DAVx5, qui permet la synchronisation avec les calendriers sur les appareils Android.
Thunderbird
- Ouvrir Thunderbird et cliquer sur le bouton calendrier, puis sélectionner Nouveau calendrier… :
- Sélectionner Sur le réseau puis cliquer sur le bouton Suivant :
- Ajouter le nom d'utilisateur et l'URL
https://IP_SERVER, puis cliquer sur Trouver des calendriers :
- Si on a utilisé un certificat auto-signé, il faudra accepter l'exception de sécurité :
- Saisir le mot de passe de l'utilisateur précédemment créé :
- Enfin, cliquer sur S'abonner pour ajouter le calendrier :
- Le calendrier partagé apparaîtra :
DAVx5
- Ouvrir l'application DAVx5 et cliquer sur le symbole plus pour ajouter un compte :
- Sélectionner Se connecter avec URL et saisir les informations demandées :
- Comme avec Thunderbird, on recevra un avertissement concernant le certificat si ce dernier est auto-signé. Cliquer simplement sur Accepter :
- Enfin, cliquer sur Créer :
Mettre à jour Baïkal
Baïkal est un logiciel maintenu, de nouvelles versions sortent donc avec le temps. Je vais expliquer ici comment mettre à jour Baïkal tout en préservant les données de l'utilisateur. La première étape, comme d'habitude pour ce genre d'opération, sera de faire une sauvegarde complète de votre système.
- Arrêter le service
apache2:
root@host:~# systemctl stop apache2
- Sauvegarder la base de données
sqlite3:
root@host:~# sqlite3 /var/www/baikal/Specific/db/db.sqlite ".backup 'backup.db.sqlite'"
- Sauvegarder le dossier baikal :
root@host:~# cp -a /var/www/baikal /var/www/$(date +%Y%m%d).baikal
- Télécharger la dernière version (on pourra vérifier ici : https://github.com/sabre-io/Baikal/releases) de Baïkal et décompresser l'archive dans
/tmp/:
root@host:~# cd /tmp/
root@host:~# wget https://github.com/sabre-io/Baikal/releases/download/0.11.1/baikal-0.11.1.zip
root@host:~# unzip baikal-0.11.1.zip
- Copier les répertoires actuels config et Specific dans
/tmp/baikal:
root@host:~# cp -ra /var/www/baikal/config /tmp/baikal/
root@host:~# cp -ra /var/www/baikal/Specific /tmp/baikal/
- Désactiver l'ancien dossier baikal :
root@host:~# cd /var/www/
root@host:~# mv baikal baikal.OLD
- Déplacer la nouvelle version de baikal dans
/var/www/:
root@host:~# mv /tmp/baikal /var/www/
- Redonner les droits à
www-data:
root@host:~# chown -R www-data:www-data /var/www/baikal/
- Démarrer le service
apache:
root@host:~# systemctl start apache2
- Ouvrir la page d'administration de Baïkal (exemple :
https://baikal.std.rocks/admin/install/) et cliquer sur Start the upgrade :