> ## Documentation Index
> Fetch the complete documentation index at: https://help.freakhosting.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Install Uptime Kuma with Docker

> Install Uptime Kuma with Docker: run the louislam/uptime-kuma:2 image on port 3001, create your admin account, add monitors and put it behind Nginx with HTTPS.

To install Uptime Kuma with Docker, run `docker run -d --restart=unless-stopped -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2`, open `http://your-server-ip:3001` and create your admin account. For a public install, publish it on `127.0.0.1:3001` instead and serve it through Nginx with HTTPS and WebSocket headers.

| Difficulty | Time | Works on | Needs |
| - | - | - | - |
| Beginner | 15 minutes | Any Linux server with Docker | [Docker](https://help.freakhosting.com/portals/other/how-to-install-docker.md), optionally a domain for HTTPS |

## Before you start

* Uptime Kuma is a self-hosted monitoring tool. It checks websites, ports, ping and more on a schedule and alerts you through email, Discord, Telegram and many other services. It can also publish status pages.
* Keep `/app/data` on local disk (a Docker volume or a local folder). Uptime Kuma's docs warn that NFS shares can corrupt its SQLite database.
* Uptime Kuma can't alert you that its own server is down. To watch your main server, run it on a different server.

## How to install Uptime Kuma with Docker Compose

**1. Create a project folder**

```bash theme={null}
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
```

**2. Create compose.yaml**

```yaml theme={null}
services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "127.0.0.1:3001:3001"
```

`127.0.0.1:` keeps port 3001 off the internet, because ports published by Docker bypass `ufw`. If you won't use a reverse proxy and accept plain HTTP, use `"3001:3001"`.

**3. Start it**

```bash theme={null}
docker compose up -d
```

**4. Create your admin account**

Open the site (through the reverse proxy below, or `http://203.0.113.10:3001` if you published the port publicly). If setup asks which database to use, SQLite is the simplest choice for one server. Then create the admin username and password.

Prefer a single command? This is the official `docker run` equivalent:

```bash theme={null}
docker run -d --restart=unless-stopped -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2
```

## How to put Uptime Kuma behind Nginx with HTTPS

Uptime Kuma uses WebSockets, so the proxy must pass the `Upgrade` and `Connection` headers.

**1. Point a domain at the server**

Create an `A` record such as `status.example.com` pointing to your server IP. See [point a domain to your server](https://help.freakhosting.com/portals/other/how-to-point-a-domain-to-your-server.md).

**2. Create the Nginx site**

Install Nginx ([guide](https://help.freakhosting.com/portals/other/how-to-install-nginx.md)), then create `/etc/nginx/sites-available/uptime-kuma` (Ubuntu/Debian) or `/etc/nginx/conf.d/uptime-kuma.conf` (AlmaLinux/Rocky):

```nginx theme={null}
server {
    listen 80;
    listen [::]:80;
    server_name status.example.com;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

**3. Enable it and test**

On Ubuntu/Debian, enable the site first:

```bash theme={null}
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
```

Then test and reload:

```bash theme={null}
sudo nginx -t
sudo systemctl reload nginx
```

**4. Add a free certificate**

```bash theme={null}
sudo certbot --nginx -d status.example.com
```

See [get a free SSL certificate with Certbot](https://help.freakhosting.com/portals/other/how-to-get-a-free-ssl-certificate-with-certbot.md).

**5. Trust the proxy**

In Uptime Kuma, open **Settings > Reverse Proxy** and set **Trust Proxy** to **Yes**, so it logs real visitor IPs.

## How to check it worked

```bash theme={null}
docker compose ps
curl -I http://127.0.0.1:3001
```

The container shows `Up`, and `curl` returns an HTTP response header. Add your first monitor with **Add New Monitor**, for example an **HTTP(s)** monitor for `https://example.com`.

## How to update Uptime Kuma

Back up the `data` folder first. Then:

```bash theme={null}
cd ~/uptime-kuma
docker compose pull
docker compose up -d --force-recreate
```

If you used `docker run`, pull `louislam/uptime-kuma:2`, then `docker stop uptime-kuma`, `docker rm uptime-kuma` and run the same `docker run` command again. Your data stays in the volume.

## Frequently asked questions

### What port does Uptime Kuma use?

Port 3001 (TCP) inside the container. You can map a different server port, for example `"8081:3001"`.

### Can I upgrade from Uptime Kuma 1 to 2?

Yes, by switching the image tag to `louislam/uptime-kuma:2`. The upgrade converts the database and can take from minutes to hours on large installs. Back up `data` first and don't interrupt it. Read the [migration notes](https://github.com/louislam/uptime-kuma/wiki/Migration-From-v1-To-v2) before you start.

### How do I get email alerts?

Open **Settings > Notifications**, choose **Setup Notification**, pick **Email (SMTP)** and enter your mail provider's SMTP details. Then attach the notification to each monitor.

### How do I make a public status page?

Open **Status Pages**, create a page, give it a slug and add monitors to it. The page is public at `/status/<slug>`.

## Related guides

> [card] [VPS and dedicated server guides](https://help.freakhosting.com/portals/other/vps-and-dedicated-server-guides.md)
>
> Every guide in this section.

> [card] [Email alerts when your server goes down](https://help.freakhosting.com/portals/other/how-to-get-email-alerts-when-your-server-goes-down.md)
>
> Other ways to get downtime alerts.

> [card] [Docker Compose tutorial](https://help.freakhosting.com/portals/other/how-to-use-docker-compose.md)
>
> How compose.yaml works.

> [card] [Nginx reverse proxy](https://help.freakhosting.com/portals/other/how-to-set-up-nginx-as-a-reverse-proxy.md)
>
> Serve containers on your domain.

> [card] [Netdata monitoring](https://help.freakhosting.com/portals/other/how-to-set-up-netdata-monitoring.md)
>
> Live CPU, memory and disk graphs.

***

> [!NOTE]
>
> **Checked against the official [Uptime Kuma wiki](https://github.com/louislam/uptime-kuma/wiki/%F0%9F%94%A7-How-to-Install)** on 4 November 2026 (image tag `louislam/uptime-kuma:2`); `compose.yaml` and the Nginx configuration syntax-tested on Ubuntu 24.04 LTS. Menu names can change between Uptime Kuma releases.

> [!NOTE]
>
> ### Need Extra Help?
>
> If you encounter any issues, our support team is ready to assist:
>
> * **Live Chat:** Quick assistance via our website.
> * **Support Ticket:** [Open a Ticket](https://freakhosting.com/clientarea/submitticket.php)
> * **Discord:** [Join our Community](https://discord.gg/freakhosting)
> * **Email:** [support@freakhosting.com](mailto:support@freakhosting.com)

> [!TIP]
>
> ### Save on Your Hosting
>
> Ready to upgrade your hosting? Use code **KB20** at checkout for **20% off** your first order!

***

**Last Updated:** November 2026


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.