# Self-Host Your Scheduling: Cal.com on Ubuntu with a Pangolin VPS Proxy

**URL:** <https://forum.hhf.technology/t/self-host-your-scheduling-cal-com-on-ubuntu-with-a-pangolin-vps-proxy/3221>\
**Category:** Guides & Tutorials\
**Tags:** cal, pangolin\
**Created:** [July 26, 2025, 7:02pm UTC](https://forum.hhf.technology/t/self-host-your-scheduling-cal-com-on-ubuntu-with-a-pangolin-vps-proxy/3221 "2025-07-26T19:02:00Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![hhf.technoloy](https://forum.hhf.technology/user_avatar/forum.hhf.technology/hhf.technoloy/32/68_2.png) [@hhf.technoloy](https://forum.hhf.technology/u/hhf.technoloy)\
**Post date:** [July 26, 2025, 7:02pm UTC](https://forum.hhf.technology/t/self-host-your-scheduling-cal-com-on-ubuntu-with-a-pangolin-vps-proxy/3221/1 "2025-07-26T19:02:00Z")

</div>

## **Self-Host Your Scheduling: [Cal.com](http://Cal.com) on Ubuntu with a Pangolin VPS Proxy (Revised)**

Want to take control of your scheduling with a private, open-source alternative to Calendly? This guide will walk you through installing **[Cal.com](http://Cal.com)** on an Ubuntu Virtual Machine (VM). To make it securely accessible from anywhere, we’ll use **Pangolin** on a Virtual Private Server (VPS) and the **Newt** tunnel client to create a secure link, all managed cleanly within a single file.

This revised guide includes a crucial fix to prevent common performance issues when accessing your instance over the internet.

Let’s get started!

* * *

### **Part 1: Initial Setup on Your Ubuntu VM**

First, we need to prepare your Ubuntu environment by installing Docker and Docker Compose.

#### **Step 1.1: Install Docker & Docker Compose**

1. **Install Docker.** The official script is the simplest method:

2. **Add your user to the Docker group.** This avoids having to type `sudo` for every Docker command.

3. **Install the Docker Compose Plugin.** This tool lets you manage multi-service applications like [Cal.com](http://Cal.com) with ease.

* * *

### **Part 2: Configuring [Cal.com](http://Cal.com) and Newt**

Now we’ll create the configuration files that tell Docker how to run [Cal.com](http://Cal.com), its database, and the Newt tunnel client.

#### **Step 2.1: Create Your Project Directory and Files**

1. Create a dedicated folder for your [Cal.com](http://Cal.com) setup.

2. Inside this directory, create two files: `docker-compose.yml` for the service definitions and `.env` for your secrets and configuration variables.

#### **Step 2.2: Configure the Environment Variables (`.env` file)**

1. Open the `.env` file with a text editor.

2. Copy and paste the following configuration. This file holds all your secrets and settings.

3. **Update the placeholder values** :

4. Save the file and exit (`Ctrl+X`, then `Y`, then `Enter`).

#### **Step 2.3: Define the Services (`docker-compose.yml` file)**

1. Now, open the `docker-compose.yml` file.

2. Copy and paste the following service definitions. This sets up the [Cal.com](http://Cal.com) app, the PostgreSQL database it needs, and the Newt client.

3. Save and exit the editor.

* * *

### **Part 3: Connecting to Pangolin**

Now, let’s get the credentials from your Pangolin VPS to allow the `newt` container to connect.

1. In your **Pangolin dashboard** , navigate to **Sites** and click **Add Site**.
2. Give it a name (e.g., `Ubuntu VM Calcom`) and click **Create Site**.
3. Pangolin will immediately display the credentials for this site. You will see a **Newt ID** and a **Newt Secret**.
4. **Back on your Ubuntu VM** , edit your `.env` file one last time.

```bash
nano .env

```

5. Carefully **copy the `Newt ID` and `Newt Secret`** from the Pangolin dashboard and paste them into the `NEWT_ID` and `NEWT_SECRET` variables.
6. Save and close the file.

* * *

### **Part 4: Launching and Exposing [Cal.com](http://Cal.com)**

With the configuration complete, it’s time to bring everything online.

#### **Step 4.1: Launch the Services**

1. Make sure you are in your project directory (`~/calcom-setup`).
2. Run the following command to download the images and start all three containers.

```bash
docker compose up -d

```

This may take several minutes the first time as Docker downloads the [Cal.com](http://Cal.com) and PostgreSQL images. The `-d` flag runs it in the background.

#### **Step 4.2: Expose the [Cal.com](http://Cal.com) App in Pangolin**

1. In your **Pangolin dashboard** , go to **Resources** and click **Add Resource**.
2. Fill out the form:
  - **Name:** `Cal.com App`
  - **Site:** Select the site you just created (e.g., `Ubuntu VM Calcom`).
  - **Resource Type:** `HTTP Resource`.
  - **HTTP Settings \> Sub-domain:** `meet` (or whatever matches the `NEXT_PUBLIC_WEBAPP_URL` you set).

3. Click **Create Resource**.
4. On the next page, under **Target Configuration** :
  - **Method:** `http`
  - **Host:** Use the **container name** of your [Cal.com](http://Cal.com) app: `calcom-app`. Because `newt` is on the same Docker network, it can find the app by its name.
  - **Port:** `3000`

5. Click **Add Target** and then **Save Targets**.

* * *

### **Part 5: Final Setup**

You’re done! Open a web browser and navigate to the public URL you configured (e.g., `https://meet.myurl.co.uk`). [Cal.com](http://Cal.com)’s initial setup wizard should greet you, allowing you to create your first user account. With the added configuration, your instance should now be fast and stable.

Enjoy your new, private, self-hosted scheduling platform!
