Uptime Kuma
Overview
Uptime Kuma is a popular open source, self-hosted uptime and status monitor with a clean, real-time dashboard. It watches your websites, APIs and services over HTTP(S), TCP, ping, DNS, push, Docker and gRPC, alerts you through more than ninety notification integrations, and publishes status pages you can share.
This SecureAnyCloud image installs Uptime Kuma 1.23.17 from source under /opt/uptime-kuma and fronts it with nginx on port 80, ready for your TLS certificate. It ships with no administrator, so you create your own on your first visit.
Secure by default: the image ships with no administrator and no database rows. Your first visit lands on a one-screen setup wizard where you create your own admin. A uptime-kuma-firstboot.service oneshot ensures the data directory exists, resolves the instance URL and starts the stack on first boot, then disables itself.
What you get:
- Uptime Kuma 1.23.17 (MIT) under
/opt/uptime-kuma - An embedded SQLite database at
/var/lib/uptime-kuma/data/kuma.db, so there is no separate database to run uptime-kuma.servicerunning as the dedicateduptimekumasystem user, bound to loopback at127.0.0.1:3001- An nginx reverse proxy on port 80, configured for the socket.io WebSocket traffic the live dashboard relies on and ready for TLS
uptime-kuma-firstboot.serviceto prepare the data directory and start the stack on first boot- Node.js 20 LTS runtime
- Ubuntu 24.04 LTS base, patched at build time
- 24/7 SecureAnyCloud support with a 24-hour response SLA
Prerequisites
You need an active Azure subscription, an SSH key pair, and a VNet with a subnet.
The recommended VM size is Standard_B2s. Uptime Kuma is lightweight, and 4 GB of RAM is comfortable for hundreds of monitors.
Deploy from the Azure Portal
Search the Marketplace for Uptime Kuma on Ubuntu 24.04 and choose your VM size.
Attach a network security group (NSG) that allows TCP 22 (SSH) from your management network. Also allow TCP 80 and 443 (the dashboard) from the networks that need it. In production, put TLS in front of port 80 (see Step 10).
Deploy from the Azure CLI
RG="uptime-kuma-prod"; LOCATION="eastus"; VM_NAME="uptime-kuma-01" IMAGE_URN="sac1647283583153:uptime-kuma-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION" az network vnet create -g "$RG" --name kuma-vnet --address-prefix 10.80.0.0/16 --subnet-name kuma-subnet --subnet-prefix 10.80.1.0/24 az network nsg create -g "$RG" --name kuma-nsg az network nsg rule create -g "$RG" --nsg-name kuma-nsg --name allow-ssh --priority 100 \
--source-address-prefixes "<your-mgmt-cidr>" --destination-port-ranges 22 --access Allow --protocol Tcp az network nsg rule create -g "$RG" --nsg-name kuma-nsg --name allow-web --priority 110 \
--source-address-prefixes "<your-mgmt-cidr>" --destination-port-ranges 80 443 --access Allow --protocol Tcp
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:uptime-kuma-ubuntu-24-04:default:latest
az vm create -g "$RG" --name "$VM_NAME" --image "$IMAGE_URN" \
--size Standard_B2s --storage-sku StandardSSD_LRS \
--admin-username azureuser --ssh-key-values "$SSH_KEY" \
--vnet-name kuma-vnet --subnet kuma-subnet --nsg kuma-nsg --public-ip-sku StandardConnect via SSH
ssh azureuser@<vm-ip>Verify the services are running
Uptime Kuma listens on loopback at 127.0.0.1:3001. nginx serves the dashboard on port 80 and proxies its WebSocket traffic.
sudo systemctl is-active uptime-kuma nginx ss -tln | grep -E ':80 |127.0.0.1:3001' curl -s -o /dev/null -w 'GET /dashboard -> HTTP %{http_code}\n' http://127.0.0.1/dashboardBoth services report active. The Node server is bound to 127.0.0.1:3001, nginx is bound to :80, and the dashboard returns HTTP 200 through nginx.
Confirm that no admin ships
Nothing sensitive ships in the image. The SQLite database has zero user rows, so every instance starts at the setup wizard. The per-VM instance info note in /root is root-only and contains no credential, only the resolved URL.
sudo sqlite3 /var/lib/uptime-kuma/data/kuma.db 'SELECT COUNT(*) AS users FROM user;'
sudo stat -c '%n perms=%a owner=%U:%G' /root/uptime-kuma-info.txt
sudo grep -E '^UPTIME_KUMA_URL|^NOTE' /root/uptime-kuma-info.txtThe user count is 0 and the note is 600 root:root. The note tells you to create your admin at the setup wizard on your first visit.
Complete the first-run setup wizard
Open http://<vm-ip>/ in your browser. Because no administrator ships, Uptime Kuma redirects you to its one-screen setup wizard.
Choose a language, then enter a Username and a strong Password and click Create. This step secures the instance, so pick a real password.
You are signed in automatically and land on the dashboard, with Quick Stats across the top and an empty monitor list on the left.
Add your first monitor
Click Add New Monitor. Leave Monitor Type set to HTTP(s), enter a Friendly Name, and enter the URL you want to watch. Set the check interval and retries, then click Save.
The monitor starts checking immediately. It appears in the list with a live uptime percentage and a heartbeat bar. The dashboard records each result, for example 200 - OK with an Up status.
The runtime stack
node -v nginx -v jq -r .version /opt/uptime-kuma/package.jsonNode.js 20 LTS runs the server, nginx 1.24 fronts it, and the pinned Uptime Kuma release is 1.23.17.
Data and persistence
All monitoring data lives in the embedded SQLite database under /var/lib/uptime-kuma/data. The directory is captured into the image and carried onto every instance.
sudo ls -lh /var/lib/uptime-kuma/data/kuma.db systemctl is-enabled uptime-kuma-firstboot.service apt-mark showholdThe database file is present and the first-boot service is enabled for the next fresh instance. No packages are held, so the OS security baseline is intact.
Enable HTTPS
nginx already fronts Uptime Kuma on port 80 and is ready for TLS. Point a DNS record at your VM, then obtain a certificate with certbot.
sudo apt-get install -y certbot python3-certbot-nginx
sudo certbot --nginx -d <your-domain> --agree-tos -m <your-email> --redirectcertbot installs the certificate, rewrites the nginx server block for TLS and sets up automatic renewal. Your dashboard is then served over HTTPS.
Managing the service
sudo systemctl status uptime-kuma
sudo systemctl restart uptime-kuma
sudo journalctl -u uptime-kuma -fThe Node server logs to the journal. nginx logs are under /var/log/nginx/.
To back up the instance, snapshot the OS disk. Alternatively, stop the service and copy /var/lib/uptime-kuma/data/kuma.db.
Support
SecureAnyCloud provides 24/7 support for this image by email and live chat. Support covers deployment, nginx TLS termination, upgrades, notification integrations and performance tuning. Email sales@secureanycloud.com.
This is a repackaged open source software product, with additional charges for SecureAnyCloud support services. Uptime Kuma is a trademark of its respective owner. All product and company names are trademarks or registered trademarks of their respective holders. Their use does not imply any affiliation with or endorsement by them.
Deploy on Azure
Launch Uptime Kuma on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.
View this image
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com
Uptime Kuma 1.23 is a popular open source, self-hosted uptime and status monitor. This image delivers it fully installed and reverse-proxied with nginx. Uptime Kuma watches HTTP(S), TCP, ping, DNS, push, Docker, gRPC and other endpoints. It sends alerts through more than ninety notification integrations, publishes public status pages, and tracks response times and TLS certificate expiry.
The Uptime Kuma server runs as a Node.js application under systemd and listens on the loopback interface. nginx sits in front on port 80, and on 443 once you add TLS. nginx proxies the WebSocket traffic that the real-time dashboard relies on. The embedded SQLite database and uploads live on a dedicated, independently resizable EBS data volume mounted at /var/lib/uptime-kuma, separate from the operating system disk.
Secure by default: you create the administrator
Uptime Kuma has no default administrator, and this image does not include one. The AMI starts at Uptime Kuma's built-in first-run setup wizard. The first time you browse to your instance, you create your own administrator username and password.
No shared credentials and no database rows ship in the image. Every instance starts as a clean slate that only you secure.
Connecting to your instance
Connect over SSH on port 22. Use the default login user for your operating system variant and the EC2 key pair you launched with.
On Ubuntu 24.04 the SSH login user is ubuntu. For example: ssh -i your-key.pem ubuntu@<instance-public-ip>
Replace <instance-public-ip> with your instance's public IPv4 address. If you reach the instance over a VPN or Direct Connect, use its private address instead.
First visit: create your administrator
Open the dashboard in your browser.
http://<instance-public-ip>/Uptime Kuma opens the Create your admin account setup wizard. Choose a language, enter a username, choose a strong password and confirm it. Then click Create.
That single step secures your instance. You are signed straight into the dashboard, and the setup wizard never appears again for this instance.
Enable HTTPS before you expose the instance to the public internet (see the HTTPS section below). Until then, treat the password you set here as a credential sent over plain HTTP.
Adding your first monitor
From the dashboard, click Add New Monitor. Choose a Monitor Type, such as HTTP(s), TCP Port, Ping, DNS, Docker or a database probe. Enter a Friendly Name and the target URL or host. Optionally tune the heartbeat interval, retries and accepted status codes, then click Save.
Uptime Kuma starts probing the target immediately, and the monitor appears in the sidebar with a live status. Each monitor's detail page shows its current and average response time, 24-hour and 30-day uptime, and certificate expiry for HTTPS targets. It also shows a real-time response-time chart.
Notifications and status pages
- Notifications: open Settings -> Notifications, or Setup Notification from a monitor. Connect any of the ninety-plus integrations, including email/SMTP, Slack, Discord, Telegram, webhooks and PagerDuty, then attach them to your monitors.
- Status pages: click Status Pages -> New Status Page. Publish a public or private page that shows the health of a chosen set of monitors, with your own logo, title and incident messages.
Managing the services
The stack is two systemd units. On Ubuntu 24.04, manage them with these commands.
# Check status
sudo systemctl status uptime-kuma nginx
# Restart the application or the reverse proxy
sudo systemctl restart uptime-kuma
sudo systemctl restart nginxThe Uptime Kuma server listens on 127.0.0.1:3001, and nginx serves it on port 80.
sudo ss -tlnp | grep -E ':80 |:3001 'LISTEN 0 511 127.0.0.1:3001 0.0.0.0:* users:(("node",pid=6346,fd=21)) LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",...))The data volume
Uptime Kuma's SQLite database (kuma.db), configuration and uploads live on a dedicated EBS volume mounted at /var/lib/uptime-kuma. The volume is independently resizable and separate from the OS disk.
df -h /var/lib/uptime-kumaFilesystem Size Used Avail Use% Mounted on /dev/nvme1n1 30G ... ...% /var/lib/uptime-kumaThe volume is mounted by its filesystem UUID in /etc/fstab, so the mount is stable across reboots and instance re-launches.
To grow it, resize the EBS volume in the AWS console, then run sudo resize2fs /dev/nvme1n1. Substitute the device shown by lsblk.
To protect your monitoring history and configuration, back up /var/lib/uptime-kuma or snapshot the EBS volume.
Enabling HTTPS with Let's Encrypt
For production, terminate TLS at nginx. Point a DNS A record at the instance's public IP, then install certbot and obtain a certificate. Use your own domain and email in the commands below.
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginxRun certbot interactively and follow its prompts. It edits the nginx site for you.
sudo certbot --nginx -d your-domain.example.com -m you@example.com --agree-toscertbot configures the HTTPS server block and sets up automatic renewal. When it completes, your dashboard is available at https://your-domain.example.com/. Make sure your security group allows inbound TCP 443.
Upgrading Uptime Kuma
Uptime Kuma is installed from source under /opt/uptime-kuma. To upgrade within the 1.x line, fetch the tag you want and rebuild the production install as the application user. Then restart the service.
Always snapshot the data volume first. SecureAnyCloud support can help you plan and perform upgrades.
Support
SecureAnyCloud provides this Amazon Machine Image with 24/7 technical support. Support covers deployment, upgrades, integrations, TLS termination and notification setup. Contact us through your AWS Marketplace seller support channel.
Uptime Kuma is a trademark of its respective owner. All product and company names are trademarks or registered trademarks of their respective holders. Their use does not imply any affiliation with or endorsement by them.
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com