Files
ansible-playbooks/roles/uptime_kuma
Clément Désiles a8545fc501 fix(podman): use Type=notify + service-container so systemd sees pod crashes
The previous Type=oneshot + RemainAfterExit=true pattern made systemd
freeze pod units in 'active (exited)' as soon as 'podman play kube'
returned, so crash-looping containers were invisible to
'systemctl --user --failed' and Restart=on-failure never fired.

For every podman-pod role (immich, fdroid, ntfy, gitea, qfieldcloud,
unifi, matrix, uptime_kuma):

- switch units to Type=notify + NotifyAccess=all
- run 'podman kube play --service-container=true' so the unit's main
  PID stays alive as long as the pod
- use 'podman kube down' for ExecStop
- add TimeoutStartSec=180 to cover slow first-boot image pulls

Pod manifests: flip every container's restartPolicy from Always to
Never. systemd is now the single owner of the restart loop: container
exits -> pod dies -> service container dies -> unit fails ->
Restart=on-failure restarts everything cleanly. With Always, podman
retried internally and hid the failure from systemd.

CLAUDE.md updated to document the new canonical template and the
'restartPolicy: Never' requirement.
2026-05-29 21:49:13 +02:00
..

uptime-kuma - Self-Hosted Monitoring Tool

Deploys Uptime Kuma - a self-hosted monitoring and status page application.

Features

  • Website monitoring (HTTP/HTTPS)
  • TCP port monitoring
  • Ping monitoring
  • DNS monitoring
  • Status pages
  • Notifications (Email, Discord, Slack, ntfy, etc.)
  • Multi-language support
  • Dark mode

Configuration

Optional Variables

See defaults/main.yml for all configuration options.

Key settings:

uptime_kuma_version: "2"
uptime_kuma_port: 3001
uptime_kuma_data_dir: "{{ podman_projects_dir }}/uptime-kuma/data"

# Nginx reverse proxy
uptime_kuma_nginx_enabled: false
uptime_kuma_nginx_hostname: uptime.nas.local

Storage Requirements

CRITICAL: Uptime Kuma uses SQLite and requires local storage with POSIX file lock support.

  • Supported: Local filesystem, Docker volumes
  • NOT Supported: NFS, network filesystems (will cause database corruption)

First-Time Setup

  1. Access the web UI: https://uptime.nas.local (if nginx enabled) or http://localhost:3001
  2. Create admin account on first visit
  3. No default credentials - account is created during initial setup

Usage

Adding Monitors

Web UI → Add New Monitor:

  • Monitor Type: HTTP(s), TCP Port, Ping, DNS, etc.
  • Friendly Name: Display name
  • URL/Host: Target to monitor
  • Heartbeat Interval: Check frequency (seconds)
  • Retries: Before marking as down
  • Notifications: Select notification endpoints

Notification Endpoints

Web UI → Settings → Notifications:

  • Email (SMTP)
  • Discord, Slack, Telegram
  • ntfy (recommended for local notifications)
  • Webhooks
  • 50+ integrations available

Status Pages

Create public or password-protected status pages showing monitor health.

Web UI → Status Pages → New Status Page

Integration with ntfy

If you deployed the ntfy role:

  1. Settings → Notifications → Add
  2. Type: ntfy
  3. ntfy Server URL: https://ntfy.jokester.fr
  4. Topic: uptime-alerts
  5. Username: admin
  6. Password: Your ntfy admin password
  7. Test notification

File Locations

  • Data directory: {{ uptime_kuma_data_dir }}
  • SQLite database: {{ uptime_kuma_data_dir }}/kuma.db

Dependencies

  • podman
  • nginx (if uptime_kuma_nginx_enabled: true)

Sources