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)