Free off-site monitoring with Fly.io and Uptime Kuma
I saw a post yesterday on Reddit showing how to use the Google Cloud free tier to run Uptime Kuma. One of the alternatives for free hosting mentioned in the post was fly.io and since their tooling intrigued me I have since then started hosting Uptime Kuma on their platform (combined with notifications through Telegram to be as independent from my own infrastructure as possible).
Their free tier includes a vm to run own code or a docker container along with 1cpu and 256mb of ram. this can be coupled with a persistent storage volume of 3gb, so plenty of resources for Uptime Kuma. In addition to this they allow usage of own domain names so you can have your status page at
https://status.mydomain.cominstead of on one of their subdomains.
All you need is the following toml file to deploy the Uptime Kuma container on fly.io:
# fly.toml file generated for mykuma app = "mykuma" kill_signal = "SIGINT" kill_timeout = 5 processes =  [build] image = "louislam/uptime-kuma:1" [mounts] source="kuma" destination="/app/data" [env] PORT = "8080" [experimental] allowed_public_ports =  auto_rollback = true [[services]] http_checks =  internal_port = 8080 processes = ["app"] protocol = "tcp" script_checks =  [services.concurrency] hard_limit = 25 soft_limit = 20 type = "connections" [[services.ports]] force_https = true handlers = ["http"] port = 80 [[services.ports]] handlers = ["tls", "http"] port = 443 [[services.tcp_checks]] grace_period = "1s" interval = "15s" restart_limit = 0 timeout = "2s"
The configuration refers to a volume called "kuma", which needs to be created before the app can be deployed by running
flyctl volumes create kuma.
I have written a bit more in detail about on on my blog: https://blog.9wd.eu/posts/flyio/ (first draft status, may need refinement)
humptydumpty last edited by
Hi Felix. Thanks for the guide. How is updating the app handled?
@humptydumpty to reliably update i ended up always updating the docker tag to the desired version. With the tag updated you just need to run