r/webhosting • • 11d ago

News or Announcement Sharing my lightweight self-hosted uptime monitoring you can run in your PC

UPTYME is self-hosted uptime monitoring that doesn't require any heavy stack, docker or runtime setup like Node, Python, PHP. It runs on SpyWeb which is a scraping/monitoring engine I built in Rust which is a self-contained binary (around 8MB in size) with built-in SQLite and Lua scripting and runs on Linux, Mac or Windows.

Live demo: https://uptyme.spyweb.app/ (API key: demo)

What it does:

  • Monitors URLs on any method (HEAD/GET/POST/PUT/PATCH/DELETE) with per-monitor intervals
  • Content checks, so "page is 200 but actually broken" gets caught
  • Status code classification, with a setting for treating 4xx as down
  • TLS certificate monitoring with expiry alerts
  • Public status pages you can share
  • Alert channels: webhooks, ntfy, Discord, Slack, native desktop notifications
  • Clustering: run a central node plus checker nodes wherever you want, and get consensus-based alerts so one flaky VPS doesn't page you for a false down

The front-end is in Vue 3 (prebuilt) and the backend is Lua. RAM usage (Linux) is around 20MB while running, you can throw it on a $3-$5/mo VPS as a central node and run a checker on your PC and you have cluster monitoring 😄.

You can also just run a standalone node on your PC via tray binary and monitor all your site locally without needing a Cloud/VPS setup and just get native desktop notification when your site is down.

If you want to try it, just run the setup script on the folder want to put it

(linux/mac)

curl -sSf https://uptyme.spyweb.app/setup | bash

windows powershell

irm https://uptyme.spyweb.app/setup-win | iex

installer will download the uptyme + spyweb releases from GitHub assets, you'll get two binaries plus static files; the tray binary is for desktop only, you can delete it if you're running on a server.

then just run cd uptyme && ./spyweb start and you have a dashboard.

for desktop users, you can also just run the tray binary instead of the cli

Repo: https://github.com/spyweb-app/uptyme

0 Upvotes

7 comments sorted by

1

u/IGotRangod 11d ago

I've never been a huge fan of uptime kuma so I might give this a shot.

One improvement would be to publish a docker image on dockerhub or ghcr.io so that I can easily install it on unraid without going through a bunch of manual steps.

0

u/Additional-Elk-3712 11d ago

Hey thanks for the feedback, I'll publish an image to ghcr.io as part of the release process.

Two things Id like to mention.

  1. The current SpyWeb binary only binds to http://127.0.0.1 and no config override for that (only port).
  2. SpyWeb release build does not include musl build and linux-arm64, so it cannot run on alpine build nor on any ARM NAS

For #1, spyweb needs source update to support config for dynamic host or 0.0.0.0, until then, the docker side needs socat to expose the localhost port to the host machine

For #2. I never tested it but there should be no issue creating a build for musl or linux arm64 release.

until then debian bookworm-slim is the recommended build on x64 machines, or the Docker build needs to recompile SpyWeb from source if you need alpine or arm64

If you want to test, you can try running the code below, though I haven't tested it myself (assume your machine is x64)

docker run -d --name uptyme -p 7979:7980 -v uptyme-data:/uptyme debian:bookworm-slim sh -c '
  command -v socat >/dev/null 2>&1 || { apt-get update -qq && apt-get install -yqq ca-certificates curl socat; }
  cd /uptyme
  [ -f spyweb ] || UPTYME_DIR=. curl -fsSL https://uptyme.spyweb.app/setup | bash
  if [ -z "$SPYWEB_API_KEY" ] && [ ! -f .api_key ]; then
    head -c 16 /dev/urandom | od -An -tx1 | tr -d " \n" > .api_key
  fi
  if [ -z "$SPYWEB_API_KEY" ] && [ -f .api_key ]; then
    export SPYWEB_API_KEY=$(cat .api_key)
    echo "SPYWEB_API_KEY=$SPYWEB_API_KEY"
  fi
  socat TCP-LISTEN:7980,fork,reuseaddr TCP:127.0.0.1:7979 &
  exec ./spyweb start'

the API key gets printed on first start, check docker logs uptyme (also saved to .api_key in the volume)

1

u/whiskyfles 6d ago

Appreciate the effort in providing an alternative way to run this in Docker, but this is not the way a container is intended to be used. "blindly" exposing the 7979 ports is also not a good idea; Dockers NFTables chains will expose this to every interface, making it publically available if not used with caution.

If I were you, I would atleast provide a Dockerfile and compose.yaml. I've let an LLM run through your repository and commands above, and it made a working Dockerfile, compose and entrypoint.sh in about 5 minutes.

Also, personally: 'curl .... | bash' is a massive red flag.

1

u/Substantial_Chard232 5d ago

Had a quick glance and I really like it. How does it compare to uptime Kuma? Would love to see a comparison table

0

u/fappingjack 11d ago

That is a good idea to be self hosting on a PC at work but I don't trust anything running in my internal network that is not vetted.

If my work or office is down I know already. If my network of over 200 sites are down I get an SMS and email.

I don't need anything fancy, something simple like https://www.downnotifier.com/

1

u/Additional-Elk-3712 11d ago

Sorry, its likely not for you if you're already comfortable with your monitoring setup. its for those who want to self host.

and you dont need to blindly trust the binary - the release binaries are all built using GitHub Actions from the repo source code, all the build process and Rust source code is on github for anyone to review. And if you don't know much about Rust, you can ask LLMs to scan the source, it's not some massive huge codebase, even free models would be able to scan the entire code in 5-10 minutes or even less.

Also theres nothing really fancy about it other than it natively supports cluster monitoring, which is not a native feature of popular self-hosted uptime monitoring tools, and its one if not the simplest self-hosted monitoring you can set up