DEV Community

Cover image for How to Self-Host Cal.com on Ubuntu (with Monitoring)
Alexander Neitzel
Alexander Neitzel

Posted on • Originally published at garmingo.com

How to Self-Host Cal.com on Ubuntu (with Monitoring)

Cal.com is one of the best open-source alternatives to Calendly — and yes, you can self-host it.

In this guide, I’ll show you how to deploy Cal.com using Docker on a clean Ubuntu server (works great on any VPS), connect it to a PostgreSQL database, and make sure it’s always online by the time you’re done.


🧰 What You’ll Need

  • Ubuntu 22.04 server (or similar)
  • Docker + Docker Compose installed
  • Domain name (optional but recommended)
  • SMTP credentials (for email support)
  • 15 minutes

🚀 Step 1: Clone the Cal.com Repository

git clone https://github.com/calcom/cal.com.git
cd cal.com
Enter fullscreen mode Exit fullscreen mode

⚙️ Step 2: Configure Environment Variables

Copy the example environment file:

cp .env.example .env
Enter fullscreen mode Exit fullscreen mode

Edit .env and set your desired values:

DATABASE_URL=postgresql://cal:calpass@db:5432/calcom  
NEXTAUTH_SECRET=generateOne  
SMTP_HOST=smtp.example.com  
SMTP_USER=username  
SMTP_PASS=password
Enter fullscreen mode Exit fullscreen mode

🛢️ Step 3: Set Up PostgreSQL with Docker

Create a docker-compose.yml:

version: "3.9"

services:
  db:
    image: postgres:14
    environment:
      POSTGRES_USER: cal
      POSTGRES_PASSWORD: calpass
      POSTGRES_DB: calcom
    volumes:
      - pgdata:/var/lib/postgresql/data

  calcom:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://cal:calpass@db:5432/calcom
    depends_on:
      - db

volumes:
  pgdata:
Enter fullscreen mode Exit fullscreen mode

🧱 Step 4: Build and Launch Cal.com

docker compose up --build -d
Enter fullscreen mode Exit fullscreen mode

Cal.com will now be running on http://your-server-ip:3000


🌐 Step 5: Add a Domain (Optional)

Use NGINX or a reverse proxy like Caddy or Nginx Proxy Manager to bind Cal.com to calendar.yourdomain.com with HTTPS.


🧪 Step 6: Test It

Go to your IP or domain → sign up → test the booking flow.

Check database persistence and email sending.


✅ Step 7: Monitor Your Cal.com Instance (Highly Recommended)

Running a self-hosted service means you’re responsible when things go down.

Set up uptime monitoring + a public/private status page in 2 minutes using Garmingo Status:

  • Monitor https://calendar.yourdomain.com
  • Get alerts via Email, Slack, Telegram, etc.
  • Track uptime, SLA, and incidents
  • Publish a status page (or keep it internal)
  • Forever free plan (no credit card needed)

👉 Set it up here

Because what good is a calendar app if it's offline?


🧘 TL;DR

  • ✅ Clone Cal.com
  • ⚙️ Set up PostgreSQL via Docker
  • 🔧 Configure .env
  • 🌐 Optional: Add domain
  • 🧠 Pro move: Set up monitoring with Garmingo

Self-hosting is powerful — but only if your users can rely on it.

👉 Monitor your Cal.com instance with Garmingo Status

Top comments (0)