[{"data":1,"prerenderedAt":229},["ShallowReactive",2],{"seo-verification":3,"blog-cal-com-codigo-cerrado-alternativas-planificacion-vps-2026-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-cal-com-codigo-cerrado-alternativas-planificacion-vps-2026-es",{"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-codigo-cerrado-alternativas-planificacion-vps-2026",{"fr":12,"en":13,"ar":14,"es":10},"cal-com-closed-source-alternatives-scheduling-vps-2026","cal-com-closed-source-scheduling-alternatives-vps-2026","cal-com-مصدر-مغلق-بدائل-تحديد-المواعيد-vps-2026","Cal.com cierra su código: 3 alternativas open source en VPS","Cal.com abandonó AGPL en abril de 2026. Comparativa de Rallly, Easy!Appointments y Tymeslot: tres alternativas realmente open source para desplegar en un 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,"Comparativas","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},"colaboracion-productividad","cal-com","El 14 de abril de 2026, Cal.com trasladó su base de código comercial a un repositorio privado y volvió a licenciar el código público como Cal.diy (MIT), eliminando SSO, Teams, Workflows y Routing Forms. Los usuarios que eligieron Cal.com precisamente por su licencia AGPL se enfrentan ahora a una elección: quedarse con un cal.diy intencionadamente limitado, pasar a la oferta comercial cerrada, o migrar a una alternativa verdaderamente libre. Este artículo compara Rallly, Easy!Appointments y Tymeslot para ayudarte a decidir.",[37,41,53,56,62,84,153,156,160,163],{"type":38,"title":39,"body":40},"h2","Lo que cambió en Cal.com en abril de 2026","Cal.com publicó el 14 de abril de 2026 un artículo oficial explicando su decisión: el auge de las herramientas de IA capaces de escanear código público para detectar vulnerabilidades llevó al equipo a cerrar la base de código comercial. La versión v6.4 marca el punto de inflexión.\n\nEl repositorio público `calcom\u002Fcal.com` fue renombrado a `calcom\u002Fcal.diy` y su licencia cambió de AGPL-3.0 a MIT. Este cambio puede parecer permisivo a primera vista — MIT es una licencia permisiva — pero el núcleo del problema es lo que fue **eliminado** del código público, no la licencia en sí. Cal.diy está descrito oficialmente como una herramienta para uso personal y no productivo: el sitio cal.diy recomienda explícitamente Cal.com (la versión cerrada) para cualquier uso comercial o en producción.",{"type":42,"title":43,"items":44},"ul","Funcionalidades eliminadas de cal.diy respecto a la versión AGPL",[45,46,47,48,49,50,51,52],"**Teams y Organizations**: gestión multi-miembro y espacios de equipo, ahora reservados para la oferta Enterprise cerrada.","**Workflows**: automatizaciones de recordatorios, notificaciones y acciones disparadas, ausentes del código público.","**SSO y SAML**: inicio de sesión único a través de tu proveedor de identidad, eliminado de cal.diy.","**Routing Forms**: formularios de cualificación para enrutar reservas al miembro adecuado, eliminados.","**Instant Booking**: reserva inmediata sin confirmación manual, reservada para la oferta comercial.","**Insights**: panel analítico de reservas, ausente del código abierto.","**API v1**: la antigua API REST documentada, reemplazada por API v2 únicamente en el lado comercial.","**Agente telefónico IA**: función de programación por llamada telefónica, código cerrado.",{"type":38,"title":54,"body":55},"Requisitos comparados: RAM, CPU y stack por alternativa","Antes de elegir, comprueba que tu VPS corresponde al perfil de la herramienta. Las tres alternativas tienen stacks muy diferentes — una en Node.js\u002FPostgreSQL, una en PHP\u002FMySQL, una en Elixir\u002FPostgreSQL — lo que se traduce en requisitos y restricciones de administración distintos.",{"type":42,"title":57,"items":58},"Perfiles de recursos por herramienta",[59,60,61],"**Rallly** (AGPL-3.0): Next.js + PostgreSQL via Docker Compose. Prevé al menos **2 GB de RAM**, 1 vCPU es suficiente para carga ligera. Se requiere un dominio, un relay SMTP y Docker Compose v2. El bundle oficial incluye PostgreSQL, almacenamiento de objetos compatible S3 y un proxy inverso HTTPS — un solo comando es suficiente.","**Easy!Appointments** (GPL-3.0): PHP 8.2+ + MySQL\u002FMariaDB. Funciona en cualquier servidor LAMP estándar o Docker. **512 MB de RAM** son suficientes para uso individual o equipo pequeño — la más ligera de las tres. Compatible con hosting compartido cPanel, no solo VPS.","**Tymeslot** (AGPL-3.0): Elixir\u002FPhoenix LiveView + PostgreSQL incluido en el contenedor Docker. Stack compilado, huella de memoria muy baja en tiempo de ejecución. Un solo contenedor Docker con PostgreSQL integrado — diseñado para una instalación VPS limpia.",{"type":63,"title":64,"steps":65},"steps","Desplegar Rallly en un VPS con Docker Compose",[66,69,72,75,78,81],{"title":67,"body":68},"Preparar el servidor","Conéctate como root en tu VPS. Instala Docker y Docker Compose v2 si no están ya instalados:\n\n```bash\ncurl -fsSL https:\u002F\u002Fget.docker.com | sh\ndocker compose version\n```\n\nAbre los puertos 80 y 443 en tu firewall. Apunta un subdominio (`cal.tu-dominio.com`) a la IPv4 de tu VPS mediante un registro A en tu zona DNS.",{"title":70,"body":71},"Obtener la configuración oficial","Clona el repositorio de ejemplos self-hosted de Rallly y crea tu archivo de entorno:\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},"Configurar las variables de entorno","Abre `.env` y rellena las variables esenciales:\n\n```bash\nSECRET_PASSWORD=\u003Ccadena-aleatoria-32-chars>\nNEXT_PUBLIC_BASE_URL=https:\u002F\u002Fcal.tu-dominio.com\nSMTP_HOST=smtp.tu-proveedor.com\nSMTP_PORT=587\nSMTP_USER=tu@email.com\nSMTP_PWD=\u003Ccontraseña-smtp>\nSUPPORT_EMAIL=tu@email.com\n```\n\nGenera la cadena aleatoria con `openssl rand -hex 16`. No dejes `SECRET_PASSWORD` vacío — Rallly se negará a iniciar sin un valor no vacío.",{"title":76,"body":77},"Lanzar los contenedores","Inicia el stack completo en segundo plano. El bundle de Rallly incluye la aplicación, PostgreSQL, almacenamiento de objetos y un proxy inverso con TLS automático:\n\n```bash\ndocker compose up -d\n```\n\nVerifica que todos los servicios estén `healthy`:\n\n```bash\ndocker compose ps\n```\n\nEl proxy inverso obtiene automáticamente un certificado Let's Encrypt en el primer inicio — espera un minuto antes de acceder al dominio.",{"title":79,"body":80},"Verificar la instalación y crear la primera encuesta","Abre `https:\u002F\u002Fcal.tu-dominio.com` en tu navegador. La interfaz de Rallly no requiere que los participantes creen una cuenta — solo el organizador. Crea una primera encuesta de disponibilidad para verificar que el envío de correos electrónicos SMTP funciona correctamente.\n\nSi el correo no llega, revisa los logs del servicio de aplicación:\n\n```bash\ndocker compose logs app --tail=50\n```",{"title":82,"body":83},"Activar actualizaciones automáticas (opcional)","Para mantenerte actualizado sin intervención manual, instala Watchtower que monitorea nuevas imágenes y reinicia los contenedores afectados:\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 verifica nuevas imágenes una vez al día. Rallly publica parches de seguridad regularmente — no dejes tu instancia sin supervisión.",{"type":85,"title":86,"headers":87,"rows":93},"comparison","Rallly vs Easy!Appointments vs Tymeslot vs cal.diy",[88,89,90,91,92],"Criterio","Rallly","Easy!Appointments","Tymeslot","cal.diy",[94,99,104,109,115,121,127,131,135,139,144,147],[95,96,97,96,98],"Licencia","AGPL-3.0","GPL-3.0","MIT (código recortado)",[100,101,102,103,101],"Stack","Next.js + PostgreSQL","PHP 8.2 + MySQL","Elixir\u002FPhoenix + PostgreSQL",[105,106,107,108,106],"RAM mínima","2 GB","512 MB","No documentado",[110,111,112,113,114],"Docker Compose","Sí, bundle oficial","Sí, imagen disponible","Sí, contenedor único","Sí",[116,117,118,119,120],"Caso de uso principal","Encuestas de disponibilidad, votación grupal","Citas estructuradas (servicios\u002Fproveedores)","Programación individual y grupal","Programación individual (no prod)",[122,123,124,125,126],"Sincronización de calendario","Google, Outlook (iCal)","Google Calendar","Google, Outlook, iCloud, CalDAV, Nextcloud","Google, Outlook",[128,129,129,129,130],"SSO \u002F SAML","No","Eliminado (oferta comercial)",[132,129,133,134,130],"Equipos multi-miembro","Multi-proveedor (servicios)","Sí (grupos)",[136,137,137,138,130],"Workflows \u002F recordatorios automáticos","Sí (emails)","Sí (emails, Slack, Telegram)",[140,114,141,142,143],"API REST","Sí (REST completa)","Sí + webhooks","Solo API v2",[145,114,114,114,146],"Recomendado para producción","No (declaración oficial)",[148,149,150,151,152],"Madurez (2026)","Activo, v4.15.2 (sept 2026)","Activo, v1.6.0 (mayo 2026)","Activo, lanzado en respuesta a Cal.com","Mantenido, alcance intencionalmente limitado",{"type":38,"title":154,"body":155},"Migrar desde Cal.com AGPL: exportar tus datos","Si has estado auto-alojando Cal.com bajo AGPL y quieres migrar a una de las alternativas, aquí te explicamos cómo extraer tus datos antes de apagar tu antigua instancia.\n\n**Exportar desde una instancia Cal.com AGPL existente.** Cal.com almacena sus datos en PostgreSQL. Puedes exportar las tablas de reservas, disponibilidad y tipos de eventos via `pg_dump`:\n\n```bash\npg_dump -U calcom -d calcom -t bookings -t event_types -t schedules > calcom_export.sql\n```\n\nLos datos a priorizar: las reservas existentes (para el historial de CRM), las direcciones de correo de los participantes (si envías recordatorios), y tus reglas de disponibilidad (horarios, slots bloqueados).\n\n**Lo que no puedes importar directamente.** Ninguna de las tres alternativas ofrece importación en formato Cal.com — la migración es una reconfiguración manual, no una restauración. Céntrate en exportar tu lista de contactos y reglas de disponibilidad, luego reconfigura los tipos de eventos en la herramienta objetivo.",{"type":157,"title":158,"body":159},"tip","Endurecimiento post-instalación","Algunos pasos antes de exponer tu instancia al tráfico real.\n\nProtege el acceso de administrador con autenticación HTTP básica delante de tu proxy inverso si la herramienta no ofrece 2FA nativo — especialmente importante para Easy!Appointments en acceso público. Configura copias de seguridad automáticas del volumen PostgreSQL o del directorio de datos MySQL: un `docker exec` programado con `pg_dump` o `mysqldump` a almacenamiento externo es suficiente. Verifica que tu VPS solo expone los puertos necesarios (80\u002F443 para web, 22 para SSH) y que el acceso directo al puerto de base de datos (5432 o 3306) no está abierto en la interfaz pública.",{"type":38,"title":161,"body":162},"Resolución de problemas comunes","**Rallly: la aplicación arranca pero los correos no llegan.** Verifica `SMTP_HOST`, `SMTP_PORT` y `SMTP_USER` en tu archivo `.env`. Algunos proveedores de hosting bloquean el puerto 25 saliente — usa el puerto 587 (STARTTLS) o 465 (SSL). Inspecciona los logs con `docker compose logs app --tail=100 | grep -i smtp`.\n\n**Easy!Appointments: error 500 o página en blanco tras la instalación.** Verifica que el directorio `storage\u002F` es escribible por el proceso web (`chmod -R 775 storage\u002F`). En Docker, comprueba que el contenedor MySQL está iniciado y accesible antes que el contenedor de aplicación — un `depends_on` con `condition: service_healthy` en tu Compose resuelve condiciones de carrera en el arranque.\n\n**Tymeslot: el contenedor arranca pero la sincronización de calendario falla.** La sincronización de Google\u002FOutlook requiere credenciales OAuth2 (Client ID y Client Secret) configuradas en variables de entorno. Crea un proyecto en Google Cloud Console, activa la API de Google Calendar, y configura `GOOGLE_CLIENT_ID` y `GOOGLE_CLIENT_SECRET`.",{"type":38,"title":164,"body":165},"¿Qué alternativa elegir?","**Rallly** es la opción adecuada si necesitas encuestas de disponibilidad para encontrar un horario que funcione para varios participantes — reuniones de equipo, talleres, llamadas grupales. Sin flujo de reserva en tiempo real, pero una votación colaborativa ligera y sin fricción. Su madurez (v4.15.2 en septiembre de 2026, bundle Docker oficial completo) lo convierte en la opción más fácil de desplegar.\n\n**Easy!Appointments** es la elección correcta si tu caso de uso se parece a un calendario profesional estructurado: servicios (consulta, clase, entrevista), proveedores, slots fijos y confirmación por correo. Funciona en hosting compartido cPanel además de en VPS, haciéndolo accesible sin Docker. Su versión 1.6.0 (mayo 2026) es la más reciente.\n\n**Tymeslot** se posiciona como la respuesta directa a la partida de Cal.com AGPL: programación individual con enlaces de reserva, sincronización multi-calendario (Google, Outlook, iCloud, CalDAV, Nextcloud), e integraciones webhooks para conectar con n8n o Make. Nacido a raíz del cierre de Cal.com, apunta directamente a los desarrolladores que buscaban una alternativa de alcance equivalente, con licencia AGPL que garantiza la longevidad.","Despliega tu herramienta de programación en un VPS","Rallly, Easy!Appointments y Tymeslot se auto-alojan en un VPS root con Docker. Acceso root, IPv4 dedicada, elección de SO, sin restricciones de software.","Desplegar mi alternativa en 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,"alojar-cal-com-en-un-vps",{"fr":175,"en":176,"ar":177,"es":173},"heberger-cal-com","host-calcom-on-your-own-vps","استضافة-calcom-على-خادمك-الافتراضي-الخاص-vps","Alojar Cal.com en VPS: guía completa con Docker","Despliegue Cal.com en un VPS con Docker, PostgreSQL y reverse proxy. Solución al CLIENT_FETCH_ERROR, invariantes del primer arranque y depuración.","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,"Autoalojamiento","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-y-sspl-trampas-licencias-source-available",{"fr":196,"en":197,"ar":198,"es":194},"bsl-sspl-licences-self-hosting","bsl-and-sspl-the-traps-of-source-available-licenses","bsl-وsspl-مخاطر-تراخيص-المصدر-المتاح","BSL y SSPL: las trampas de las licencias source-available","BSL, SSPL, AGPLv3: entienda qué permite y qué prohíbe cada licencia antes de integrar una herramienta en su 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,"senales-durabilidad-app-self-hosted",{"fr":212,"en":213,"ar":214,"es":210},"perennite-stack-self-hosted-signaux-resilience-projet","self-hosted-app-longevity-signals","إشارات-استدامة-تطبيق-مستضاف-ذاتيا","5 señales para evaluar la durabilidad de una app self-hosted","Antes de desplegar una app de código abierto para un cliente, cinco indicadores medibles para saber si resistirá a largo plazo — gobernanza, financiación, licencia y más.",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,"Seguridad y monitorización","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",1790987815838]