[{"data":1,"prerenderedAt":229},["ShallowReactive",2],{"seo-verification":3,"blog-cal-com-closed-source-alternatives-scheduling-vps-2026-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-cal-com-closed-source-alternatives-scheduling-vps-2026-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":166,"ctaBody":167,"ctaButton":168,"ctaUrl":169,"relatedPosts":170},405,"cal-com-closed-source-alternatives-scheduling-vps-2026",{"fr":10,"en":12,"ar":13,"es":14},"cal-com-closed-source-scheduling-alternatives-vps-2026","cal-com-مصدر-مغلق-بدائل-تحديد-المواعيد-vps-2026","cal-com-codigo-cerrado-alternativas-planificacion-vps-2026","Cal.com closed source : 3 alternatives open source sur VPS","Cal.com a abandonné l'AGPL en avril 2026. Comparatif de Rallly, Easy!Appointments et Tymeslot : trois alternatives vraiment open source à déployer sur VPS.",9,0,false,"2026-10-02T00:00:00+00:00","2026-10-02T14:03:20+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},5,"Comparatif","comparatif","bg-info\u002F10 text-info",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fcal-com-closed-source-alternatives-scheduling-vps-2026-poster.svg",{"categorySlug":33,"appSlug":34},"collaboration","cal-com","Le 14 avril 2026, Cal.com a déplacé sa base de code commerciale dans un dépôt privé et relicencié le code public sous le nom Cal.diy (MIT), en retirant SSO, Teams, Workflows et Routing Forms. Les utilisateurs qui avaient choisi Cal.com précisément pour son AGPL se retrouvent devant un choix : rester sur un cal.diy intentionnellement dépouillé, passer à l'offre commerciale fermée, ou migrer vers une alternative véritablement libre. Cet article compare Rallly, Easy!Appointments et Tymeslot pour vous aider à choisir.",[37,41,53,56,62,84,153,156,160,163],{"type":38,"title":39,"body":40},"h2","Ce qui a changé chez Cal.com en avril 2026","Cal.com a publié le 14 avril 2026 un billet officiel expliquant sa décision : la montée en puissance des outils d'IA, capables d'analyser le code public pour détecter des vulnérabilités, a conduit l'équipe à fermer la base de code commerciale. La version v6.4 marque le point de bascule.\n\nLe dépôt public `calcom\u002Fcal.com` a été renommé `calcom\u002Fcal.diy` et relicencié de AGPL-3.0 vers MIT. Ce changement peut paraître libéral à première vue — le MIT est permissif — mais le cœur du problème est ce qui a été **retiré** du code public, pas la licence elle-même. Cal.diy est officiellement décrit comme un outil pour usage personnel et non-production : le site cal.diy recommande explicitement Cal.com (la version fermée) pour tout usage commercial ou en production.",{"type":42,"title":43,"items":44},"ul","Fonctionnalités retirées de cal.diy par rapport à l'AGPL",[45,46,47,48,49,50,51,52],"**Teams et Organizations** : gestion multi-membres et espaces d'équipe, désormais réservés à l'offre Enterprise fermée.","**Workflows** : automatisations de rappels, notifications et actions déclenchées, absentes du code public.","**SSO et SAML** : authentification unique via votre fournisseur d'identité, retirée de cal.diy.","**Routing Forms** : formulaires de qualification pour acheminer les rendez-vous vers le bon membre, supprimés.","**Instant Booking** : réservation immédiate sans confirmation manuelle, réservée à l'offre commerciale.","**Insights** : tableau de bord analytique des réservations, absent du code ouvert.","**API v1** : l'ancienne API REST documentée, remplacée par API v2 uniquement côté commercial.","**Agent téléphonique IA** : fonction de planification par appel téléphonique, code fermé.",{"type":38,"title":54,"body":55},"Prérequis comparés : RAM, CPU et stack par alternative","Avant de choisir, vérifiez que votre VPS correspond au profil de l'outil. Les trois alternatives ont des stacks très différentes — une en Node.js\u002FPostgreSQL, une en PHP\u002FMySQL, une en Elixir\u002FPostgreSQL — ce qui se traduit par des besoins et des contraintes d'administration distincts.",{"type":42,"title":57,"items":58},"Fiches ressources par outil",[59,60,61],"**Rallly** (AGPL-3.0) : Next.js + PostgreSQL via Docker Compose. Comptez **2 Go de RAM** minimum, 1 vCPU suffit en charge légère. Un domaine, un SMTP et Docker Compose v2 sont requis. Le bundle officiel inclut PostgreSQL, un stockage objet S3-compatible et un reverse proxy HTTPS — une seule commande suffit.","**Easy!Appointments** (GPL-3.0) : PHP 8.2+ + MySQL\u002FMariaDB. Tourne sur tout serveur LAMP classique ou en Docker. **512 Mo de RAM** suffisent pour un usage individuel ou une petite structure — c'est l'alternative la plus légère des trois. Compatible hébergement mutualisé cPanel, pas uniquement VPS.","**Tymeslot** (AGPL-3.0) : Elixir\u002FPhoenix LiveView + PostgreSQL inclus dans le conteneur Docker. Stack compilée, très faible empreinte mémoire à l'exécution. Un seul conteneur Docker avec PostgreSQL embarqué — prévu pour une installation VPS propre.",{"type":63,"title":64,"steps":65},"steps","Déployer Rallly sur VPS avec Docker Compose",[66,69,72,75,78,81],{"title":67,"body":68},"Préparer le serveur","Connectez-vous en root sur votre VPS. Installez Docker et Docker Compose v2 si ce n'est pas déjà fait :\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\ndocker compose version\n```\n\nOuvrez les ports 80 et 443 dans votre pare-feu. Pointez un sous-domaine (`cal.votre-domaine.com`) vers l'IPv4 de votre VPS via un enregistrement A dans votre zone DNS.",{"title":70,"body":71},"Récupérer la configuration officielle","Clonez le dépôt d'exemples self-hosted de Rallly et créez votre fichier d'environnement :\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Flukevella\u002Frallly-selfhosted.git\ncd rallly-selfhosted\ncp .env.example .env\n```",{"title":73,"body":74},"Configurer les variables d'environnement","Ouvrez `.env` et renseignez les variables essentielles :\n\n```bash\nSECRET_PASSWORD=\u003Cchaine-aleatoire-32-chars>\nNEXT_PUBLIC_BASE_URL=https:\u002F\u002Fcal.votre-domaine.com\nSMTP_HOST=smtp.votre-fournisseur.com\nSMTP_PORT=587\nSMTP_USER=votre@email.com\nSMTP_PWD=\u003Cmot-de-passe-smtp>\nSUPPORT_EMAIL=votre@email.com\n```\n\nGénérez la chaîne aléatoire avec `openssl rand -hex 16`. Ne laissez pas `SECRET_PASSWORD` vide — Rallly refuse de démarrer sans une valeur non vide.",{"title":76,"body":77},"Lancer les conteneurs","Démarrez l'ensemble de la stack en arrière-plan. Le bundle Rallly inclut l'application, PostgreSQL, un stockage objet et un reverse proxy avec TLS automatique :\n\n```bash\ndocker compose up -d\n```\n\nVérifiez que tous les services sont `healthy` :\n\n```bash\ndocker compose ps\n```\n\nLe reverse proxy obtient automatiquement un certificat Let's Encrypt lors du premier démarrage — attendez une minute avant d'accéder au domaine.",{"title":79,"body":80},"Vérifier l'installation et créer le premier sondage","Ouvrez `https:\u002F\u002Fcal.votre-domaine.com` dans votre navigateur. L'interface Rallly vous accueille sans compte obligatoire pour les participants — seul l'organisateur crée un compte. Créez un premier sondage de disponibilité pour vérifier que l'envoi d'e-mails SMTP fonctionne correctement.\n\nSi l'e-mail n'arrive pas, vérifiez les logs du service applicatif :\n\n```bash\ndocker compose logs app --tail=50\n```",{"title":82,"body":83},"Activer les mises à jour automatiques (optionnel)","Pour rester à jour sans intervention manuelle, installez Watchtower qui surveille les nouvelles images et redémarre les conteneurs concernés :\n\n```bash\ndocker run -d \\\n  --name watchtower \\\n  -v \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock \\\n  containrrr\u002Fwatchtower --cleanup --interval 86400\n```\n\nWatchtower vérifie les nouvelles images une fois par jour. Rallly publie régulièrement des correctifs de sécurité — ne laissez pas votre instance sans surveillance.",{"type":85,"title":86,"headers":87,"rows":93},"comparison","Rallly vs Easy!Appointments vs Tymeslot vs cal.diy",[88,89,90,91,92],"Critère","Rallly","Easy!Appointments","Tymeslot","cal.diy",[94,99,104,109,115,121,127,131,135,139,144,147],[95,96,97,96,98],"Licence","AGPL-3.0","GPL-3.0","MIT (code amputé)",[100,101,102,103,101],"Stack","Next.js + PostgreSQL","PHP 8.2 + MySQL","Elixir\u002FPhoenix + PostgreSQL",[105,106,107,108,106],"RAM minimale","2 Go","512 Mo","Non documenté",[110,111,112,113,114],"Docker Compose","Oui, bundle officiel","Oui, image disponible","Oui, conteneur unique","Oui",[116,117,118,119,120],"Cas d'usage principal","Sondages de disponibilité, votes","Rendez-vous structurés (services\u002Fprestataires)","Planification individuelle et groupes","Planification individuelle (non-prod)",[122,123,124,125,126],"Sync calendrier","Google, Outlook (iCal)","Google Calendar","Google, Outlook, iCloud, CalDAV, Nextcloud","Google, Outlook",[128,129,129,129,130],"SSO \u002F SAML","Non","Retiré (offre commerciale)",[132,129,133,134,130],"Teams multi-membres","Multi-prestataires (services)","Oui (groupes)",[136,137,137,138,130],"Workflows \u002F rappels auto","Oui (e-mails)","Oui (e-mails, Slack, Telegram)",[140,114,141,142,143],"API REST","Oui (REST complète)","Oui + webhooks","API v2 uniquement",[145,114,114,114,146],"Usage recommandé en prod","Non (déclaration officielle)",[148,149,150,151,152],"Maturité (2026)","Actif, v4.15.2 (sept. 2026)","Actif, v1.6.0 (mai 2026)","Actif, lancé en réponse à Cal.com","Maintenu, mais périmètre volontairement limité",{"type":38,"title":154,"body":155},"Migrer depuis Cal.com AGPL : exporter vos données","Si vous avez auto-hébergé Cal.com sous AGPL et souhaitez migrer vers l'une des alternatives, voici comment extraire vos données avant de couper votre ancienne instance.\n\n**Exporter depuis une instance Cal.com AGPL existante.** Cal.com stocke ses données dans PostgreSQL. Vous pouvez exporter les tables de réservations, de disponibilités et de types d'événements via `pg_dump` :\n\n```bash\npg_dump -U calcom -d calcom -t bookings -t event_types -t schedules > calcom_export.sql\n```\n\nLes données que vous récupérez en priorité : les réservations existantes (pour votre historique CRM), les adresses e-mail de participants (si vous envoyez des rappels), et vos règles de disponibilité (horaires, créneaux bloqués).\n\n**Ce que vous ne pouvez pas importer directement.** Aucune des trois alternatives ne propose d'import au format Cal.com — la migration est une reconfiguration manuelle, pas une restauration. Concentrez-vous sur l'export de votre liste de contacts et de vos règles de disponibilité, puis reconfigurez les types d'événements dans l'outil cible. Pour Rallly (sondages de groupe) ou Tymeslot (liens de réservation individuels), la reconfiguration prend généralement moins d'une heure.\n\n**Pour Easy!Appointments**, si vous venez d'un système avec des services structurés (créneaux de 30 min par prestataire), c'est l'outil dont la logique est la plus proche d'un agenda professionnel classique. Importez vos prestataires et services via l'interface d'administration, puis reconfigurez les plages horaires.",{"type":157,"title":158,"body":159},"tip","Durcissement post-installation","Quelques gestes avant d'exposer votre instance au trafic réel.\n\nProtégez l'accès administrateur avec une authentification HTTP de base devant votre reverse proxy si l'outil ne propose pas de 2FA natif — particulièrement important pour Easy!Appointments en accès public. Configurez des sauvegardes automatiques du volume PostgreSQL ou du répertoire de données MySQL : un `docker exec` planifié avec `pg_dump` ou `mysqldump` vers un stockage externe suffit. Vérifiez que votre VPS n'expose que les ports nécessaires (80\u002F443 pour le web, 22 pour SSH) et que l'accès direct au port de base de données (5432 ou 3306) n'est pas ouvert sur l'interface publique.\n\nEnfin, activez les alertes de nouvelles versions dans le dépôt GitHub de votre outil choisi (onglet `Watch → Custom → Releases`) : les trois projets sont actifs en 2026 et publient des correctifs régulièrement.",{"type":38,"title":161,"body":162},"Dépannage courant","**Rallly : l'application démarre mais les e-mails n'arrivent pas.** Vérifiez `SMTP_HOST`, `SMTP_PORT` et `SMTP_USER` dans votre fichier `.env`. Certains hébergeurs bloquent le port 25 en sortie — utilisez le port 587 (STARTTLS) ou 465 (SSL). Inspectez les logs avec `docker compose logs app --tail=100 | grep -i smtp`.\n\n**Easy!Appointments : erreur 500 ou page blanche après installation.** Vérifiez que les droits sur le répertoire `storage\u002F` sont en écriture pour le processus web (`chmod -R 775 storage\u002F`). En Docker, vérifiez que le conteneur MySQL est démarré et accessible avant le conteneur applicatif — un `depends_on` avec `condition: service_healthy` dans votre Compose résout les démarrages en race condition.\n\n**Tymeslot : le conteneur démarre mais la sync calendrier échoue.** La sync Google\u002FOutlook nécessite des identifiants OAuth2 (Client ID et Client Secret) configurés dans les variables d'environnement. Créez un projet dans la Google Cloud Console, activez l'API Google Calendar, et renseignez `GOOGLE_CLIENT_ID` et `GOOGLE_CLIENT_SECRET`. L'URL de callback OAuth doit correspondre exactement à votre domaine de production.\n\n**Rallly : erreur `SECRET_PASSWORD must be set`.** Cette variable est obligatoire et doit faire au moins 32 caractères. Générez-en une avec `openssl rand -hex 16` (produit 32 caractères hexadécimaux) et renseignez-la dans `.env` avant de relancer `docker compose up -d`.",{"type":38,"title":164,"body":165},"Quelle alternative choisir ?","**Rallly** convient si vous avez besoin de sondages de disponibilité pour trouver un créneau commun à plusieurs participants — réunions d'équipe, ateliers, appels de groupe. Pas de réservation en flux tendu, mais un vote collaboratif léger et sans friction. Sa maturité (v4.15.2 en septembre 2026, bundle Docker officiel complet) en fait l'option la plus simple à déployer.\n\n**Easy!Appointments** est le bon choix si votre usage ressemble à un agenda professionnel structuré : services (consultation, cours, entretien), prestataires, créneaux fixes et confirmation par e-mail. Il fonctionne aussi bien sur hébergement mutualisé cPanel que sur VPS, ce qui le rend accessible sans Docker. Sa version 1.6.0 (mai 2026) est la plus récente.\n\n**Tymeslot** se positionne comme la réponse directe au départ de Cal.com AGPL : planification individuelle avec liens de réservation, sync multi-calendriers (Google, Outlook, iCloud, CalDAV, Nextcloud), et des intégrations webhooks pour s'accrocher à n8n ou Make. Né dans le sillage de la fermeture Cal.com, il cible directement les développeurs qui cherchaient une alternative à périmètre équivalent, avec une licence AGPL garantissant la pérennité.\n\n**Cal.diy** reste une option si vous n'avez besoin que d'une page de réservation individuelle basique, sans engagement sur la pérennité des fonctionnalités — l'équipe Cal.com est explicite : cal.diy n'est pas recommandé pour la production commerciale. Si c'est votre cas de départ, Rallly ou Tymeslot vous offrent les mêmes fonctionnalités de base avec une communauté qui ne cherche pas à vous vendre une mise à niveau.","Déployez votre outil de planification sur VPS","Rallly, Easy!Appointments et Tymeslot s'auto-hébergent sur un VPS root avec Docker. Accès root, IPv4 dédiée, choix d'OS, aucune restriction logicielle.","Déployer mon alternative sur VPS","\u002Fvps-cloud",[171,192,208],{"id":172,"slug":173,"slugs":174,"title":178,"excerpt":179,"readTime":17,"views":18,"isPinned":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":188,"featuredImage":29,"bgImage":30,"posterImage":190,"relatedSolution":191},88,"heberger-cal-com",{"fr":173,"en":175,"ar":176,"es":177},"host-calcom-on-your-own-vps","استضافة-calcom-على-خادمك-الافتراضي-الخاص-vps","alojar-cal-com-en-un-vps","Héberger Cal.com sur VPS : guide complet Docker","Déployez Cal.com sur VPS avec Docker, PostgreSQL et reverse proxy. Résolution du CLIENT_FETCH_ERROR, invariants, mise à jour sûre et dépannage.","2026-03-24T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":183,"name":184,"slug":185,"color":186,"icon":187},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[189],{"id":183,"name":184,"slug":185,"color":186,"icon":187},"\u002Fblog\u002Fcovers\u002Fheberger-cal-com-poster.svg",{"categorySlug":185,"appSlug":34},{"id":193,"slug":194,"slugs":195,"title":199,"excerpt":200,"readTime":201,"views":202,"isPinned":19,"publishedAt":203,"updatedAt":181,"category":204,"categories":205,"featuredImage":29,"bgImage":30,"posterImage":207,"relatedSolution":29},219,"bsl-sspl-licences-self-hosting",{"fr":194,"en":196,"ar":197,"es":198},"bsl-and-sspl-the-traps-of-source-available-licenses","bsl-وsspl-مخاطر-تراخيص-المصدر-المتاح","bsl-y-sspl-trampas-licencias-source-available","BSL et SSPL : les pièges des licences source-available","BSL, SSPL, AGPLv3 : comprendre ce que chaque licence autorise ou interdit avant d'intégrer un outil dans votre stack.",12,1,"2026-08-04T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[206],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fbsl-sspl-licences-self-hosting-poster.svg",{"id":209,"slug":210,"slugs":211,"title":215,"excerpt":216,"readTime":217,"views":18,"isPinned":19,"publishedAt":218,"updatedAt":219,"category":220,"categories":226,"featuredImage":29,"bgImage":30,"posterImage":228,"relatedSolution":29},390,"perennite-stack-self-hosted-signaux-resilience-projet",{"fr":210,"en":212,"ar":213,"es":214},"self-hosted-app-longevity-signals","إشارات-استدامة-تطبيق-مستضاف-ذاتيا","senales-durabilidad-app-self-hosted","5 signaux pour évaluer la pérennité d'une app self-hosted","Avant de déployer une app open-source pour un client, cinq indicateurs mesurables pour savoir si elle tiendra sur la durée — gouvernance, financement, licence et plus.",10,"2026-09-27T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":221,"name":222,"slug":223,"color":224,"icon":225},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[227],{"id":221,"name":222,"slug":223,"color":224,"icon":225},"\u002Fblog\u002Fcovers\u002Fperennite-stack-self-hosted-signaux-resilience-projet-poster.svg",1790987687940]