Skip to content
thetoadsagePublic

About

Private, self-hosted uptime monitoring and incident history for debrid providers.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

DebridUp

DebridUp is a private, self-hosted status dashboard for debrid services. It checks your configured providers, tracks availability and response times, records incidents, and can notify you through ntfy.

Supported providers: TorBox, Premiumize, AllDebrid, Real-Debrid, Torrin, PikPak, Offcloud, Debrid-Link, EasyDebrid, Debrider, and Deepbrid.

What it does

  • Shows whether each provider is up, degraded, slow, or unavailable.
  • Tracks incidents, recoveries, availability, and p50/p95 response times.
  • Displays a graph-based service history for 24 hours, 7 days, or 30 days.
  • Exports compact JSON data for 1, 7, 30, or 90 days, or all retained history.
  • Sends incident and recovery notifications through ntfy.
  • Encrypts provider credentials and notification URLs before storing them in SQLite.
  • Runs on AMD64 and ARM64 with Docker Compose or the included Unraid template.

Authenticated checks use read-only account or history endpoints. PikPak requires a compatible access token, which may need to be replaced when it expires.

When a provider connection fails, DebridUp makes short requests to Cloudflare and Google connectivity endpoints. If neither hostname responds, it also checks https://1.1.1.1/help without DNS. A working IP check suggests DNS or the hostname controls may be failing; if it fails too, local connectivity is uncertain. Either way, the provider result is unknown: it remains in the raw check log but does not advance an incident or count against provider availability. After DebridUp restarts, providers remain unknown until a fresh check completes. These control requests reveal the monitor's public IP to their operators.

Docker quick start

  1. Copy the example environment file and set an admin password of at least 12 characters:

    cp .env.example .env
  2. Create the encryption key:

    install -d -m 0700 secrets
    openssl rand -base64 32 | sudo install -m 0400 -o root -g root /dev/stdin secrets/encryption_key
  3. Start DebridUp:

    docker compose pull
    docker compose up -d

Open http://localhost:8080, sign in, and add providers under Settings → Provider settings.

Use a TLS reverse proxy before making DebridUp available outside a trusted private network. The published image is ghcr.io/thetoadsage/debridup:latest.

Important

Back up /data and secrets/encryption_key together. Never replace the encryption key for an existing database—stored provider credentials and notification settings cannot be recovered without the matching key.

Using DebridUp

  • Dashboard gives an at-a-glance health summary and the latest status and response time for every configured service.
  • Incidents lists current and recovered incidents.
  • Service history shows availability, status changes, and latency trends.
  • Settings manages providers, ntfy notifications, display time zone, and theme.
  • Export JSON downloads service statistics and incident timelines for the selected period. You can give the file to an AI to generate a written report.

The dashboard refreshes every 30 seconds while visible. Raw checks are retained for 90 days by default; incidents remain after their raw samples expire.

Unraid

An importable template is included at unraid/debridup.xml.

Follow the Unraid installation guide to create the encryption key and import the template. The default paths use /mnt/cache/appdata; if your appdata share uses another pool, change both template host paths to /mnt/<pool-name>/appdata/... before applying it.

The template uses the public multi-architecture image, stores the database in appdata, runs the application as Unraid's usual nobody:users account, and keeps the encryption key in a separate read-only mount.

Updating and backups

Update Docker Compose installations with:

docker compose pull
docker compose up -d

On Unraid, use Docker → Check for Updates. Before updating, keep a consistent backup of the SQLite data and its matching encryption key.

For a live database, use SQLite's online backup mechanism instead of copying only debridup.db; SQLite runs in WAL mode.

Configuration

Variable Purpose Default
DEBRIDUP_ADMIN_PASSWORD Initializes the single administrator account on first startup. Required
DEBRIDUP_ENCRYPTION_KEY_FILE Path to a base64-encoded 32-byte encryption key. Required in Docker
DEBRIDUP_DATA_DIR SQLite database and application-data directory. ./data (/data in Docker)
DEBRIDUP_ADDR HTTP listen address. :8080
DEBRIDUP_HISTORY_RETENTION Raw response-history retention as a Go duration. 2160h (90 days)
DEBRIDUP_MAX_CONCURRENT_CHECKS Maximum provider checks running at once, from 1 to 32. 4
PUID / PGID Runtime user and group IDs for bind-mounted data. Image user; Unraid uses 99 / 100

GET /healthz checks process health. GET /readyz also confirms that the database is ready.

AIOStreams health checks

GET /integrations/health/{provider} exposes a small, read-only health response without a login. For example:

curl -i http://debridup:8080/integrations/health/torbox

A healthy response is HTTP 200 with {"ok":true,"state":"healthy"}. HTTP 503 returns unhealthy, unknown, paused, or unavailable; unknown covers local connectivity uncertainty and checks that are stale or predate a restart. Consumers that only inspect the HTTP status still fail closed during uncertainty. HTTP 404 means an unknown or unconfigured provider. Provider slugs are torbox, premiumize, alldebrid, realdebrid, torrin, pikpak, offcloud, debridlink, easydebrid, debrider, and deepbrid.

The endpoint uses confirmed authenticated monitor state, respecting failure and recovery thresholds. A slow successful check remains healthy. Never-checked monitors and results older than two monitor intervals plus one check timeout count as unknown. If several enabled monitors use the same provider, all must pass; disabled monitors are ignored unless all are disabled, which returns 503. Polling reads existing state and never triggers extra provider requests or changes the database. It returns no account names, credentials, error details, or history.

For self-hosted AIOStreams:

  1. Make DebridUp reachable from the AIOStreams container, for example by attaching both containers to the same Docker network. debridup:8080 assumes that service name and DebridUp's default internal port; otherwise use its reachable LAN address and port.
  2. In AIOStreams Settings → User Limits → Health Checks, enable Allow Private URLs (HEALTH_CHECK_ALLOW_PRIVATE_URLS=true) for your trusted private instance.
  3. In your configuration's Miscellaneous → Health Checks, add ID torbox-up, URL http://debridup:8080/integrations/health/torbox, method GET, expected status 200, interval 60 seconds, timeout 3000 ms, and failure behavior down. Leave JSON path and body matching empty.
  4. Test the check and save the configuration. Use health('torbox-up') as a group condition, or not health('torbox-up') as a fallback variant's activation condition. A check alone does not change stream selection.

AIOStreams caches results, so switching also depends on its refresh interval. See its health-check reference.

Tam-Taro's template can replace health checks when you import it or apply an update. Add or restore these checks after importing or updating the template. In AIOStreams, open Misc → Health Checks and edit a check with the pencil icon.

AIOStreams Misc settings with Health Checks selected and the TorBox edit button indicated

Example Tam-Taro health-check settings for TorBox

For each provider check you want to connect, click its pencil icon and change only these settings:

  1. Replace the URL with the DebridUp health URL, for example http://debridup:8080/integrations/health/torbox.
    • debridup is an example hostname. Use a name that resolves from the AIOStreams container, or your server's reachable IP address and port. The containers must be able to reach each other over the network.
    • Replace torbox at the end with the provider slug, such as torrin or realdebrid. See the supported provider list above.
  2. Clear JSON path and Expected value, leaving both fields empty.
  3. Optionally change Interval. The minimum is 60 seconds; I use 60 seconds for a self-hosted setup.

Leave the other settings as the template provides them, including the check ID, method, expected status, timeout, and failure behavior. When you test a healthy provider, the result should say Not healthy while showing HTTP 200 and a short response time. This is intentional: the template expects 503 so a check such as torbox-down becomes true when DebridUp reports TorBox as unhealthy. Save the check, then repeat for any other provider checks you want to connect.

This template-specific setup intentionally differs from the 200 expected status described above for ordinary AIOStreams health checks. Keep the endpoint private to your trusted network.

This route intentionally requires no session. Anyone who can reach it can read the provider's availability. Keep it on your private network, or restrict the route at your reverse proxy if DebridUp is publicly reachable. An external login proxy must not intercept the container-to-container request.

Security notes

  • Provider credentials and ntfy URLs are encrypted with XChaCha20-Poly1305.
  • Secrets are write-only and are never returned to the browser.
  • Sessions are stored server-side and expire after 24 hours.
  • The supplied container runs with a read-only root filesystem, a writable temporary directory, reduced Linux capabilities, and no-new-privileges.

To build locally instead of using the published image:

docker build -t debridup:local .

Homepage widgets

Use the opt-in Homepage integration for provider lists, status counters, and embedded latency or availability graphs. It uses a separate read-only credential and the existing dashboard history.

About

Private, self-hosted uptime monitoring and incident history for debrid providers.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages