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