Self-Host Uptime Kuma: Monitor Everything in 15 Minutes
Downtime is expensive. Whether you are running a personal homelab or a production VPS, you need to know when services go down before your users do. Uptime Kuma is a lightweight, self-hosted monitoring tool that checks HTTP(S), TCP, ping, and more with a clean web UI and instant notifications.
In this guide, you will deploy Uptime Kuma with Docker, configure monitors, and set up alerts so you never miss an outage.
Why Self-Host Uptime Kuma?
- Privacy: Your monitoring data stays on your infrastructure.
- Cost: Free and open-source with no per-monitor limits.
- Flexibility: Supports 20+ notification channels including Telegram, Discord, Slack, email, and webhooks.
- Speed: Lightweight enough to run on a 512 MB VPS.
Prerequisites
- A VPS or server with Docker and Docker Compose installed.
- Minimum 512 MB RAM and 1 vCPU.
- A domain or subdomain (optional but recommended for HTTPS).
Step 1: Create the Docker Compose File
Create a directory for Uptime Kuma and add a docker-compose.yml file:
mkdir -p ~/uptime-kuma && cd ~/uptime-kumacat <<'DC' > docker-compose.ymlservices: uptime-kuma: image: louislam/uptime-kuma:1 container_name: uptime-kuma volumes: - ./data:/app/data ports: - '3001:3001' restart: unless-stoppedDCStep 2: Start the Container
Run the following command to start Uptime Kuma:
docker compose up -dWait about 10 seconds for the container to initialize.
Step 3: Access the Web UI
Open your browser and navigate to:
http://your-server-ip:3001On first launch, you will be prompted to create an admin account. Choose a strong username and password.
Step 4: Add Your First Monitor
Click Add New Monitor and configure the following:
- Monitor Type: HTTP(s)
- Friendly Name: Sysbrix Website
- URL: https://sysbrix.com
- Heartbeat Interval: 60 seconds
- Retries: 2
Click Save and Uptime Kuma will immediately start checking your site.
Step 5: Configure Notifications
Go to Settings > Notifications and add a notification channel. For example, to add a Telegram bot:
- Create a bot via @BotFather and copy the token.
- In Uptime Kuma, select Telegram as the notification type.
- Paste the bot token and your chat ID.
- Click Test to verify, then Save.
You can add multiple channels for redundancy.
Step 6: Set Up a Reverse Proxy (Optional)
For HTTPS and a custom domain, use Traefik or Nginx. Here is a Traefik example:
labels: - 'traefik.enable=true' - 'traefik.http.routers.uptime.rule=Host(\`uptime.yourdomain.com\`)' - 'traefik.http.routers.uptime.tls.certresolver=letsencrypt' - 'traefik.http.services.uptime.loadbalancer.server.port=3001'Add these labels to your docker-compose.yml under the uptime-kuma service if Traefik is already running.
Verification
- Visit the dashboard and confirm the monitor shows Up.
- Stop the monitored service temporarily and verify you receive a notification.
- Check the event log for heartbeat history and response times.
Next Steps
- Add monitors for databases, APIs, and internal services.
- Set up status pages for public visibility.
- Integrate with Prometheus for metrics aggregation.
- Explore Docker health checks for self-healing containers.
Monitoring is the foundation of reliable infrastructure. With Uptime Kuma running, you have visibility into every critical service without relying on third-party SaaS.