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 montrerais 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: 12 bookworm
- Baïkal: 0.10.0
- sqlite3: 3.40
- php: 8.2
Un grand merci à ByteHamster l'auteur de Baïkal pour avoir rendu ce produit gratuit et Open Source.
Installation de Baïkal
- Installation des prérequis:
root@host:~# apt update && apt install apache2 php-fpm php-sqlite3 php-sabre-dav git sqlite3 unzip php libapache2-mod-php
- Télécharger la dernière version de Baïkal (voir le dépôt officiel GitHub pour la 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.10.0/baikal-0.10.0.zip
- Décompresser et déplacer le dossier vers /var/www/baikal/ :
root@host:~# unzip baikal-0.10.0.zip
root@host:~# mv baikal /var/www/baikal
- Définir www-data comme propriétaire du dossier :
root@host:~# chown -R www-data:www-data /var/www/baikal/
- Nous allons sécuriser nos connexions avec HTTPS, pour cela, nous aurons besoin de certificats Let's Encrypt ou de certificats autogénérés. Voyons comment faire avec la deuxième option :
root@host:~# mkdir /etc/apache2/ssl/
root@host:~# openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/apache2/ssl/selfsigned.key -out /etc/apache2/ssl/selsigned.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
root@host:~# cat /etc/apache2/ssl/selfsigned.key /etc/apache2/ssl/selsigned.crt > /etc/apache2/ssl/cert.pem
- Activer les modules apache2 rewrite et ssl :
root@host:~# a2enmod rewrite
root@host:~# a2enmod ssl
- Éditer le fichier de configuration /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
#AUTOGENERATE CERTIFICATES
SSLCertificateFile /etc/apache2/ssl/cert.pem
SSLCertificateKeyFile /etc/apache2/ssl/selfsigned.key
#LETS ENCRYPT CERTIFICATES
#SSLCertificateFile /etc/letsencrypt/baikal.std.rocks/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/baikal.std.rocks/privkey.pem
#SSLCertificateChainFile /etc/letsencrypt/baikal.std.rocks/chain.pem
</VirtualHost>
- Redémarrer le service apache2 :
root@host:~# systemctl restart apache2
Nous pouvons maintenant passer à 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 s'il 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.10.0/baikal-0.10.0.zip
root@host:~# unzip baikal-0.10.0.zip
- Copier les répertoire 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 :