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.