# Copy to .env for local docker compose use. # DO NOT commit .env. # ── Common ─────────────────────────────────────────────────────────────── # Compose project + container prefix. MUST be lowercase (Docker Compose v2 requirement). # For a customer ID like ABC0001, set the project name to its lowercase form: abc0001. # Containers then come out as abc0001_portal / abc0001_grafana / abc0001_timescale. COMPOSE_PROJECT_NAME=portal-dev # ── Production-only ────────────────────────────────────────────────────── # Public hostname Traefik routes to this customer's portal. # Required by docker-compose.prod.yml. Ignored by the dev compose. CUSTOMER_HOST=abc0001.portal.example.com # ── Database ───────────────────────────────────────────────────────────── POSTGRES_DB=power_monitoring POSTGRES_USER=power_user POSTGRES_PASSWORD=change_me_for_local_only # ── Portal authentication ─────────────────────────────────────────────── # In Production, DefaultAdminPassword MUST be changed or the app refuses to start. Authentication__DefaultAdminEmail=admin@example.com Authentication__DefaultAdminPassword=ChangeMe123! # ── Grafana ────────────────────────────────────────────────────────────── GRAFANA_ADMIN_PASSWORD=admin # Path prefix Grafana is mounted at behind Traefik. Same-origin embed in the SPA. Grafana__EmbedPathPrefix=/grafana # ── RunMode (Client | Admin) ───────────────────────────────────────────── # Client (default) = per-customer stack. Admin = fleet aggregator. # Application__RunMode=Client # ── Fleet ingest (Client mode → push to Admin) ─────────────────────────── # When Enabled=true, URL and Token are REQUIRED (RunModeGuards refuse otherwise). # Get the token from the Admin Customers page; it is shown once at creation/rotation. # FleetIngest__Enabled=false # FleetIngest__Url=https://admin.portal.example.com/api/fleet/ingest # FleetIngest__Token= # FleetIngest__IntervalSeconds=60 # FleetIngest__BatchSize=5000 # FleetIngest__BatchMaxBytes=1048576