services: bambulab-metrics-exporter: build: context: . dockerfile: Dockerfile container_name: bambulab-metrics-exporter restart: unless-stopped env_file: - .env ports: - "9109:9109" environment: # Encrypts settings and cloud login saved on the /auth page. Generate once: # openssl rand -hex 32, then connect the printer at http://:9109/auth BAMBULAB_SECRET_KEY: ${BAMBULAB_SECRET_KEY} # Optional: configure with env vars instead of the /auth page (page settings win) # BAMBULAB_TRANSPORT: ${BAMBULAB_TRANSPORT:-local_mqtt} # local_mqtt or cloud_mqtt # BAMBULAB_SERIAL: ${BAMBULAB_SERIAL:-} # printer serial # BAMBULAB_HOST: ${BAMBULAB_HOST:-} # local printer IP/hostname # BAMBULAB_ACCESS_CODE: ${BAMBULAB_ACCESS_CODE:-} # local LAN access code # BAMBULAB_PORT: ${BAMBULAB_PORT:-8883} # local MQTT port # BAMBULAB_USERNAME: ${BAMBULAB_USERNAME:-bblp} # local MQTT username # BAMBULAB_CLOUD_EMAIL: ${BAMBULAB_CLOUD_EMAIL:-} # cloud account email (env OTP flow) # BAMBULAB_CLOUD_CODE: ${BAMBULAB_CLOUD_CODE:-} # one-time email code (env OTP flow) # BAMBULAB_CLOUD_USER_ID: ${BAMBULAB_CLOUD_USER_ID:-} # manual cloud tokens only # BAMBULAB_CLOUD_ACCESS_TOKEN: ${BAMBULAB_CLOUD_ACCESS_TOKEN:-} # manual cloud tokens only # BAMBULAB_CLOUD_REFRESH_TOKEN: ${BAMBULAB_CLOUD_REFRESH_TOKEN:-} # manual cloud tokens only # BAMBULAB_CLOUD_MQTT_HOST: ${BAMBULAB_CLOUD_MQTT_HOST:-us.mqtt.bambulab.com} # cloud broker host # BAMBULAB_CLOUD_MQTT_PORT: ${BAMBULAB_CLOUD_MQTT_PORT:-8883} # cloud broker port # Other optional settings # PRINTER_NAME_LABEL: ${PRINTER_NAME_LABEL:-} # printer_name label override # BAMBULAB_REQUEST_PUSHALL: ${BAMBULAB_REQUEST_PUSHALL:-true} # request full snapshot each poll # POLLING_INTERVAL_SECONDS: ${POLLING_INTERVAL_SECONDS:-10} # poll interval # REQUEST_TIMEOUT_SECONDS: ${REQUEST_TIMEOUT_SECONDS:-8} # request timeout # AUTH_ALLOWED_HOSTS: ${AUTH_ALLOWED_HOSTS:-} # extra host names for /auth (reverse proxy) # LOG_LEVEL: ${LOG_LEVEL:-INFO} # log verbosity # LISTEN_HOST: ${LISTEN_HOST:-0.0.0.0} # HTTP bind host # LISTEN_PORT: ${LISTEN_PORT:-9109} # HTTP port # PUID: ${PUID:-99} # runtime user id # PGID: ${PGID:-100} # runtime group id # UMASK: ${UMASK:-002} # file mode mask # BAMBULAB_CONFIG_DIR: ${BAMBULAB_CONFIG_DIR:-/config/bambulab-metrics-exporter} # config path in container # BAMBULAB_CREDENTIALS_FILE: ${BAMBULAB_CREDENTIALS_FILE:-credentials.enc.json} # encrypted credentials file name volumes: - ./config:/config/bambulab-metrics-exporter - ./.env:/app/.env healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:9109/health', timeout=2)"] interval: 30s timeout: 5s retries: 3 start_period: 20s