D_la solution contacts et calendrier
Solution d'unification des contacts et de calendrier de Julien par Claude
Solution Contacts et Calendrier — Baïkal + Roundcube
Objectif
Unifier la base de contacts et calendriers dispersée entre plusieurs sources (Google, Infomaniak, téléphone) autour d'un point central self-hosté sur le VPS juxjux.ovh, synchronisé vers tous les clients existants.
Vue d'ensemble de l'architecture
Composant
Rôle
Emplacement
Baïkal
Serveur CardDAV + CalDAV — stockage central des contacts et calendriers
Docker, VPS juxjux.ovh
Roundcube
Interface web de saisie/lecture (contacts + calendrier)
Docker, VPS juxjux.ovh
Nginx
Reverse proxy HTTPS pour les deux services
Hôte VPS
DAVx5
Pont de synchronisation CardDAV/CalDAV vers Android
Téléphone
Fossify Agenda
Client calendrier
Téléphone (via DAVx5)
Thunderbird
Client mail (indépendant de ce circuit)
Téléphone
vdirsyncer (à mettre en place)
Agrège les contacts Google et Infomaniak vers Baïkal
VPS, cron
Schéma de flux
Code
Baïkal est la source de vérité unique. Roundcube et DAVx5 en sont des clients ; vdirsyncer est le seul composant qui écrit depuis l'extérieur (Google/Infomaniak) vers Baïkal.
Pourquoi ce choix
Radicale a été écarté (stockage fichier brut, pas de vraie gestion) — clarification : la stack Radicale/InfCloud initialement envisagée n'a finalement pas été mise en place.
Nextcloud a été écarté : trop lourd pour l'usage visé (PHP-FPM + DB + Redis + écosystème complet), alors que le VPS fait déjà tourner PostGIS, Metabase, BookStack, FreshRSS.
Baïkal retenu : léger (PHP + SQLite/MariaDB, quelques dizaines de Mo de RAM), CardDAV + CalDAV natifs, interface d'admin suffisante pour la gestion des carnets/calendriers.
Roundcube retenu comme interface de saisie/lecture (Baïkal n'a pas de vraie UI de consultation) : léger, traduit en français, projet actif (dernière version majeure 1.7.0, mises à jour de sécurité régulières).
Alternative envisagée puis écartée : Thunderbird containerisé (VNC/noVNC) — fonctionnel mais plus lourd en ressources et moins adapté au multi-accès qu'un vrai webmail.
Déploiement — Stack Docker
Fichiers de référence : docker-compose.yml, config/carddav.php, nginx/baikal.conf, nginx/roundcube.conf.
1. Lancer les conteneurs
Bash
Services démarrés :
baikal (image ckulka/baikal:nginx) — exposé en local sur 127.0.0.1:8081
roundcube-db (MariaDB) — base de données Roundcube
roundcube (image roundcube/roundcubemail) — exposé en local sur 127.0.0.1:8082
⚠️ Remplacer les valeurs CHANGE_ME_... du compose (mots de passe DB) avant le premier démarrage.
2. Configuration initiale Baïkal
Aller sur https://baikal.juxjux.ovh/admin/
Créer le compte administrateur
Créer un utilisateur
Créer pour cet utilisateur :
un carnet de contacts (ex. default)
un calendrier (ex. default)
Noter les URLs générées :
Contacts : https://baikal.juxjux.ovh/dav.php/addressbooks/USERNAME/default/
Calendrier : https://baikal.juxjux.ovh/dav.php/calendars/USERNAME/default/
3. Reverse proxy Nginx
Deux vhosts à activer sur l'hôte (/etc/nginx/sites-available/) :
baikal.juxjux.ovh → proxy vers 127.0.0.1:8081
mail.juxjux.ovh → proxy vers 127.0.0.1:8082
Bash
Point d'attention : CardDAV/CalDAV envoient les identifiants en Basic Auth à chaque synchronisation (DAVx5 notamment) → HTTPS obligatoire, jamais de HTTP nu au-delà du proxy local.
4. Plugins Roundcube
Deux plugins activés via ROUNDCUBEMAIL_PLUGINS dans le compose : carddav et calendar.
Contacts (carddav) — config dans config/carddav.php, monté dans le conteneur :
URL pointée vers le carnet de contacts Baïkal créé à l'étape 2
%u / %p réutilisent les identifiants de connexion Roundcube (si mêmes comptes que Baïkal)
Calendrier (calendar) — configuration depuis l'interface :
Se connecter à Roundcube
Réglages → Calendrier → Calendriers
Ajouter une source CalDAV avec l'URL calendrier Baïkal
Côté téléphone — DAVx5
Ajouter un compte avec l'URL de base : https://baikal.juxjux.ovh/dav.php/
DAVx5 découvre automatiquement le carnet de contacts et le calendrier
Activer la synchronisation vers :
Fossify Agenda (calendrier)
App Contacts Android (contacts)
Thunderbird sur le téléphone reste indépendant de ce circuit (gère uniquement les mails)
Agrégation Google / Infomaniak — vdirsyncer (étape suivante, non encore déployée)
Objectif : faire remonter dans Baïkal les contacts existants sur les comptes Google et Infomaniak, pour que Baïkal devienne le point central réel et pas seulement un nouveau silo.
Google Contacts : accès CardDAV via https://www.google.com/carddav/v1/principals/EMAIL/ — nécessite un mot de passe d'application (compte avec 2FA)
Infomaniak : CardDAV natif, identifiants standards du compte mail
vdirsyncer : outil CLI léger, une paire de synchronisation par source (Google ↔ Baïkal, Infomaniak ↔ Baïkal), exécuté via cron sur le VPS
Décision à prendre au moment de la mise en place : synchronisation one-way (Baïkal source de vérité, lecture seule depuis Google/Infomaniak) ou two-way (modifications propagées dans les deux sens)
Sécurité — checklist
[ ] Tous les mots de passe CHANGE_ME_... remplacés avant mise en production
[ ] HTTPS forcé sur les deux vhosts (redirection 80 → 443 en place)
[ ] Certificats Let's Encrypt valides et renouvellement automatique vérifié
[ ] Mot de passe d'application dédié pour l'accès CardDAV Google (pas le mot de passe principal du compte)
[ ] Sauvegarde régulière des volumes baikal-config, baikal-data, roundcube-db
Statut du projet Baïkal (pour référence)
Développé aujourd'hui par des bénévoles sous l'organisation sabre-io (mainteneurs de SabreDAV, la librairie sous-jacente). Pas de société commerciale derrière, mais communauté active et outil considéré comme robuste pour un usage personnel/petite structure sur la durée.
Statut du projet Roundcube (pour référence)
Projet actif, version majeure 1.7.0 sortie en mai 2026, mises à jour de sécurité régulières. A rejoint la famille Nextcloud en 2023 tout en restant indépendant (licence GPL). Interface traduite en français en natif.
No comments to display
No comments to display