Skip to main content

Configuration Reference

Complete reference for environment variables and configuration files used to deploy Boards.

Environment Variables

Database

VariableRequiredDescriptionExample
BOARDS_DATABASE_URLYesPostgreSQL connection URLpostgresql://user:pass@host:5432/boards

Connection URL supports these query parameters:

  • sslmode=require - Enable SSL (recommended for managed databases)
  • connect_timeout=10 - Connection timeout in seconds

Redis

VariableRequiredDescriptionExample
BOARDS_REDIS_URLYesRedis connection URLredis://host:6379/0

For TLS-enabled Redis (ElastiCache, Upstash), use rediss:// protocol:

rediss://user:password@host:6379/0

Authentication

VariableRequiredDescriptionExample
BOARDS_AUTH_PROVIDERNoAuth provider to usenone, jwt, supabase, clerk, auth0, oidc

Provider-specific variables:

JWT

VariableRequiredDescription
BOARDS_JWT_SECRETYes (if JWT)Secret key for JWT signing
BOARDS_JWT_ALGORITHMNoAlgorithm (default: HS256)
BOARDS_JWT_ISSUERNoExpected token issuer

Supabase

VariableRequiredDescription
SUPABASE_URLYesSupabase project URL
SUPABASE_SERVICE_ROLE_KEYYesService role key (backend only)
SUPABASE_ANON_KEYNoAnonymous key (for frontend)

Clerk

VariableRequiredDescription
CLERK_SECRET_KEYYesClerk secret key
CLERK_PUBLISHABLE_KEYNoPublishable key (for frontend)

Auth0

VariableRequiredDescription
AUTH0_DOMAINYesAuth0 domain
AUTH0_CLIENT_IDYesClient ID
AUTH0_CLIENT_SECRETYesClient secret
AUTH0_AUDIENCENoAPI audience

OIDC (Generic)

VariableRequiredDescription
BOARDS_OIDC_ISSUERYesOIDC issuer URL
BOARDS_OIDC_CLIENT_IDYesClient ID
BOARDS_OIDC_CLIENT_SECRETNoClient secret

See Authentication for detailed setup guides.

Generators

VariableRequiredDescriptionExample
BOARDS_GENERATORS_CONFIG_PATHNoPath to generators.yaml/app/config/generators.yaml
BOARDS_GENERATOR_API_KEYSYesJSON object with API keys{"fal": "key", "openai": "key"}

Storage

VariableRequiredDescriptionExample
BOARDS_STORAGE_CONFIG_PATHNoPath to storage_config.yaml/app/config/storage_config.yaml
BOARDS_STORAGE_PROVIDERNoOverride default providers3, gcs, supabase, local

Provider-specific variables:

S3 / S3-Compatible

VariableRequiredDescription
AWS_ACCESS_KEY_IDYesAWS access key
AWS_SECRET_ACCESS_KEYYesAWS secret key
AWS_REGIONNoAWS region (can also be in config)

Google Cloud Storage

VariableRequiredDescription
GOOGLE_APPLICATION_CREDENTIALSYesPath to service account JSON

Supabase Storage

VariableRequiredDescription
SUPABASE_URLYesSupabase project URL
SUPABASE_SERVICE_ROLE_KEYYesService role key

See Storage Configuration for detailed setup.

Logging

VariableRequiredDefaultDescription
BOARDS_LOG_LEVELNoinfoLog level: debug, info, warning, error
BOARDS_LOG_FORMATNoconsoleOutput format: console, json

Use json format in production for structured logging.

Worker

VariableRequiredDescriptionExample
BOARDS_INTERNAL_API_URLNoInternal API URL for workerhttp://api:8800

Worker command-line options:

boards-worker --log-level info --processes 1 --threads 1

Multi-tenancy

VariableRequiredDescription
BOARDS_MULTI_TENANTNoEnable multi-tenancy (true/false)
BOARDS_DEFAULT_TENANT_IDNoDefault tenant ID for single-tenant mode

Security

VariableRequiredDescription
BOARDS_SECRET_KEYRecommendedApplication secret key
BOARDS_ALLOWED_ORIGINSRecommendedCORS allowed origins (comma-separated)

Configuration Files

generators.yaml

Defines which AI generators are available:

generators:
# Fal.ai generators
- class: boards.generators.fal.flux.FluxProGenerator
enabled: true
- class: boards.generators.fal.flux.FluxDevGenerator
enabled: true

# OpenAI generators
- class: boards.generators.openai.dalle.DallE3Generator
enabled: true

# Replicate generators
- class: boards.generators.replicate.flux.FluxProReplicateGenerator
enabled: false

# Custom generators (from extensions volume)
- class: my_generators.custom.MyCustomGenerator
enabled: true

The class path is a Python import path. Custom generators should be placed in the /app/extensions volume.

storage_config.yaml

Defines storage providers and routing rules:

# Default provider for all storage operations
default_provider: s3

# Available storage providers
providers:
# Local filesystem (development)
local:
type: local
base_path: /app/data/storage
public_url_base: http://localhost:8800/storage

# Amazon S3
s3:
type: s3
bucket: my-boards-bucket
region: us-east-1
# Optional: custom endpoint for S3-compatible services
# endpoint_url: https://s3.example.com

# Google Cloud Storage
gcs:
type: gcs
bucket: my-boards-bucket
project: my-gcp-project

# Supabase Storage
supabase:
type: supabase
bucket: boards-storage

# Optional: Route different artifact types to different providers
routing:
# Large files to S3, small files to local cache
rules:
- match:
max_size: 1048576 # 1MB
provider: local
- match:
artifact_type: video
provider: s3

# File size limits
max_file_size: 104857600 # 100MB

# Allowed content types
allowed_content_types:
- image/jpeg
- image/png
- image/webp
- image/gif
- video/mp4
- video/webm
- audio/mpeg
- audio/wav
- application/json

Environment Variable Precedence

Configuration is loaded in this order (later values override earlier):

  1. Default values in code
  2. Configuration files (YAML)
  3. Environment variables

Environment variables always take precedence over config files.

Secrets Management

Development

For local development, use .env files:

# .env
BOARDS_DATABASE_URL=postgresql://boards:password@localhost:5432/boards
BOARDS_REDIS_URL=redis://localhost:6379/0
BOARDS_GENERATOR_API_KEYS={"fal": "your-key"}

Production

For production deployments, use your platform's secrets management:

PlatformRecommended Solution
Docker ComposeDocker secrets or external secret management
KubernetesKubernetes Secrets + External Secrets Operator
AWSSecrets Manager or Parameter Store
GCPSecret Manager
AzureKey Vault

Example with Kubernetes External Secrets:

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: boards-secrets
namespace: boards
spec:
refreshInterval: 1h
secretStoreRef:
name: aws-secrets-manager
kind: ClusterSecretStore
target:
name: boards-secrets
data:
- secretKey: database-url
remoteRef:
key: boards/production/database-url
- secretKey: generator-api-keys
remoteRef:
key: boards/production/generator-api-keys

Validation

Test your configuration before deploying:

# Docker Compose
docker compose config

# Kubernetes
kubectl apply --dry-run=client -f boards-k8s.yaml

# Check API health after deployment
curl http://localhost:8800/health

Next Steps