# ============================================================ # beacon stack, environment # Loaded into every service that sets `env_file: .env` in # docker-compose.yml (app, caddy, web). Each var below is only # *consumed* by the service(s) noted. # Contains secrets, keep out of git (.env is gitignored). # ============================================================ # ---- Backend API server (service: app) ---------------------- # Address the Go server listens on inside its container. LISTEN_ADDR=:8080 # Admin bearer key for /api/v1/admin/*. When set (even empty) it overrides # auth.api_key; with no key at all, admin routes return 503. Public reads are unaffected. # At least 16 characters, no whitespace; e.g. `openssl rand -hex 32`. # BEACON_API_KEY= # MeshMapper regional or grouped-region API key for enabled imports. # Your local MeshMapper regional or grouped-region admin can generate the key; # grouped-region keys cover multiple regions. Never use the mobile App key. # Overrides meshmapper.api_key, even when empty. Keep this out of VITE_* settings. # Use the environment setting with backups; saved YAML keys prevent exports. # MESHMAPPER_API_KEY= # Override log.level / log.format from config.yaml (defaults: info / text). # LOG_LEVEL=info # LOG_FORMAT=json # Postgres DSN. Host "db" is the compose service name; the password # must match POSTGRES_PASSWORD in docker-compose.yml. POSTGRES_DSN=postgres://beacon:CHANGE_DB_PASS@db:5432/beacon?sslmode=disable # Redis cache. Host "redis" is the compose service name. If unset, the # server runs with caching disabled and every read hits Postgres. REDIS_ADDR=redis:6379 # ---- MQTT ingest brokers (service: app) --------------------- # Live packet sources. Put your real passwords back here. MQTT_BROKER_1_URL=wss://mqtt1.meshcore.ca:443 MQTT_BROKER_1_USERNAME=CHANGE_NAME MQTT_BROKER_1_PASSWORD=CHANGE_PASS # Optional second broker. Leave MQTT_BROKER_2_URL empty to run with one broker. MQTT_BROKER_2_URL=wss://mqtt2.meshcore.ca:443 MQTT_BROKER_2_USERNAME=CHANGE_NAME MQTT_BROKER_2_PASSWORD=CHANGE_PASS # ---- Public domain / TLS (service: caddy) ------------------- # Site address + automatic Let's Encrypt certificate. DOMAIN=beacon.example.com # Type 2 server host only: the web frontend's hostname. Caddy redirects everything that is # not /api/* or /ws there. Not used by the all-in-one stack. # WEB_DOMAIN=beacon.example.com # ---- Frontend URLs (service: web) --------------------------- # Written to /config.js each time the web container starts. # MUST be the public domain (never localhost) and match DOMAIN above, # the browser makes these calls, not the container. # After changing these, restart the web container so they are re-read: # docker compose up -d web # (then hard-refresh the page) VITE_API_BASE=https://beacon.example.com/api/v1 VITE_WS_URL=wss://beacon.example.com/ws # Default "All" map view (decimal "lat,lon" + zoom). Unset = world view. VITE_MAP_CENTER=52.5,-96.8 VITE_MAP_ZOOM=3.2 # Optional web settings. Unset = default. # Hide tabs (comma list): Packets,Channels,Map,Nodes,Observers,Routes,Traces,Analytics # VITE_DISABLED_TABS=Map,Traces # Only offer these themes (comma list of ids); the only way to enable meshmapper_dark/meshmapper_light. # VITE_ENABLED_THEMES=meshmapper_dark,meshmapper_light # Top-left wordmark (default BEACON). # VITE_APP_NAME=BEACON # Skip the once-per-session load splash. # VITE_SKIP_SPLASH=true # Notice above the header; [label](url) and bare URLs become links. # VITE_BANNER=Test instance, data may be reset. Main site: [beacon.example.com](https://beacon.example.com)