Skip to content

Configuration

Every Pulse service is configured through environment variables prefixed PULSE_ (Pydantic BaseSettings, env_prefix="PULSE_"). A variable named database_url in code is set as PULSE_DATABASE_URL. Values may also be supplied via a .env file; unknown keys are ignored.

The defaults below target the local Docker Compose stack. Secrets must be overridden in production — they are marked .

API (apps/api)

Variable Type Default Description
PULSE_ENV dev | staging | prod dev Deployment environment.
PULSE_LOG_LEVEL DEBUG | INFO | WARNING | ERROR INFO Log verbosity.
PULSE_API_HOST str 0.0.0.0 Bind address.
PULSE_API_PORT int 8000 Bind port.
PULSE_DATABASE_URL str postgresql+asyncpg://pulse_app:…@postgres:5432/azothedge_pulse Runtime connection — the non-superuser pulse_app role, so RLS is enforced.
PULSE_ADMIN_DATABASE_URL str postgresql+asyncpg://pulse:…@postgres:5432/azothedge_pulse Migrations/seeds — the superuser pulse role (DDL only).
PULSE_KAFKA_BROKERS str redpanda:9092 Kafka/Redpanda bootstrap brokers.
PULSE_S3_ENDPOINT str http://minio:9000 Object-storage endpoint.
PULSE_S3_ACCESS_KEY str pulse Object-storage access key.
PULSE_S3_SECRET_KEY str pulsepulse Object-storage secret key.
PULSE_S3_BUCKET str pulse Bucket for the Iceberg warehouse.
PULSE_S3_REGION str us-east-1 Region (MinIO ignores it, pyiceberg requires it).
PULSE_OTLP_ENDPOINT str http://tempo:4317 OTLP gRPC trace endpoint.
PULSE_ICEBERG_CATALOG_URI str postgresql+psycopg2://pulse:…@postgres:5432/azothedge_pulse Iceberg SqlCatalog connection (sync psycopg2).
PULSE_ICEBERG_CATALOG_SCHEMA str iceberg_catalog Postgres schema that holds catalog tables.
PULSE_ICEBERG_WAREHOUSE_URI str s3://pulse/iceberg/ Iceberg warehouse root.
PULSE_KAFKA_PRODUCER_ACKS str all Producer durability.
PULSE_KAFKA_IDEMPOTENT bool true Idempotent producer.
PULSE_INGESTION_MAX_PAYLOAD_KB int 256 Max accepted collect payload size.
PULSE_SERVICE_NAME str azothedge-pulse-api Service name in telemetry.
PULSE_GIT_SHA str unknown Build SHA surfaced at /version.
PULSE_TENANT_HEADER_NAME str X-Tenant-ID Header carrying the tenant id.
PULSE_AUTH_BEARER_PREFIX str pulse_live_ Expected API-key bearer prefix.
PULSE_API_KEY_HASH_PEPPER str dev-pepper-change-me Pepper for API-key hashing — must be overridden.

Worker (apps/worker)

The worker reuses the same PULSE_* prefix and shares the DB, catalog, and S3 settings with the API (it connects as the same RLS-subject pulse_app role).

Variable Type Default Description
PULSE_ENV str dev Deployment environment.
PULSE_LOG_LEVEL str INFO Log verbosity.
PULSE_KAFKA_BROKERS str redpanda:9092 Kafka/Redpanda bootstrap brokers.
PULSE_CONSUMER_GROUP str pulse-ingest-workers Consumer group id.
PULSE_TOPIC_PATTERN regex ^pulse\..+\.events\.raw$ Subscription pattern (one worker ingests every tenant's raw topic).
PULSE_DATABASE_URL str postgresql+asyncpg://pulse_app:…@postgres:5432/azothedge_pulse Runtime connection (RLS-subject pulse_app).
PULSE_ICEBERG_CATALOG_URI str postgresql+psycopg2://pulse:…@postgres:5432/azothedge_pulse Iceberg catalog (sync psycopg2).
PULSE_ICEBERG_CATALOG_SCHEMA str iceberg_catalog Catalog schema.
PULSE_ICEBERG_WAREHOUSE_URI str s3://pulse/iceberg/ Warehouse root.
PULSE_S3_ENDPOINT str http://minio:9000 Object-storage endpoint.
PULSE_S3_ACCESS_KEY str pulse Object-storage access key.
PULSE_S3_SECRET_KEY str pulsepulse Object-storage secret key.
PULSE_S3_REGION str us-east-1 Region.
PULSE_BATCH_INTERVAL_SECONDS float 30.0 Flush a (tenant, dataset) batch this many seconds after its first record.
PULSE_BATCH_MAX_RECORDS int 10000 Flush a batch at this row count.
PULSE_OTLP_ENDPOINT str http://tempo:4317 OTLP gRPC trace endpoint.
PULSE_PROMETHEUS_PORT int 9100 Worker Prometheus exposition port.
PULSE_HEALTH_PORT int 9101 Worker /healthz port.

Production secrets

Change PULSE_API_KEY_HASH_PEPPER, the S3 credentials, and both database URLs before any non-local deployment. Never connect the application as a PostgreSQL superuser — see Multi-Tenancy and RLS.