Skip to main content
Cal.com offers multiple deployment options to suit your infrastructure needs. This guide covers the most popular methods for self-hosting Cal.com.

Prerequisites

Before deploying Cal.com, ensure you have:
  • Node.js (Version: >=18.x)
  • PostgreSQL (Version: >=13.x)
  • Yarn package manager (recommended)
  • Required environment variables configured (see Configuration)

Docker Deployment

Quick Start with Docker Compose

The fastest way to deploy Cal.com is using Docker Compose. This method includes PostgreSQL, Redis, and optionally Prisma Studio.

1. Clone the Repository

2. Configure Environment

Copy the example environment file and update it:
Minimal required configuration:
Generate VAPID keys using: npx web-push generate-vapid-keys

3. Pull Images

By default, images are pulled from calcom.docker.scarf.sh/calcom/cal.com for download metrics. The official image is also available at hub.docker.com/r/calcom/cal.com.

4. Start Services

Complete stack (PostgreSQL + Cal.com + Prisma Studio):
Cal.com only (external database):
With Prisma Studio for database management:

5. Access Cal.com

Open your browser to http://localhost:3000. The first run will launch a setup wizard to create your initial user.
Optional: Prisma Studio is available at http://localhost:5555 for database management. Remove this service in production environments.

Updating Docker Deployment

To update to the latest version:

ARM Architecture Support

For ARM-based systems (Apple Silicon, ARM servers):
Update your docker-compose.yml to use the ARM-specific image tag.

Docker Services Overview

The default docker-compose.yml includes:
  • database: PostgreSQL 13+ database
  • redis: Redis for caching and queues
  • calcom: Main Cal.com web application
  • calcom-api: Cal.com API v2 service
  • studio: Prisma Studio (optional, for development)

Advanced Docker Build

For custom builds or modifications:

1. Build Custom Image

DOCKER_BUILDKIT=0 is required to enable network bridge during build time. This requirement may be removed in future versions.

2. Build-time Arguments

Customize the build with these arguments:

Vercel Deployment

Deploy Cal.com to Vercel with one click: Deploy with Vercel
Vercel Pro Plan is required due to serverless function limits on the free tier.

Vercel Configuration

  1. Required Environment Variables:
  1. Build Settings:
  • Build Command: cd ../.. && yarn build
  • Output Directory: apps/web/.next
  • Install Command: yarn install
  • Root Directory: apps/web/
  1. External Database Required:
Vercel deployments require an external PostgreSQL database. Recommended providers:

Railway Deployment

Deploy Cal.com on Railway: Deploy on Railway Railway includes managed PostgreSQL and automatic SSL certificates.

Railway Setup

  1. Click the Deploy button above
  2. Connect your GitHub account
  3. Configure required environment variables
  4. Railway automatically provisions PostgreSQL
  5. Access your deployment at the provided Railway URL
See Railway’s detailed guide for more information.

Northflank Deployment

Deploy Cal.com on Northflank: Deploy on Northflank Northflank provides managed infrastructure with built-in CI/CD.

Render Deployment

Deploy Cal.com on Render: Deploy to Render Render includes managed PostgreSQL and automatic HTTPS.

Manual Installation

For bare-metal or VM deployments:

1. Install Dependencies

2. Clone and Install

3. Configure Environment

4. Setup Database

5. Build and Start

Development:
Production:

6. Process Manager (Production)

Use PM2 to keep Cal.com running:

Reverse Proxy Setup

Nginx Configuration

SSL with Let’s Encrypt

Healthcheck

Cal.com includes a built-in healthcheck endpoint:
The Docker image includes automatic health monitoring:

Troubleshooting

SSL Edge Termination

If running behind a load balancer handling SSL:
Only use this if you trust your load balancer. Do not use in untrusted networks.

CLIENT_FETCH_ERROR

If NextAuth cannot resolve the hostname:

VAPID Keys Error

If you see “No key set vapidDetails.publicKey”:

Database Connection Issues

Ensure your database URL is correctly formatted:

Production Checklist

  • Set strong NEXTAUTH_SECRET and CALENDSO_ENCRYPTION_KEY
  • Configure proper DATABASE_URL with connection pooling
  • Set correct NEXT_PUBLIC_WEBAPP_URL for your domain
  • Generate and configure VAPID keys for push notifications
  • Configure email provider (SendGrid, SMTP, or Resend)
  • Remove Prisma Studio service from docker-compose
  • Enable SSL/HTTPS with valid certificates
  • Configure backup strategy for PostgreSQL
  • Set up monitoring and logging
  • Review and configure CSP policy
  • Disable telemetry if required: CALCOM_TELEMETRY_DISABLED=1

Next Steps