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
⚙️ Step 2: Configure Environment Variables
Copy the example environment file:
cp .env.example .env
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
🛢️ 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:
🧱 Step 4: Build and Launch Cal.com
docker compose up --build -d
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)
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.
Top comments (0)