Hosting Uptime Kuma on Fly.io

Uptime Kuma is an easy-to-use self-hosted monitoring tool.

I’ve been using Uptime Kuma for a few projects of mine so here’s how you can host it yourself on Fly.io.

Speedrun:

$ git clone https://github.com/lubien/fly-uptime-kuma.git
$ cd fly-uptime-kuma
$ fly launch \
  --copy-config \
  --auto-confirm \
  --ha=false \
  --name pick-an-unique-name-for-you \
  --now

This will create a 1GB volume and only one machine. If you look at the source, I’ve disabled auto_stop_machines and made min_machines_running = 1 so the monitor is always up.

Hide your Uptime Kuma from the outside world

I’m not a fan of anyone snooping my self hosted things and since the major selling point of Uptime Kuma is alerting I’ve removed public IPs from mine using fly ips release [IP]. You could also change the fly launch command above to use --no-public-ips so they’re never allocated.

To access a hidden uptime kuma you can easily use fly proxy -a KUMA_APP_NAME 3333:3001 and go to http://localhost:3333. If you use an WireGuard app in you computer you could also directly go to http://app_name.internal:3001, that takes some work before you can do it but makes easier for future use.


Let me know your feedback!

12 Likes

Thanks! I got it running in no time.

1 Like

That was a very smooth deploy process.

I like the idea of using OSS tools for something like this. I’ve often decided against it because it’s generally a pain to deploy and keep it online but if the deployment process is so simple then it’s worth considering.

1 Like

Thanks for sharing this! It made it super easy to get up and running.

My app has run out of RAM once or twice (using a free 256MB VM), so I’ve allocated 256MB swap by adding swap_size_mb = 256 at the top level of the fly.toml file. It hasn’t been needed again yet, but should help with occasional spikes.
https://fly.io/docs/reference/configuration/#swap_size_mb-option

2 Likes

As another private/secure access method, Uptime Kuma has built-in support for cloudflared. I used that to set up a Cloudflare tunnel with access control provided by Google authentication. This provides easy, extra secure access to Uptime Kuma without a public IP.

I launched my app with the --no-public-ips arg and used your fly proxy tip to initially tunnel in to get cloudflared set up.

1 Like

Thanks for your effort, I have used your job to deploy a new uptime-kuma instance, works like a champ :smiling_face_with_three_hearts::smiling_face_with_three_hearts:

1 Like

When I do this just as directed, I get this error message

All the good names are already taken of course, so I relaunched with the --name flag and a unique name and all looks to be well so far.

1 Like

Thanks for the heads up, I’ve updated the original post now :pray:

1 Like

Simple and efficient!

Just curious, how your config creates automatically a volume for uptime kuma? By just mentioning the mounts with double square brackets? Any references to the documentation are much appreciated. Thank you!

1 Like

That’s correct. Nowadays flyctl can read your toml and prepare volumes beforehand.

1 Like