📅 Setup Cal.com — Self-Hosted Scheduling & Booking Platform
Deploy Cal.com on Ubuntu with Docker and PostgreSQL — the open-source Calendly alternative for self-hosted appointment scheduling with team calendars, availability rules, and Google/Outlook integrations.
📦 Resources & Setup Scripts
Before starting, please make sure to grab the required scripts from our GitHub repository.
Quick Install:
wget https://raw.githubusercontent.com/mhmdali94/Docker/refs/heads/main/tools/calcom/calcom-ubuntu.sh
chmod +x calcom-ubuntu.sh
sudo bash calcom-ubuntu.sh
Tutorial Steps
1 Download the Script
wget https://raw.githubusercontent.com/mhmdali94/Docker/refs/heads/main/tools/calcom/calcom-ubuntu.sh
2 Make it Executable
chmod +x calcom-ubuntu.sh
3 Run the Installer
The script installs Docker, deploys PostgreSQL and Cal.com containers, generates a random NEXTAUTH_SECRET and CALENDSO_ENCRYPTION_KEY, runs Prisma database migrations, and starts the web UI on port 3000.
sudo bash calcom-ubuntu.sh
4 Access the Web UI
Open your browser and navigate to the Cal.com interface:
http://<your-server-ip>:3000
Ports Used
| Port | Purpose |
|---|---|
| 3000 | Cal.com Web UI |
| 5432 | PostgreSQL (internal only) |
Overview
Cal.com (formerly Calendso) is an open-source scheduling and appointment booking platform — a self-hosted alternative to Calendly. It lets individuals and teams define their availability, create booking event types, and share a booking link so clients or colleagues can schedule time without back-and-forth emails. Cal.com supports Google Calendar and Microsoft Outlook two-way sync, SMTP email confirmations, team round-robin scheduling, Stripe payment integration for paid bookings, and a public API. Self-hosting gives you complete control over your booking data and removes per-seat pricing.
Why Use It
Calendly charges per user per month and stores all your booking data on their servers. Cal.com is entirely free to self-host — run unlimited users and booking pages on your own server. For agencies, clinics, consultancies, or any team that schedules external appointments, Cal.com eliminates subscription costs while giving you full data ownership. The open-source codebase means you can customize booking flows, branding, and integrations beyond what Calendly permits.
When You Need It
Who Should Use It
Real Use Cases
Main Features
How to Use After Installation
Security Best Practices
Ports and Firewall Notes
Cal.com uses port 3000 for the web UI. PostgreSQL on port 5432 is internal to the Docker network. Restrict port 3000 with a reverse proxy behind HTTPS. Firewall: ufw allow from 192.168.1.0/24 to any port 3000.
Backup and Maintenance
Common Mistakes
Troubleshooting
Alternatives
Calendly is the commercial hosted alternative. Rallly (covered in this academy) is a simpler meeting poll tool (Doodle alternative) for group scheduling without individual calendar sync. Zcal is another open-source scheduling tool. Formbricks can handle simple scheduling forms. For internal team scheduling only, most calendar apps (Google Calendar, Outlook) have built-in scheduling pages.
When Not to Use It
If you only need basic meeting polls (e.g. "when is everyone free this week?"), use Rallly instead — Cal.com is designed for individual or team booking pages with calendar sync. Cal.com has significant infrastructure requirements (Node.js, PostgreSQL, and email delivery); for single-person use without team features, the self-hosted overhead may not justify the setup versus using Calendly's free tier.
Frequently Asked Questions
What database does Cal.com require?
Cal.com requires PostgreSQL. The install script deploys PostgreSQL alongside the Cal.com container on a shared Docker network with all connection credentials pre-configured.
Does Cal.com support Google Calendar and Outlook sync?
Yes. Cal.com supports two-way sync with Google Calendar and Microsoft Outlook. OAuth app credentials must be configured in Settings → Integrations after installation.
Can Cal.com send email confirmations?
Yes. Cal.com sends booking confirmations and reminders via SMTP. Configure EMAIL_SERVER_HOST, EMAIL_SERVER_PORT, EMAIL_SERVER_USER, EMAIL_SERVER_PASSWORD, and EMAIL_FROM in the Docker environment variables.
What is the default port for Cal.com?
Cal.com runs on port 3000 by default. Use Nginx Proxy Manager with HTTPS and a custom domain for production deployments.
Does Cal.com support team scheduling?
Yes. Cal.com supports team event types with multiple assignable team members, round-robin booking distribution, and collective events where all members must be available.
