Guía de despliegue

Cal.com cierra su código: 3 alternativas open source en VPS

Desplegar en un VPS Cloud →

Comparativa

Cal.com cierra su código: 3 alternativas open source en VPS

Comparativas9 min de lectura6 pasos

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.

Contenido· Lo que cambió en Cal.com en abril de 20261/10
  1. 01Lo que cambió en Cal.com en abril de 2026
  2. 02Funcionalidades eliminadas de cal.diy respecto a la versión AGPL
  3. 03Requisitos comparados: RAM, CPU y stack por alternativa
  4. 04Perfiles de recursos por herramienta
  5. 05Desplegar Rallly en un VPS con Docker Compose
  6. 06Rallly vs Easy!Appointments vs Tymeslot vs cal.diy
  7. 07Migrar desde Cal.com AGPL: exportar tus datos
  8. 08Endurecimiento post-instalación
  9. 09Resolución de problemas comunes
  10. 10¿Qué alternativa elegir?

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.

El repositorio público calcom/cal.com fue renombrado a calcom/cal.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.

Funcionalidades eliminadas de cal.diy respecto a la versión AGPL

  • 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.

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/PostgreSQL, una en PHP/MySQL, una en Elixir/PostgreSQL — lo que se traduce en requisitos y restricciones de administración distintos.

Perfiles de recursos por herramienta

  • 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/MariaDB. 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/Phoenix 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.

Desplegar Rallly en un VPS con Docker Compose

  1. Preparar el servidor

    Conéctate como root en tu VPS. Instala Docker y Docker Compose v2 si no están ya instalados:

    curl -fsSL https://get.docker.com | sh
    docker compose version

    Abre 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.

  2. Obtener la configuración oficial

    Clona el repositorio de ejemplos self-hosted de Rallly y crea tu archivo de entorno:

    git clone https://github.com/lukevella/rallly-selfhosted.git
    cd rallly-selfhosted
    cp .env.example .env
  3. Configurar las variables de entorno

    Abre .env y rellena las variables esenciales:

    SECRET_PASSWORD=<cadena-aleatoria-32-chars>
    NEXT_PUBLIC_BASE_URL=https://cal.tu-dominio.com
    SMTP_HOST=smtp.tu-proveedor.com
    SMTP_PORT=587
    [email protected]
    SMTP_PWD=<contraseña-smtp>
    [email protected]

    Genera 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.

  4. 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:

    docker compose up -d

    Verifica que todos los servicios estén healthy:

    docker compose ps

    El proxy inverso obtiene automáticamente un certificado Let's Encrypt en el primer inicio — espera un minuto antes de acceder al dominio.

  5. Verificar la instalación y crear la primera encuesta

    Abre https://cal.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.

    Si el correo no llega, revisa los logs del servicio de aplicación:

    docker compose logs app --tail=50
  6. Activar actualizaciones automáticas (opcional)

    Para mantenerte actualizado sin intervención manual, instala Watchtower que monitorea nuevas imágenes y reinicia los contenedores afectados:

    docker run -d \
      --name watchtower \
      -v /var/run/docker.sock:/var/run/docker.sock \
      containrrr/watchtower --cleanup --interval 86400

    Watchtower verifica nuevas imágenes una vez al día. Rallly publica parches de seguridad regularmente — no dejes tu instancia sin supervisión.

Rallly vs Easy!Appointments vs Tymeslot vs cal.diy

Desplace la tabla

CriterioRalllyEasy!AppointmentsTymeslotcal.diy
LicenciaAGPL-3.0GPL-3.0AGPL-3.0MIT (código recortado)
StackNext.js + PostgreSQLPHP 8.2 + MySQLElixir/Phoenix + PostgreSQLNext.js + PostgreSQL
RAM mínima2 GB512 MBNo documentado2 GB
Docker ComposeSí, bundle oficialSí, imagen disponibleSí, contenedor únicoSí
Caso de uso principalEncuestas de disponibilidad, votación grupalCitas estructuradas (servicios/proveedores)Programación individual y grupalProgramación individual (no prod)
Sincronización de calendarioGoogle, Outlook (iCal)Google CalendarGoogle, Outlook, iCloud, CalDAV, NextcloudGoogle, Outlook
SSO / SAMLNoNoNoEliminado (oferta comercial)
Equipos multi-miembroNoMulti-proveedor (servicios)Sí (grupos)Eliminado (oferta comercial)
Workflows / recordatorios automáticosSí (emails)Sí (emails)Sí (emails, Slack, Telegram)Eliminado (oferta comercial)
API RESTSíSí (REST completa)Sí + webhooksSolo API v2
Recomendado para producciónSíSíSíNo (declaración oficial)
Madurez (2026)Activo, v4.15.2 (sept 2026)Activo, v1.6.0 (mayo 2026)Activo, lanzado en respuesta a Cal.comMantenido, alcance intencionalmente limitado

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.

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:

pg_dump -U calcom -d calcom -t bookings -t event_types -t schedules > calcom_export.sql

Los 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).

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.

Endurecimiento post-instalación

Algunos pasos antes de exponer tu instancia al tráfico real.

Protege 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/443 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.

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.

Easy!Appointments: error 500 o página en blanco tras la instalación. Verifica que el directorio storage/ es escribible por el proceso web (chmod -R 775 storage/). 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.

Tymeslot: el contenedor arranca pero la sincronización de calendario falla. La sincronización de Google/Outlook 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.

¿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.

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.

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.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva