AHDX: Apple Health exporter with SQLite + Grafana dashboard (MIT)

This commit is contained in:
Steffen Skui
2026-07-21 21:23:34 +02:00
commit 850c13777c
34 changed files with 5108 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
services:
ahdx:
build: .
container_name: ahdx
ports:
# Host port is configurable; set AHDX_PORT to move it. Default 8088.
- "${AHDX_PORT:-8088}:8080"
volumes:
# Your data stays in ./data on the host. Delete the container any time;
# the databases and inbox are untouched.
- ./data:/data
environment:
# How often the inbox folder is checked, in seconds. Set to 0 to turn the
# watcher off and only import by hand.
- AHDX_SCAN_INTERVAL=1800
# Password-protect the web UI. On first run AHDX has no password in its DB,
# so it takes you to a setup screen to create one (stored salted). That
# same password is then pushed to Grafana, so one login covers both.
- AHDX_AUTH=true
# Optional shared key for the read API at /api (used by Grafana, scripts).
# Leave blank to keep the API open on your LAN; set a value to require it
# as the X-Api-Key header.
- AHDX_API_KEY=
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')"]
interval: 10s
timeout: 5s
retries: 6
restart: unless-stopped
grafana:
image: grafana/grafana-oss:latest
container_name: ahdx-grafana
ports:
- "${GRAFANA_PORT:-3000}:3000"
environment:
# The Infinity datasource reads AHDX's JSON API. Installed on first boot.
- GF_INSTALL_PLUGINS=yesoreyeram-infinity-datasource
- GF_SECURITY_ADMIN_USER=admin
# Grafana keeps its default admin/admin at first boot; AHDX changes it to
# the password you set on the AHDX setup screen. Don't pin it here or AHDX
# can't bootstrap it.
volumes:
- ./grafana-data:/var/lib/grafana
# Auto-adds the "AHDX" datasource + the Apple Health dashboard.
- ./grafana/provisioning:/etc/grafana/provisioning
- ./grafana/dashboards:/etc/dashboards
depends_on:
ahdx:
condition: service_healthy # Grafana waits until AHDX is up
restart: unless-stopped