Cal.com Docker Compose: Citas y Reuniones Self-Hosted 2026

Cal.com Docker Compose - Citas y reuniones self-hosted

Cal.com Docker Compose te permite desplegar en tu propio servidor una plataforma de reserva de citas y reuniones, alternativa open source a Calendly: tipos de evento, disponibilidad, integraciones con Google Calendar, Zoom o Meet y opción de pagos. En esta guía verás cómo instalar Cal.com con Docker Compose usando la imagen oficial, configurar PostgreSQL y Redis, generar NEXTAUTH_SECRET y exponer el servicio detrás de un proxy inverso. Más guías en Docker Compose.

¿Qué es Cal.com Docker Compose?

Cal.com es una aplicación open source (AGPL) para gestionar reservas de citas y reuniones. Los invitados eligen una franja horaria en tu enlace público y la aplicación sincroniza con tu calendario y con videollamidas (Zoom, Google Meet, etc.). Con Cal.com Docker Compose despliegas la aplicación junto con la base de datos PostgreSQL y la caché Redis en un solo stack. El proyecto está en GitHub (calcom/cal.com) y la documentación de self-hosting en cal.com/docs. No necesitas clonar el repositorio si usas la imagen preconstruida de Docker Hub; el equipo mantiene el Dockerfile y el docker-compose.yml en la raíz del repositorio para quien quiera construir la imagen o contribuir.

La ventaja de usar Cal.com Docker Compose es tener el control total sobre los datos de tus eventos y disponibilidad, sin depender del servicio cloud. Ideal para consultores, equipos pequeños o empresas que quieren una URL de reservas propia (por ejemplo citas.tudominio.com). La primera vez que accedas a la aplicación se ejecutará un asistente de configuración para crear el usuario administrador; a partir de ahí podrás definir tipos de evento, horarios disponibles e integraciones. Si ya usas otros servicios con Docker Compose en el mismo servidor, este stack puede convivir en la misma red o aislado según prefieras.

Cal.com ofrece versión cloud en cal.com para quien no quiera administrar la infraestructura; la opción self-hosted con Cal.com Docker Compose es la preferida por equipos que necesitan datos en sus propios servidores o que ya tienen un homelab con Docker. La aplicación soporta múltiples usuarios, equipos, rutas de reserva personalizables y webhooks para integrar con CRM o herramientas internas. El proyecto está muy activo en GitHub y la documentación cubre desde la instalación básica hasta la API y las integraciones de pago con Stripe.

Requisitos e instalación con Cal.com Docker Compose

Necesitas Docker y Docker Compose v2. Cal.com requiere PostgreSQL (el proyecto recomienda versión 15 o superior) y opcionalmente Redis para caché y colas. Antes de arrancar, genera un secreto para la autenticación: openssl rand -base64 32 y guárdalo como NEXTAUTH_SECRET en tu archivo .env. La documentación oficial indica que la configuración mínima para evaluar la aplicación puede dejarse por defecto en el .env.example del repositorio; para producción conviene definir también NEXT_PUBLIC_WEBAPP_URL con la URL pública (por ejemplo https://citas.tudominio.com) y asegurar que NEXTAUTH_URL apunte a ${BASE_URL}/api/auth. Las variables de tiempo de ejecución se detallan en la documentación de Docker de Cal.com.

Puedes seguir dos caminos: clonar el repositorio de Cal.com y usar el docker-compose.yml incluido (con build de la imagen y servicios opcionales como Prisma Studio o la API v2), o usar un compose simplificado solo con la imagen preconstruida, PostgreSQL y Redis. En ambos casos el resultado es un stack funcional de Cal.com Docker Compose; la opción con clonación es la recomendada por el proyecto para estar al día con los cambios del compose oficial.

No necesitas instalar Node.js ni ejecutar builds en tu máquina: la imagen calcom/cal.com en Docker Hub incluye la aplicación ya construida. El único requisito es tener Docker y Docker Compose v2 (el plugin compose integrado en la CLI de Docker). En equipos con poca memoria, asegúrate de tener al menos 2 GB de RAM disponibles para el contenedor de la aplicación; para producción se recomiendan 4 GB o más. Una vez tengas el .env con NEXTAUTH_SECRET y, si aplica, las URLs públicas, el primer docker compose up -d creará las tablas en PostgreSQL y te permitirá completar el asistente de configuración en el navegador.

docker-compose.yml para Cal.com Docker Compose

El siguiente ejemplo usa la imagen oficial calcom/cal.com de Docker Hub, sin construir desde código. Incluye PostgreSQL 15, Redis y el servicio Cal.com. Crea un directorio para el proyecto, guarda el archivo como docker-compose.yml y crea un .env con al menos NEXTAUTH_SECRET (y opcionalmente NEXT_PUBLIC_WEBAPP_URL y NEXTAUTH_URL si usas dominio propio). La contraseña de PostgreSQL en el ejemplo es calcom_secret; en producción usa una contraseña fuerte y la misma en DATABASE_URL. El servicio calcom depende de que la base de datos esté lista gracias al healthcheck; así se evitan errores de conexión en el arranque.

services:
  calcom-db:
    image: postgres:15-alpine
    container_name: calcom-db
    environment:
      POSTGRES_USER: calcom
      POSTGRES_PASSWORD: calcom_secret
      POSTGRES_DB: calendso
    volumes:
      - calcom-db-data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U calcom -d calendso"]
      interval: 5s
      timeout: 5s
      retries: 5

  calcom-redis:
    image: redis:7-alpine
    container_name: calcom-redis
    volumes:
      - calcom-redis-data:/data
    restart: unless-stopped

  calcom:
    image: calcom/cal.com:latest
    container_name: calcom
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://calcom:calcom_secret@calcom-db:5432/calendso
      NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
      NEXTAUTH_URL: ${NEXTAUTH_URL:-http://localhost:3000/api/auth}
      NEXT_PUBLIC_WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_URL:-http://localhost:3000}
    depends_on:
      calcom-db:
        condition: service_healthy
    restart: unless-stopped

volumes:
  calcom-db-data:
  calcom-redis-data:

En el .env define NEXTAUTH_SECRET con la salida de openssl rand -base64 32. Si accedes por IP y puerto (por ejemplo http://TU_IP:3000), puedes dejar NEXTAUTH_URL y NEXT_PUBLIC_WEBAPP_URL por defecto o exportarlos en el .env. Arranca con docker compose up -d. La primera vez que abras http://TU_IP:3000 se ejecutará el asistente de configuración inicial; crea tu usuario y configura tipos de evento y disponibilidad. Para producción detrás de un proxy, define NEXT_PUBLIC_WEBAPP_URL con la URL pública (por ejemplo https://citas.tudominio.com) y NEXTAUTH_URL con https://citas.tudominio.com/api/auth. La documentación de Cal.com detalla variables adicionales (licencia, telemetría, integraciones). Con este archivo tienes un despliegue funcional de Cal.com Docker Compose.

Si aparece un error de tipo CLIENT_FETCH_ERROR relacionado con next-auth, suele deberse a que la URL que usa el contenedor para llamar a sí mismo no es resoluble desde dentro de la red Docker. En ese caso, en entornos de prueba puedes probar con NEXTAUTH_URL=http://localhost:3000/api/auth para que el backend use localhost; en producción la URL debe ser la pública y el proxy debe reenviar correctamente las peticiones a /api/auth. El healthcheck de PostgreSQL garantiza que el contenedor de Cal.com no arranque antes de que la base de datos esté lista; si quieres usar solo la imagen sin Redis, puedes eliminar el servicio calcom-redis y el volumen asociado del compose, aunque para uso serio se recomienda mantener Redis. La portabilidad del stack de Cal.com Docker Compose permite replicar el mismo entorno en otro servidor copiando el docker-compose.yml, el .env y los volúmenes de datos.

Configurar Cal.com Docker Compose detrás de proxy inverso

En producción conviene poner la aplicación detrás de Traefik, Caddy o Nginx para terminar SSL y ofrecer una URL amigable. Configura el proxy para reenviar las peticiones al puerto 3000 del contenedor calcom (o al host si el proxy está en la misma máquina). Es importante que NEXT_PUBLIC_WEBAPP_URL y NEXTAUTH_URL coincidan con la URL que ve el usuario; si no, la autenticación y las redirecciones pueden fallar. La documentación menciona que, si el balanceador termina SSL, en algunos entornos puede ser necesario ajustar variables relacionadas con TLS; solo hazlo si conoces las implicaciones.

Los datos persisten en los volúmenes calcom-db-data y calcom-redis-data. Haz copias de seguridad periódicas de PostgreSQL con pg_dump. Para más ejemplos de proxy y redes, consulta la documentación de Docker Compose y las guías de Docker Compose en este blog (Traefik, Caddy, etc.). Mantener Cal.com Docker Compose detrás de un proxy con HTTPS es la práctica recomendada cuando el servicio es accesible desde internet.

Con Traefik o Caddy puedes definir un hostname (por ejemplo citas.tudominio.com) y dejar que el proxy gestione el certificado SSL con Let’s Encrypt. Asegúrate de que las cabeceras de proxy (X-Forwarded-For, X-Forwarded-Proto, Host) se reenvíen correctamente para que la aplicación detecte la URL real y genere enlaces válidos en los correos de confirmación. Si cambias de dominio más adelante, tendrás que actualizar NEXT_PUBLIC_WEBAPP_URL y NEXTAUTH_URL y reiniciar el contenedor; los datos de la base de datos no dependen de la URL, así que no se pierde la configuración de eventos ni los usuarios.

Actualizar y ampliar Cal.com Docker Compose

Para actualizar la aplicación: docker compose pull y docker compose up -d. Revisa las notas de la versión en GitHub por posibles migraciones de base de datos o cambios en variables de entorno. Si prefieres el método oficial completo (clonar el repo, usar el compose con build y servicios opcionales como Prisma Studio o la API v2), sigue la guía en cal.com/docs; el mismo repositorio incluye el docker-compose.yml de referencia. Para integraciones con Google Calendar, Zoom, Stripe u otros servicios, configura las variables y los webhooks indicados en la documentación. La aplicación soporta equipos, múltiples tipos de evento y páginas de reserva personalizables; todo se gestiona desde la interfaz una vez el stack de Cal.com Docker Compose está en marcha.

Si necesitas la API v2 de Cal.com para integraciones programáticas (por ejemplo con n8n o scripts propios), el repositorio oficial incluye un servicio calcom-api en el docker-compose que requiere variables adicionales como JWT_SECRET, REDIS_URL y opcionalmente CALCOM_LICENSE_KEY. Para la mayoría de usuarios que solo quieren una interfaz web de reservas, el servicio calcom con la imagen de Docker Hub es suficiente. Cal.com Docker Compose te permite pasar de cero a una instancia de citas self-hosted en unos minutos, con la flexibilidad de ampliar después con API, equipos o pagos según necesites.

Los tipos de evento pueden tener duración fija o variable, buffers antes y después, y límite de reservas por día. Puedes ofrecer varios enlaces de reserva (uno por tipo de consulta o por equipo) y embeber el widget en tu web. Las notificaciones por correo se envían si configuras SMTP en las variables de entorno; sin SMTP la aplicación sigue funcionando pero no enviará invitaciones ni recordatorios por email. Consulta la documentación de Cal.com para configurar OAuth con Google o Microsoft y sincronizar calendarios automáticamente. Con el stack descrito, Cal.com Docker Compose queda listo para evaluación o producción con proxy y HTTPS.

Conclusión

Con Cal.com Docker Compose tienes una plataforma de citas y reuniones self-hosted en pocos minutos: reservas por enlace, sincronización con calendarios, videollamadas y opción de pagos, con los datos en tu servidor. La imagen oficial en Docker Hub y un compose con PostgreSQL y Redis son suficientes para evaluar o usar en producción; combinado con un proxy inverso y NEXTAUTH_SECRET seguro tendrás una alternativa a Calendly lista para usar. Si quieres explorar más stacks, revisa otras guías de docker-compose en tutorialesdevops.es.

FAQ sobre Cal.com Docker Compose

¿En qué puerto escucha Cal.com? Por defecto en el 3000 dentro del contenedor; el ejemplo mapea 3000:3000 en el host.

¿Es obligatorio usar Redis? En configuraciones mínimas la aplicación puede arrancar solo con PostgreSQL; para producción y para usar ciertas funciones (colas, caché) se recomienda Redis. El compose de ejemplo incluye ambos.

¿Cómo genero NEXTAUTH_SECRET? Ejecuta openssl rand -base64 32 y usa el valor en el archivo .env. Es necesario para que la autenticación funcione correctamente.

¿Puedo usar el compose oficial del repositorio? Sí. Clona github.com/calcom/cal.com, copia .env.example a .env, configura las variables y ejecuta docker compose up -d. Incluye más servicios (API v2, Prisma Studio) y build desde código; la documentación está en cal.com/docs.

¿Dónde se guardan los datos? En los volúmenes Docker calcom-db-data (PostgreSQL) y calcom-redis-data (Redis). Haz backups de la base de datos para no perder eventos ni configuración.

¿Cómo actualizo la instancia? Ejecuta docker compose pull y luego docker compose up -d. Si usas la imagen latest, cada actualización traerá la última versión; para entornos críticos puedes fijar una etiqueta de versión (por ejemplo calcom/cal.com:v4.0.0) y actualizar de forma controlada. Con Cal.com Docker Compose las actualizaciones se limitan a actualizar la imagen y reiniciar los contenedores, salvo que haya migraciones de esquema que requieran pasos adicionales indicados en las release notes.

Avatar

Por Mid

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x