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.