★ MIT licensed Self-hosted

Self-hosted uptime monitoring

A full-stack monitoring app you can run with one docker compose up

Your data, your servers
No per-monitor pricing
Runs on a $5 VPS
~/easymonitor — zsh
$ git clone https://github.com/easymonitordev/easymonitor.git
$ cd easymonitor
$ ./setup.sh
→ Detecting Docker… ok
→ Generating .env, app key, JWT secret… ok
→ Building images, starting containers…
→ Migrations ok · Frontend assets ok · Probe online ok
EasyMonitor is running at https://monitor.example.com
Register the first user to claim admin.
$

Built on rock-solid open source

Laravel 12
PostgreSQL 18
TimescaleDB
Redis Streams
Go probes
Docker Compose
Features

Everything a small team needs — nothing you'll never use.

No 30-day trial. No 50-monitor cap. No per-seat add-ons. Just monitoring that works on your hardware.

HTTP & ICMP checks

Schedule from 30 seconds to 1 hour per monitor. Configurable consecutive-failure threshold so flaky single hits don't page you.

Multi-region probes

Deploy a ~10 MB Go binary anywhere — via Tailscale, Cloudflare Tunnel, or your own VPN. Cross-probe quorum eliminates false positives.

Multi-channel alerts

Email and Pushover today, on every down and recovery. Each user picks their own channels; each monitor picks a subset.

Status pages, your way

Public, unlisted, or private. Custom domains with auto-HTTPS via Caddy on-demand TLS. Themes, custom CSS, logo upload, incidents and scheduled maintenance.

Time-series at scale

TimescaleDB hypertables store every check result efficiently. Keep years of history without your Postgres breaking a sweat.

Teams & projects

Group monitors into projects, share with collaborators, control access with role-based permissions. Per-user notification preferences, no shared inboxes.

Lowest interval
30s
Probe binary
~10 MB
Min RAM
~2 GB
License
MIT
From zero to monitoring

Three steps. No yak-shaving.

01

Clone & run setup.sh

Interactive installer detects your environment, configures DNS, generates secrets, and starts every container.

$ git clone https://github.com/easymonitordev/easymonitor.git
$ cd easymonitor
$ ./setup.sh
02

Add a monitor

Drop in a URL, pick an interval, choose alert channels. Group monitors by project so a marketing site doesn't page the API team.

api.acme.com
200 · 142ms
last 12huptime 99.97%
03

Deploy a remote probe

Run the probe binary in any region. Tunnel back to Redis over Tailscale or Cloudflare — never expose Redis to the internet.

$ docker run -d \
    -e PROBE_NODE_ID=eu-west-1 \
    -e PROBE_REDIS_URL=redis://... \
    -e PROBE_TOKEN=$TOKEN \
    easymonitor/probe-node:latest
Architecture

Boring tech, glued together right.

A Laravel app schedules checks onto Redis Streams. Lightweight Go probes claim them, run HTTP/ICMP requests, and publish results back. A consumer writes to TimescaleDB and triggers alerts. Predictable, observable, and easy to scale by adding more probes.

  • Per-node consumer groups — cross-probe quorum decides up/down, not a single flaky probe.
  • Caddy on-demand TLS — customers point their domain, you don't touch DNS.
  • Laravel Horizon — queue dashboard so you actually know what's happening in prod.
UI
Laravel + Livewire
Admin dashboard · Public status pages
Bus
Redis Streams
checks · results
Storage
TimescaleDB
Hypertable
Probes
Go binary
N regions · ~10 MB
Why self-host

SaaS monitoring is great — until it isn't.

When your monitoring vendor has an outage, your blind spots are exactly the moments you needed it. Self-hosting puts the watcher under your control.

EasyMonitor Typical SaaS
Monitors Unlimited Tier-capped
Where data lives Your server Their server
Custom-domain status pages Included Premium tier
Probe regions Any host you own Vendor's list
Source code MIT, on GitHub Closed
Stack

The boring-tech stack you already know.

If you've shipped a Laravel app before, you can debug, extend, and operate EasyMonitor. No bespoke runtime, no exotic database, no surprise.

Backend
Laravel 12 · PHP 8.4
Livewire 3 · Horizon
Frontend
Tailwind v4 · DaisyUI
Alpine.js
Probe
Go 1.24
Multi-arch image
Database
PostgreSQL 18
+ TimescaleDB 2.26
Bus
Redis 7 Streams
Consumer groups
Edge
Caddy 2.10
On-demand TLS
FAQ

Questions developers ask first.

What hardware do I need?
About 2 GB of RAM gets you running. 4 GB is comfortable for production. A $5/month VPS with Docker is plenty for hundreds of monitors.
How do I add probes in other regions?
Run easymonitor/probe-node on any host. The probe needs to reach Redis on your main server — the installer can wire up Tailscale automatically, or you can use Cloudflare Tunnel, WireGuard, or your own VPN. Don't expose Redis to the public internet.
Which alert channels are supported?
Email and Pushover today, with per-user, per-monitor selection. The notification layer is pluggable — Slack, webhooks, and SMS are next.
Can customers point their own domain at status pages?
Yes. Caddy provisions a Let's Encrypt cert on the first request via on-demand TLS. The app gates which domains are allowed using a verification flag, so nobody can point arbitrary hostnames at your instance.
Is it really MIT licensed?
Yes. MIT, no commercial restrictions, no “source-available” trickery. Use it for personal projects, internal tools, or as part of your commercial offering.
How do I contribute?
Fork, branch, write a test for your change, run php artisan test, open a PR. CI runs Pint and the test suite on every push. See CONTRIBUTING.md.

Ready in less time than it takes to compare SaaS plans.

Clone the repo, run the installer, and watch your dashboard light up in a few minutes.