Skip to content

Configuration Reference

Complete reference for configuring Fluxbase via configuration file or environment variables.

Create fluxbase.yaml in your working directory:

# General Configuration
base_url: http://localhost:8080 # Internal base URL (server-to-server)
public_base_url: https://api.example.com # Public base URL (user-facing links, OAuth callbacks)
debug: false
# Server Configuration
server:
address: ":8080" # Listen address (host:port)
read_timeout: 300s # 5 min for large file streaming
write_timeout: 300s # 5 min for large file streaming
idle_timeout: 120s # 2 min idle timeout
body_limit: 2147483648 # 2GB global body limit
allowed_ip_ranges: [] # Global IP allowlist (empty = allow all)
# Per-endpoint body limits (granular control)
body_limits:
enabled: true
default_limit: 1048576 # 1MB default
rest_limit: 1048576 # 1MB for REST CRUD
auth_limit: 65536 # 64KB for auth endpoints
storage_limit: 524288000 # 500MB for file uploads
bulk_limit: 10485760 # 10MB for bulk/RPC operations
admin_limit: 5242880 # 5MB for admin endpoints
max_json_depth: 64 # Max JSON nesting depth
# Database Configuration
database:
host: localhost
port: 5432
user: postgres # Runtime database user
admin_user: "" # Admin user for migrations (defaults to user)
password: postgres
admin_password: "" # Admin user password (defaults to password)
database: fluxbase
ssl_mode: disable # disable, allow, prefer, require, verify-ca, verify-full
max_connections: 50 # Connection pool max size
min_connections: 10 # Connection pool min size
max_conn_lifetime: 1h
max_conn_idle_time: 30m
health_check_period: 1m
user_migrations_path: /migrations/user # Path to user-provided migrations
# Authentication Configuration
auth:
jwt_secret: your-secret-key-change-in-production
jwt_expiry: 15m
refresh_expiry: 168h # 7 days
service_role_ttl: 24h # Service role token TTL
anon_ttl: 24h # Anonymous token TTL
magic_link_expiry: 15m
password_reset_expiry: 1h
password_min_length: 12
bcrypt_cost: 10
signup_enabled: true
magic_link_enabled: true
totp_issuer: Fluxbase # 2FA issuer name shown in authenticator apps
allow_user_client_keys: true # Allow users to create their own API client keys
# OAuth/OIDC Providers
oauth_providers:
- name: google
enabled: true
client_id: ${GOOGLE_CLIENT_ID}
client_secret: ${GOOGLE_CLIENT_SECRET}
allow_dashboard_login: false
allow_app_login: true
- name: custom-oidc
enabled: true
client_id: ${OIDC_CLIENT_ID}
issuer_url: https://auth.example.com # Auto-discovers .well-known/openid-configuration
scopes: ["openid", "email", "profile"]
required_claims:
roles: ["admin"] # Require specific claim values
# SAML SSO Providers (Enterprise)
saml_providers:
- name: okta
enabled: true
idp_metadata_url: https://your-org.okta.com/app/.../sso/saml/metadata
entity_id: urn:fluxbase:sp
acs_url: https://api.example.com/auth/saml/okta/callback
auto_create_users: true
default_role: authenticated
allow_idp_initiated: false # Security: disable IdP-initiated SSO
group_attribute: groups
required_groups: ["fluxbase-users"]
# Storage Configuration
storage:
enabled: true
provider: local # local or s3
local_path: ./storage
max_upload_size: 2147483648 # 2GB
s3_endpoint: ""
s3_access_key: ""
s3_secret_key: ""
s3_bucket: ""
s3_region: ""
s3_force_path_style: true # Required for MinIO, R2, Spaces, etc.
default_buckets: ["uploads", "temp-files", "public"]
# Image Transformation Settings
transforms:
enabled: true
default_quality: 80
max_width: 4096
max_height: 4096
allowed_formats: ["webp", "jpg", "png", "avif"]
max_total_pixels: 16000000 # 16 megapixels max
bucket_size: 50 # Round dimensions to 50px (cache efficiency)
rate_limit: 60 # Transforms per minute per user
timeout: 30s
max_concurrent: 4
cache_enabled: true
cache_ttl: 24h
cache_max_size: 1073741824 # 1GB cache
# Realtime Configuration
realtime:
enabled: true
max_connections: 1000
max_connections_per_user: 10
max_connections_per_ip: 20
ping_interval: 30s
pong_timeout: 60s
read_buffer_size: 1024
write_buffer_size: 1024
message_size_limit: 524288 # 512KB
channel_buffer_size: 100
rls_cache_size: 100000
rls_cache_ttl: 30s
listener_pool_size: 2 # LISTEN connections for redundancy
notification_workers: 4
notification_queue_size: 1000
client_message_queue_size: 256
slow_client_threshold: 100
slow_client_timeout: 30s
# Admin UI
admin:
enabled: false # Enable React admin dashboard
# Logging
logging:
console_enabled: true
console_level: info # trace, debug, info, warn, error
console_format: console # json or console
backend: postgres # postgres, s3, local
s3_bucket: ""
s3_prefix: logs
local_path: ./logs
batch_size: 100
flush_interval: 1s
buffer_size: 10000
pubsub_enabled: true # Enable PubSub for realtime log streaming
system_retention_days: 7
http_retention_days: 30
security_retention_days: 90
execution_retention_days: 30
ai_retention_days: 30
retention_enabled: true
retention_check_interval: 24h
custom_categories: []
custom_retention_days: 30
# CORS Configuration
cors:
allowed_origins: "http://localhost:5173,http://localhost:8080"
allowed_methods: "GET,POST,PUT,PATCH,DELETE,OPTIONS"
allowed_headers: "Origin,Content-Type,Accept,Authorization,X-Request-ID,X-CSRF-Token,Prefer,apikey"
exposed_headers: "Content-Range,Content-Encoding,Content-Length,X-Request-ID"
allow_credentials: true
max_age: 300
# Security Configuration
security:
setup_token: "" # Required for admin dashboard (openssl rand -base64 32)
enable_global_rate_limit: false
admin_setup_rate_limit: 5
admin_setup_rate_window: 15m
auth_login_rate_limit: 10
auth_login_rate_window: 1m
admin_login_rate_limit: 10
admin_login_rate_window: 1m
# CAPTCHA Configuration (bot protection)
captcha:
enabled: false
provider: hcaptcha # hcaptcha, recaptcha_v3, turnstile, cap
site_key: ""
secret_key: ""
score_threshold: 0.5 # For reCAPTCHA v3
endpoints: ["signup", "login", "password_reset", "magic_link"]
cap_server_url: "" # For self-hosted Cap provider
cap_api_key: ""
# Encryption (for sensitive data in database)
encryption_key: "" # 32 bytes for AES-256 (openssl rand -base64 32 | head -c 32)
# Migrations API
migrations:
enabled: true
allowed_ip_ranges:
["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16", "127.0.0.0/8"]
require_service_key: true # Always require service key authentication
# MCP (Model Context Protocol)
mcp:
enabled: true
base_path: /mcp
session_timeout: 30m
max_message_size: 10485760
rate_limit_per_min: 100
allowed_tools: [] # Empty = all tools enabled
allowed_resources: [] # Empty = all resources enabled
tools_dir: /app/mcp-tools
auto_load_on_boot: true
# MCP OAuth Configuration
oauth:
enabled: true # Enable OAuth 2.1 for MCP clients
dcr_enabled: true # Enable Dynamic Client Registration
token_expiry: 1h
refresh_token_expiry: 168h # 7 days
allowed_redirect_uris: [] # Empty = use defaults
# Branching (Database Branching)
branching:
enabled: false
max_branches_per_user: 5
max_total_branches: 50
default_data_clone_mode: schema_only # schema_only or full_clone
auto_delete_after: "0" # 0 = never, or duration like "24h"
database_prefix: branch_
admin_database_url: "" # Uses main database URL if empty
seeds_path: ./seeds

Environment variables take precedence over configuration file values.

VariableDescriptionDefaultExample
FLUXBASE_BASE_URLInternal base URL for server-to-server communicationhttp://localhost:8080http://fluxbase:8080
FLUXBASE_PUBLIC_BASE_URLPublic base URL for user-facing links, OAuth callbacks"" (uses BASE_URL)https://api.example.com
FLUXBASE_DEBUGEnable debug modefalsetrue, false
FLUXBASE_ENCRYPTION_KEYAES-256-GCM encryption key for sensitive data (32 bytes)""openssl rand -base64 32 | head -c 32
VariableDescriptionDefaultExample
FLUXBASE_SERVER_ADDRESSListen address (host:port):8080:8080, 0.0.0.0:8080
FLUXBASE_SERVER_READ_TIMEOUTRead timeout300s30s
FLUXBASE_SERVER_WRITE_TIMEOUTWrite timeout300s30s
FLUXBASE_SERVER_IDLE_TIMEOUTIdle timeout120s120s
FLUXBASE_SERVER_BODY_LIMITGlobal body size limit (bytes)2147483648 (2GB)1073741824 (1GB)
FLUXBASE_SERVER_ALLOWED_IP_RANGESGlobal IP allowlist (CIDR, comma-separated)"" (allow all)10.0.0.0/8,192.168.0.0/16

Per-Endpoint Body Limits:

VariableDescriptionDefaultExample
FLUXBASE_SERVER_BODY_LIMITS_ENABLEDEnable per-endpoint body limitstruetrue, false
FLUXBASE_SERVER_BODY_LIMITS_DEFAULT_LIMITDefault body limit1048576 (1MB)2097152 (2MB)
FLUXBASE_SERVER_BODY_LIMITS_REST_LIMITLimit for REST CRUD operations1048576 (1MB)2097152 (2MB)
FLUXBASE_SERVER_BODY_LIMITS_AUTH_LIMITLimit for auth endpoints65536 (64KB)131072 (128KB)
FLUXBASE_SERVER_BODY_LIMITS_STORAGE_LIMITLimit for file uploads524288000 (500MB)1073741824 (1GB)
FLUXBASE_SERVER_BODY_LIMITS_BULK_LIMITLimit for bulk operations and RPC10485760 (10MB)20971520 (20MB)
FLUXBASE_SERVER_BODY_LIMITS_ADMIN_LIMITLimit for admin endpoints5242880 (5MB)10485760 (10MB)
FLUXBASE_SERVER_BODY_LIMITS_MAX_JSON_DEPTHMaximum JSON nesting depth6432
VariableDescriptionDefaultExample
FLUXBASE_DATABASE_HOSTPostgreSQL hostlocalhostlocalhost
FLUXBASE_DATABASE_PORTPostgreSQL port54325432
FLUXBASE_DATABASE_USERRuntime database userpostgresfluxbase
FLUXBASE_DATABASE_PASSWORDRuntime user passwordpostgresyour-password
FLUXBASE_DATABASE_DATABASEDatabase namefluxbasefluxbase
FLUXBASE_DATABASE_SSL_MODESSL modedisablerequire
FLUXBASE_DATABASE_MAX_CONNECTIONSMax connection pool size25100
FLUXBASE_DATABASE_MIN_CONNECTIONSMin connections in pool55
FLUXBASE_DATABASE_MAX_CONN_LIFETIMEConnection max lifetime1h1h
FLUXBASE_DATABASE_MAX_CONN_IDLE_TIMEConnection max idle time30m30m
FLUXBASE_DATABASE_HEALTH_CHECK_PERIODHealth check interval1m1m
FLUXBASE_DATABASE_ADMIN_USERAdmin user for migrations (defaults to USER)""postgres
FLUXBASE_DATABASE_ADMIN_PASSWORDAdmin user password (defaults to PASSWORD)""admin-password
FLUXBASE_DATABASE_USER_MIGRATIONS_PATHPath to user-provided migrations/migrations/user/app/migrations

SSL Modes:

  • disable - No SSL (development only)
  • allow - Prefer SSL if available
  • prefer - Use SSL if available (default for many clients)
  • require - Require SSL connection
  • verify-ca - Require SSL and verify CA certificate
  • verify-full - Require SSL and verify CA + hostname
VariableDescriptionDefaultExample
FLUXBASE_AUTH_JWT_SECRETJWT signing key (min 32 chars)(required)openssl rand -base64 32
FLUXBASE_AUTH_JWT_EXPIRYAccess token expiration15m15m, 1h
FLUXBASE_AUTH_REFRESH_EXPIRYRefresh token expiration168h (7 days)168h, 720h
FLUXBASE_AUTH_SERVICE_ROLE_TTLService role token TTL24h24h, 48h
FLUXBASE_AUTH_ANON_TTLAnonymous token TTL24h24h, 48h
FLUXBASE_AUTH_MAGIC_LINK_EXPIRYMagic link expiration15m15m
FLUXBASE_AUTH_PASSWORD_RESET_EXPIRYPassword reset expiration1h1h
FLUXBASE_AUTH_PASSWORD_MIN_LENGTHMinimum password length128, 16
FLUXBASE_AUTH_BCRYPT_COSTBcrypt cost factor (4-31)1010, 12
FLUXBASE_AUTH_SIGNUP_ENABLEDEnable user registrationtruetrue, false
FLUXBASE_AUTH_MAGIC_LINK_ENABLEDEnable magic link authtruetrue, false
FLUXBASE_AUTH_TOTP_ISSUER2FA TOTP issuer nameFluxbaseMyApp
FLUXBASE_AUTH_ALLOW_USER_CLIENT_KEYSAllow users to create API client keystruetrue, false

OAuth/OIDC Providers:

OAuth providers are configured via YAML config file. For simple setups, use environment variables for well-known providers:

VariableDescriptionDefaultExample
FLUXBASE_AUTH_GOOGLE_CLIENT_IDGoogle OAuth client ID""Your Google client ID
FLUXBASE_AUTH_GOOGLE_CLIENT_SECRETGoogle OAuth client secret""Your Google client secret
FLUXBASE_AUTH_APPLE_CLIENT_IDApple Sign In client ID""Your Apple Services ID
FLUXBASE_AUTH_MICROSOFT_CLIENT_IDMicrosoft/Azure AD client ID""Your Microsoft client ID

For custom OIDC providers, use the YAML config file with oauth_providers array (see YAML example above).

SAML SSO Providers (Enterprise):

SAML providers are configured via YAML config file with saml_providers array:

auth:
saml_providers:
- name: okta # Provider identifier
enabled: true
idp_metadata_url: https://... # IdP metadata URL (recommended)
# OR idp_metadata_xml: "<EntityDescriptor>..." # Inline metadata XML
entity_id: urn:fluxbase:sp # Your SP entity ID
acs_url: https://api.example.com/auth/saml/okta/callback
auto_create_users: true # Create user if not exists
default_role: authenticated # Role for new users
allow_idp_initiated: false # Disable for security
allow_dashboard_login: false # Allow admin SSO
allow_app_login: true # Allow app user SSO
group_attribute: groups # SAML attribute for groups
required_groups: ["fluxbase-users"] # User must be in one of these
required_groups_all: [] # User must be in ALL of these
denied_groups: [] # Deny if in any of these
attribute_mapping: # Map SAML attributes to user fields
email: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"

Security Best Practices:

  • Use a strong, random JWT secret (min 32 characters): openssl rand -base64 32
  • Rotate JWT secrets periodically
  • Use short access token expiry (15-30 minutes)
  • Use longer refresh token expiry (7-30 days)
  • Disable allow_idp_initiated for SAML providers to prevent replay attacks
VariableDescriptionDefaultExample
FLUXBASE_STORAGE_ENABLEDEnable storagetruetrue, false
FLUXBASE_STORAGE_PROVIDERStorage backendlocallocal, s3
FLUXBASE_STORAGE_LOCAL_PATHLocal storage path./storage/var/lib/fluxbase/storage
FLUXBASE_STORAGE_MAX_UPLOAD_SIZEMax upload size (bytes)21474836482147483648 (2GB)
FLUXBASE_STORAGE_S3_ENDPOINTS3 endpoint-s3.amazonaws.com
FLUXBASE_STORAGE_S3_ACCESS_KEYS3 access key-AKIAIOSFODNN7EXAMPLE
FLUXBASE_STORAGE_S3_SECRET_KEYS3 secret key-wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
FLUXBASE_STORAGE_S3_REGIONS3 region-us-west-2
FLUXBASE_STORAGE_S3_BUCKETS3 bucket name-my-bucket
FLUXBASE_STORAGE_S3_FORCE_PATH_STYLEUse path-style S3 addressingtruetrue, false
FLUXBASE_STORAGE_DEFAULT_BUCKETSAuto-create these buckets["uploads", "temp-files", "public"]-

S3-Compatible Services:

  • AWS S3
  • MinIO (local development): http://localhost:9000
  • DigitalOcean Spaces: https://nyc3.digitaloceanspaces.com
  • Wasabi: https://s3.wasabisys.com
  • Backblaze B2: https://s3.us-west-002.backblazeb2.com

Image Transformations:

VariableDescriptionDefaultExample
FLUXBASE_STORAGE_TRANSFORMS_ENABLEDEnable on-the-fly image transformationstruetrue, false
FLUXBASE_STORAGE_TRANSFORMS_DEFAULT_QUALITYDefault output quality (1-100)8085
FLUXBASE_STORAGE_TRANSFORMS_MAX_WIDTHMaximum output width (pixels)40968192
FLUXBASE_STORAGE_TRANSFORMS_MAX_HEIGHTMaximum output height (pixels)40968192
FLUXBASE_STORAGE_TRANSFORMS_ALLOWED_FORMATSAllowed output formats["webp", "jpg", "png", "avif"]-
FLUXBASE_STORAGE_TRANSFORMS_MAX_TOTAL_PIXELSMax total pixels (width × height)16000000 (16MP)25000000
FLUXBASE_STORAGE_TRANSFORMS_BUCKET_SIZEDimension bucketing size (cache efficiency)50100
FLUXBASE_STORAGE_TRANSFORMS_RATE_LIMITTransforms per minute per user60120
FLUXBASE_STORAGE_TRANSFORMS_TIMEOUTMax transform duration30s60s
FLUXBASE_STORAGE_TRANSFORMS_MAX_CONCURRENTMax concurrent transforms48
FLUXBASE_STORAGE_TRANSFORMS_CACHE_ENABLEDEnable transform cachingtruetrue, false
FLUXBASE_STORAGE_TRANSFORMS_CACHE_TTLCache TTL24h48h
FLUXBASE_STORAGE_TRANSFORMS_CACHE_MAX_SIZEMax cache size (bytes)1073741824 (1GB)2147483648 (2GB)
VariableDescriptionDefaultExample
FLUXBASE_REALTIME_ENABLEDEnable realtimetruetrue, false
FLUXBASE_REALTIME_MAX_CONNECTIONSMax WebSocket connections10005000
FLUXBASE_REALTIME_MAX_CONNECTIONS_PER_USERMax connections per user1020
FLUXBASE_REALTIME_MAX_CONNECTIONS_PER_IPMax connections per IP2050
FLUXBASE_REALTIME_PING_INTERVALPing interval30s30s
FLUXBASE_REALTIME_PONG_TIMEOUTPong timeout60s60s
FLUXBASE_REALTIME_READ_BUFFER_SIZEWebSocket read buffer10242048
FLUXBASE_REALTIME_WRITE_BUFFER_SIZEWebSocket write buffer10242048
FLUXBASE_REALTIME_MESSAGE_SIZE_LIMITMax message size (bytes)524288 (512KB)1048576
FLUXBASE_REALTIME_CHANNEL_BUFFER_SIZEChannel buffer size100200
FLUXBASE_REALTIME_RLS_CACHE_SIZERLS permission cache entries100000200000
FLUXBASE_REALTIME_RLS_CACHE_TTLRLS cache TTL30s60s

Advanced Realtime Settings:

VariableDescriptionDefaultExample
FLUXBASE_REALTIME_LISTENER_POOL_SIZELISTEN connections for redundancy24
FLUXBASE_REALTIME_NOTIFICATION_WORKERSWorkers for parallel notification processing48
FLUXBASE_REALTIME_NOTIFICATION_QUEUE_SIZEQueue size per notification worker10002000
FLUXBASE_REALTIME_CLIENT_MESSAGE_QUEUE_SIZEPer-client message queue for async sending256512
FLUXBASE_REALTIME_SLOW_CLIENT_THRESHOLDQueue length threshold for slow client detection100200
FLUXBASE_REALTIME_SLOW_CLIENT_TIMEOUTDuration before disconnecting slow clients30s60s
VariableDescriptionDefaultExample
FLUXBASE_MIGRATIONS_ENABLEDEnable migrations APItruetrue, false
FLUXBASE_MIGRATIONS_ALLOWED_IP_RANGESIP CIDR ranges allowed to access migrations API["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16", "127.0.0.0/8"]-
FLUXBASE_MIGRATIONS_REQUIRE_SERVICE_KEYRequire service key authenticationtrueAlways true for security
VariableDescriptionDefaultExample
FLUXBASE_ADMIN_ENABLEDEnable Admin UIfalsetrue, false
VariableDescriptionDefaultExample
FLUXBASE_LOGGING_CONSOLE_ENABLEDEnable console loggingtruetrue, false
FLUXBASE_LOGGING_CONSOLE_LEVELConsole log levelinfodebug, info, warn, error
FLUXBASE_LOGGING_CONSOLE_FORMATConsole log formatconsoleconsole, json
FLUXBASE_LOGGING_BACKENDLog storage backendpostgrespostgres, postgres-timescaledb, timescaledb, elasticsearch, opensearch, clickhouse, loki, s3, local
FLUXBASE_LOGGING_S3_BUCKETS3 bucket for logs""my-logs-bucket
FLUXBASE_LOGGING_S3_PREFIXS3 key prefix for logslogslogs/prod
FLUXBASE_LOGGING_LOCAL_PATHLocal filesystem path for logs./logs/var/log/fluxbase
FLUXBASE_LOGGING_BATCH_SIZEBatch size for log writes100100
FLUXBASE_LOGGING_FLUSH_INTERVALFlush interval1s1s, 5s
FLUXBASE_LOGGING_BUFFER_SIZEBuffer size for async writes1000010000
FLUXBASE_LOGGING_PUBSUB_ENABLEDEnable PubSub for streamingtruetrue, false
FLUXBASE_LOGGING_RETENTION_ENABLEDEnable automatic retentiontruetrue, false
FLUXBASE_LOGGING_RETENTION_CHECK_INTERVALRetention check interval24h24h, 12h
FLUXBASE_LOGGING_SYSTEM_RETENTION_DAYSSystem log retention77
FLUXBASE_LOGGING_HTTP_RETENTION_DAYSHTTP log retention3030
FLUXBASE_LOGGING_SECURITY_RETENTION_DAYSSecurity log retention9090
FLUXBASE_LOGGING_EXECUTION_RETENTION_DAYSExecution log retention3030
FLUXBASE_LOGGING_AI_RETENTION_DAYSAI log retention3030

Elasticsearch Configuration:

VariableDescriptionDefaultExample
FLUXBASE_LOGGING_ELASTICSEARCH_URLSElasticsearch cluster URLs["http://localhost:9200"]["https://es.example.com:9200"]
FLUXBASE_LOGGING_ELASTICSEARCH_USERNAMEElasticsearch username""elastic
FLUXBASE_LOGGING_ELASTICSEARCH_PASSWORDElasticsearch password""${ES_PASSWORD}
FLUXBASE_LOGGING_ELASTICSEARCH_INDEXIndex namefluxbase-logsfluxbase-logs-prod
FLUXBASE_LOGGING_ELASTICSEARCH_VERSIONElasticsearch major version88, 9

OpenSearch Configuration:

VariableDescriptionDefaultExample
FLUXBASE_LOGGING_OPENSEARCH_URLSOpenSearch cluster URLs["http://localhost:9200"]["https://os.example.com:9200"]
FLUXBASE_LOGGING_OPENSEARCH_USERNAMEOpenSearch username""admin
FLUXBASE_LOGGING_OPENSEARCH_PASSWORDOpenSearch password""${OS_PASSWORD}
FLUXBASE_LOGGING_OPENSEARCH_INDEXIndex namefluxbase-logsfluxbase-logs-prod
FLUXBASE_LOGGING_OPENSEARCH_VERSIONOpenSearch major version22

ClickHouse Configuration:

VariableDescriptionDefaultExample
FLUXBASE_LOGGING_CLICKHOUSE_ADDRESSESClickHouse server addresses["localhost:9000"]["clickhouse:9000"]
FLUXBASE_LOGGING_CLICKHOUSE_USERNAMEClickHouse usernamedefaultfluxbase
FLUXBASE_LOGGING_CLICKHOUSE_PASSWORDClickHouse password""${CH_PASSWORD}
FLUXBASE_LOGGING_CLICKHOUSE_DATABASEClickHouse databasefluxbasefluxbase_logs
FLUXBASE_LOGGING_CLICKHOUSE_TABLETable namelogsexecution_logs
FLUXBASE_LOGGING_CLICKHOUSE_TTL_DAYSData retention in days3090

TimescaleDB Configuration:

VariableDescriptionDefaultExample
FLUXBASE_LOGGING_TIMESCALEDB_ENABLEDEnable TimescaleDB extensiontruetrue, false
FLUXBASE_LOGGING_TIMESCALEDB_COMPRESSEnable compressiontruetrue, false
FLUXBASE_LOGGING_TIMESCALEDB_COMPRESS_AFTERCompression delay168h168h, 72h

Loki Configuration:

VariableDescriptionDefaultExample
FLUXBASE_LOGGING_LOKI_URLLoki push endpoint"" (required)http://loki:3100
FLUXBASE_LOGGING_LOKI_USERNAMELoki username""loki
FLUXBASE_LOGGING_LOKI_PASSWORDLoki password""${LOKI_PASSWORD}
FLUXBASE_LOGGING_LOKI_TENANT_IDLoki tenant ID""fluxbase-tenant
FLUXBASE_LOGGING_LOKI_STATIC_LABELSStatic label names["app", "env"]["app", "env", "region"]
VariableDescriptionDefaultExample
FLUXBASE_CORS_ALLOWED_ORIGINSAllowed origins (comma-separated)http://localhost:5173,http://localhost:8080http://localhost:3000,https://app.com
FLUXBASE_CORS_ALLOWED_METHODSAllowed HTTP methodsGET,POST,PUT,PATCH,DELETE,OPTIONSGET,POST,PUT,DELETE
FLUXBASE_CORS_ALLOWED_HEADERSAllowed headersOrigin,Content-Type,Accept,Authorization,...Authorization,Content-Type
FLUXBASE_CORS_ALLOW_CREDENTIALSAllow credentialstruetrue, false
FLUXBASE_CORS_MAX_AGEPreflight cache time (seconds)30086400
VariableDescriptionDefaultExample
FLUXBASE_SECURITY_SETUP_TOKENToken for admin dashboard setup (required to enable dashboard)""openssl rand -base64 32
FLUXBASE_SECURITY_ENABLE_GLOBAL_RATE_LIMITEnable global API rate limitingfalsetrue, false
FLUXBASE_SECURITY_ADMIN_SETUP_RATE_LIMITMax attempts for admin setup55
FLUXBASE_SECURITY_ADMIN_SETUP_RATE_WINDOWTime window for admin setup rate limit15m15m
FLUXBASE_SECURITY_AUTH_LOGIN_RATE_LIMITMax attempts for auth login1010
FLUXBASE_SECURITY_AUTH_LOGIN_RATE_WINDOWTime window for auth login rate limit1m1m
FLUXBASE_SECURITY_ADMIN_LOGIN_RATE_LIMITMax attempts for admin login1010
FLUXBASE_SECURITY_ADMIN_LOGIN_RATE_WINDOWTime window for admin login rate limit1m1m

CAPTCHA Configuration (Bot Protection):

VariableDescriptionDefaultExample
FLUXBASE_SECURITY_CAPTCHA_ENABLEDEnable CAPTCHA verificationfalsetrue, false
FLUXBASE_SECURITY_CAPTCHA_PROVIDERCAPTCHA providerhcaptchahcaptcha, recaptcha_v3, turnstile, cap
FLUXBASE_SECURITY_CAPTCHA_SITE_KEYPublic site key (for frontend)""Your site key
FLUXBASE_SECURITY_CAPTCHA_SECRET_KEYSecret key (for server verification)""Your secret key
FLUXBASE_SECURITY_CAPTCHA_SCORE_THRESHOLDMin score for reCAPTCHA v3 (0.0-1.0)0.50.7
FLUXBASE_SECURITY_CAPTCHA_ENDPOINTSEndpoints requiring CAPTCHA["signup", "login", "password_reset", "magic_link"]-
FLUXBASE_SECURITY_CAPTCHA_CAP_SERVER_URLURL for self-hosted Cap server""http://cap:3000
FLUXBASE_SECURITY_CAPTCHA_CAP_API_KEYAPI key for Cap server""Your Cap API key
FLUXBASE_SECURITY_CAPTCHA_TEST_BYPASS_TOKENTest token that bypasses verification (dev only)""Leave empty in production

Supported CAPTCHA Providers:

  • hCaptcha - Privacy-focused CAPTCHA (recommended)
  • reCAPTCHA v3 - Google’s invisible CAPTCHA with risk scoring
  • Turnstile - Cloudflare’s privacy-preserving alternative
  • Cap - Self-hosted proof-of-work CAPTCHA
VariableDescriptionDefaultExample
FLUXBASE_AI_ENABLEDEnable AI chatbot functionalitytruetrue, false
FLUXBASE_AI_CHATBOTS_DIRDirectory for chatbot definitions./chatbots./chatbots
FLUXBASE_AI_AUTO_LOAD_ON_BOOTLoad chatbots from filesystem at boottruetrue, false
FLUXBASE_AI_DEFAULT_MAX_TOKENSDefault max tokens per request40964096
FLUXBASE_AI_QUERY_TIMEOUTSQL query execution timeout30s30s
FLUXBASE_AI_MAX_ROWS_PER_QUERYMax rows returned per query10001000
FLUXBASE_AI_CONVERSATION_CACHE_TTLTTL for conversation cache30m1h
FLUXBASE_AI_MAX_CONVERSATION_TURNSMax turns per conversation5050

AI Provider Configuration:

VariableDescriptionDefaultExample
FLUXBASE_AI_PROVIDER_ENABLEDEnable config-based providerfalsetrue, false
FLUXBASE_AI_PROVIDER_TYPEProvider type""openai, azure, ollama
FLUXBASE_AI_PROVIDER_NAMEDisplay name for provider""Default Provider
FLUXBASE_AI_PROVIDER_MODELDefault model""gpt-4-turbo

OpenAI Settings:

VariableDescriptionDefaultExample
FLUXBASE_AI_OPENAI_API_KEYOpenAI API key""sk-...
FLUXBASE_AI_OPENAI_ORGANIZATION_IDOpenAI organization ID""org-...
FLUXBASE_AI_OPENAI_BASE_URLCustom base URL (for compatible APIs)""https://api.openai.com/v1

Azure OpenAI Settings:

VariableDescriptionDefaultExample
FLUXBASE_AI_AZURE_API_KEYAzure OpenAI API key""Your API key
FLUXBASE_AI_AZURE_ENDPOINTAzure OpenAI endpoint""https://your-resource.openai.azure.com
FLUXBASE_AI_AZURE_DEPLOYMENT_NAMEAzure deployment name""gpt-4-deployment
FLUXBASE_AI_AZURE_API_VERSIONAzure API version""2024-02-15-preview

Ollama Settings:

VariableDescriptionDefaultExample
FLUXBASE_AI_OLLAMA_ENDPOINTOllama endpoint""http://localhost:11434
FLUXBASE_AI_OLLAMA_MODELOllama model name""llama2, mistral

Embedding Configuration (Vector Search):

VariableDescriptionDefaultExample
FLUXBASE_AI_EMBEDDING_ENABLEDEnable embedding generation for vector searchfalsetrue, false
FLUXBASE_AI_EMBEDDING_PROVIDEREmbedding provider"" (uses AI provider)openai, azure, ollama
FLUXBASE_AI_EMBEDDING_MODELEmbedding model"" (provider default)text-embedding-3-small
FLUXBASE_AI_AZURE_EMBEDDING_DEPLOYMENT_NAMESeparate Azure deployment for embeddings""text-embedding-ada-002

OCR Configuration (Knowledge Base PDF Extraction):

VariableDescriptionDefaultExample
FLUXBASE_AI_OCR_ENABLEDEnable OCR for image-based PDFstruetrue, false
FLUXBASE_AI_OCR_PROVIDEROCR providertesseracttesseract
FLUXBASE_AI_OCR_LANGUAGESDefault OCR languages["eng"]["eng", "deu", "fra"]

Sync Security:

VariableDescriptionDefaultExample
FLUXBASE_AI_SYNC_ALLOWED_IP_RANGESIP CIDR ranges allowed to sync chatbots["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16", "127.0.0.0/8"]-
VariableDescriptionDefaultExample
FLUXBASE_FUNCTIONS_ENABLEDEnable edge functionstruetrue, false
FLUXBASE_FUNCTIONS_FUNCTIONS_DIRDirectory for function files./functions./functions
FLUXBASE_FUNCTIONS_AUTO_LOAD_ON_BOOTLoad functions from filesystem at boottruetrue, false
FLUXBASE_FUNCTIONS_DEFAULT_TIMEOUTDefault function timeout (seconds)3030
FLUXBASE_FUNCTIONS_MAX_TIMEOUTMaximum function timeout (seconds)300300
FLUXBASE_FUNCTIONS_DEFAULT_MEMORY_LIMITDefault memory limit (MB)128256
FLUXBASE_FUNCTIONS_MAX_MEMORY_LIMITMaximum memory limit (MB)10242048
FLUXBASE_FUNCTIONS_MAX_OUTPUT_SIZEMaximum output size (bytes, 0=unlimited)10485760 (10MB)20971520
FLUXBASE_FUNCTIONS_SYNC_ALLOWED_IP_RANGESIP CIDR ranges allowed to sync functions["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16", "127.0.0.0/8"]-

Global settings for the Deno runtime used by edge functions and background jobs.

VariableDescriptionDefaultExample
FLUXBASE_DENO_NPM_REGISTRYCustom npm registry URL for npm: specifiers""https://npm.your-company.com/
FLUXBASE_DENO_JSR_REGISTRYCustom JSR registry URL for jsr: specifiers""https://jsr.your-company.com/

Air-Gapped Environments: Set these to your private registry URLs for environments without internet access. See Edge Functions Air-Gapped Guide.

VariableDescriptionDefaultExample
FLUXBASE_RPC_ENABLEDEnable RPC functionalitytruetrue, false
FLUXBASE_RPC_PROCEDURES_DIRDirectory for RPC procedure definitions./rpc./rpc
FLUXBASE_RPC_AUTO_LOAD_ON_BOOTLoad procedures from filesystem at boottruetrue, false
FLUXBASE_RPC_DEFAULT_MAX_EXECUTION_TIMEDefault max execution time30s60s
FLUXBASE_RPC_MAX_MAX_EXECUTION_TIMEMaximum allowed execution time5m10m
FLUXBASE_RPC_DEFAULT_MAX_ROWSDefault max rows returned10005000
FLUXBASE_RPC_SYNC_ALLOWED_IP_RANGESIP CIDR ranges allowed to sync procedures["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16", "127.0.0.0/8"]-
VariableDescriptionDefaultExample
FLUXBASE_JOBS_ENABLEDEnable background jobstruetrue, false
FLUXBASE_JOBS_JOBS_DIRDirectory for job definitions./jobs./jobs
FLUXBASE_JOBS_AUTO_LOAD_ON_BOOTLoad jobs from filesystem at boottruetrue, false
FLUXBASE_JOBS_WORKER_MODEWorker modeembeddedembedded, standalone, disabled
FLUXBASE_JOBS_EMBEDDED_WORKER_COUNTNumber of embedded workers48
FLUXBASE_JOBS_MAX_CONCURRENT_PER_WORKERMax concurrent jobs per worker510
FLUXBASE_JOBS_MAX_CONCURRENT_PER_NAMESPACEMax concurrent jobs per namespace2050
FLUXBASE_JOBS_DEFAULT_MAX_DURATIONDefault job timeout5m10m
FLUXBASE_JOBS_MAX_MAX_DURATIONMaximum allowed job timeout1h2h
FLUXBASE_JOBS_DEFAULT_PROGRESS_TIMEOUTProgress reporting timeout5m10m
FLUXBASE_JOBS_POLL_INTERVALWorker poll interval1s500ms
FLUXBASE_JOBS_WORKER_HEARTBEAT_INTERVALWorker heartbeat interval10s15s
FLUXBASE_JOBS_WORKER_TIMEOUTWorker considered dead after30s60s
FLUXBASE_JOBS_GRACEFUL_SHUTDOWN_TIMEOUTTime to wait for running jobs during shutdown5m10m

Execution Log Retention:

VariableDescriptionDefaultExample
FLUXBASE_JOBS_FUNCTIONS_LOGS_RETENTION_DAYSRetention for function execution logs (days)3060
FLUXBASE_JOBS_RPC_LOGS_RETENTION_DAYSRetention for RPC execution logs (days)3060
FLUXBASE_JOBS_JOBS_LOGS_RETENTION_DAYSRetention for job execution logs (days)3060

Sync Security:

VariableDescriptionDefaultExample
FLUXBASE_JOBS_SYNC_ALLOWED_IP_RANGESIP CIDR ranges allowed to sync jobs["172.16.0.0/12", "10.0.0.0/8", "192.168.0.0/16", "127.0.0.0/8"]-
VariableDescriptionDefaultExample
FLUXBASE_SCALING_WORKER_ONLYDisable API server, only run job workersfalsetrue, false
FLUXBASE_SCALING_DISABLE_SCHEDULERDisable cron job scheduler on this instancefalsetrue, false
FLUXBASE_SCALING_DISABLE_REALTIMEDisable realtime/WebSocket listenerfalsetrue, false
FLUXBASE_SCALING_ENABLE_SCHEDULER_LEADER_ELECTIONEnable PostgreSQL advisory lock leader electionfalsetrue, false
FLUXBASE_SCALING_BACKENDDistributed state backendlocallocal, postgres, redis
FLUXBASE_SCALING_REDIS_URLRedis/Dragonfly connection URL""redis://dragonfly:6379

Backend Options:

  • local - In-memory storage (single instance only, default)
  • postgres - Uses PostgreSQL for distributed state (no extra dependencies)
  • redis - Uses Redis-compatible backend (Dragonfly recommended for performance)

What’s Distributed:

FeatureDescription
Rate limitingShared counters across all instances
Realtime broadcastsCross-instance pub/sub for application events
Scheduler coordinationLeader election prevents duplicate cron jobs
Nonce validationPostgreSQL-backed for stateless auth flows

CLI Flags:

FlagDescription
--worker-onlyDisable API server, only run background job workers
--disable-schedulerDisable cron job scheduler on this instance
--disable-realtimeDisable realtime/WebSocket listener
--enable-leader-electionEnable PostgreSQL advisory lock leader election

Example Production Configuration:

Terminal window
# Multi-instance with PostgreSQL backend
FLUXBASE_SCALING_BACKEND=postgres
FLUXBASE_SCALING_ENABLE_SCHEDULER_LEADER_ELECTION=true
# Or with Redis/Dragonfly for high-scale (1000+ req/s)
FLUXBASE_SCALING_BACKEND=redis
FLUXBASE_SCALING_REDIS_URL=redis://:password@dragonfly:6379
FLUXBASE_SCALING_ENABLE_SCHEDULER_LEADER_ELECTION=true
VariableDescriptionDefaultExample
FLUXBASE_TRACING_ENABLEDEnable OpenTelemetry tracingfalsetrue, false
FLUXBASE_TRACING_ENDPOINTOTLP gRPC endpointlocalhost:4317jaeger:4317
FLUXBASE_TRACING_SERVICE_NAMEService name for tracesfluxbasefluxbase
FLUXBASE_TRACING_ENVIRONMENTEnvironment namedevelopmentproduction
FLUXBASE_TRACING_SAMPLE_RATESample rate (0.0-1.0)1.00.1 (10%)
FLUXBASE_TRACING_INSECUREUse insecure connectiontruefalse
VariableDescriptionDefaultExample
FLUXBASE_API_MAX_PAGE_SIZEMax rows per request (-1 = unlimited)10001000
FLUXBASE_API_MAX_TOTAL_RESULTSMax total retrievable rows (-1 = unlimited)1000010000
FLUXBASE_API_DEFAULT_PAGE_SIZEAuto-applied limit when not specified (-1 = no default)1000100
VariableDescriptionDefaultExample
FLUXBASE_GRAPHQL_ENABLEDEnable GraphQL API endpointtruetrue, false
FLUXBASE_GRAPHQL_MAX_DEPTHMaximum query depth1015
FLUXBASE_GRAPHQL_MAX_COMPLEXITYMaximum query complexity score10002000
FLUXBASE_GRAPHQL_INTROSPECTIONEnable GraphQL introspectiontruefalse
VariableDescriptionDefaultExample
FLUXBASE_METRICS_ENABLEDEnable Prometheus metrics endpointtruetrue, false
FLUXBASE_METRICS_PORTPort for metrics server90909090
FLUXBASE_METRICS_PATHPath for metrics endpoint/metrics/metrics
VariableDescriptionDefaultExample
FLUXBASE_MCP_ENABLEDEnable MCP servertruetrue, false
FLUXBASE_MCP_BASE_PATHBase path for MCP endpoints/mcp/mcp
FLUXBASE_MCP_SESSION_TIMEOUTSession timeout30m1h
FLUXBASE_MCP_MAX_MESSAGE_SIZEMax message size (bytes)10485760 (10MB)20971520
FLUXBASE_MCP_RATE_LIMIT_PER_MINRate limit per minute per client100200
FLUXBASE_MCP_ALLOWED_TOOLSAllowed tools (empty = all)[]["query", "storage"]
FLUXBASE_MCP_ALLOWED_RESOURCESAllowed resources (empty = all)[]["schema", "functions"]
FLUXBASE_MCP_TOOLS_DIRDirectory for custom MCP tools/app/mcp-tools./mcp-tools
FLUXBASE_MCP_AUTO_LOAD_ON_BOOTAuto-load custom tools on startuptruetrue, false

MCP OAuth Configuration (OAuth 2.1 for MCP Clients):

VariableDescriptionDefaultExample
FLUXBASE_MCP_OAUTH_ENABLEDEnable OAuth 2.1 for MCP clientstruetrue, false
FLUXBASE_MCP_OAUTH_DCR_ENABLEDEnable Dynamic Client Registrationtruetrue, false
FLUXBASE_MCP_OAUTH_TOKEN_EXPIRYAccess token lifetime1h2h
FLUXBASE_MCP_OAUTH_REFRESH_TOKEN_EXPIRYRefresh token lifetime168h (7 days)720h (30 days)
FLUXBASE_MCP_OAUTH_ALLOWED_REDIRECT_URISAllowed redirect URIs (empty = use defaults)[]["http://localhost:*"]
VariableDescriptionDefaultExample
FLUXBASE_BRANCHING_ENABLEDEnable database branchingfalsetrue, false
FLUXBASE_BRANCHING_MAX_BRANCHES_PER_USERMax branches per user510
FLUXBASE_BRANCHING_MAX_TOTAL_BRANCHESMax total branches50100
FLUXBASE_BRANCHING_DEFAULT_DATA_CLONE_MODEDefault data clone modeschema_onlyschema_only, full_clone
FLUXBASE_BRANCHING_AUTO_DELETE_AFTERAuto-delete branches after0 (never)24h, 168h
FLUXBASE_BRANCHING_DATABASE_PREFIXPrefix for branch database namesbranch_branch_
FLUXBASE_BRANCHING_SEEDS_PATHPath to seed data files./seeds./seeds
VariableDescriptionDefaultExample
TLS_ENABLEDEnable TLSfalsetrue, false
TLS_CERT_FILEPath to certificate-/etc/certs/tls.crt
TLS_KEY_FILEPath to private key-/etc/certs/tls.key
TLS_AUTO_CERTEnable Let’s Encryptfalsetrue, false
TLS_AUTO_CERT_DOMAINDomain for auto cert-example.com
# General
base_url: http://fluxbase:8080
public_base_url: https://api.example.com
encryption_key: ${ENCRYPTION_KEY} # 32 bytes for AES-256
server:
address: ":8080"
read_timeout: 300s
write_timeout: 300s
database:
host: postgres
port: 5432
user: fluxbase
password: ${DB_PASSWORD}
database: fluxbase
ssl_mode: require
max_connections: 100
min_connections: 20
max_conn_lifetime: 30m
auth:
jwt_secret: ${JWT_SECRET}
jwt_expiry: 15m
refresh_expiry: 168h # 7 days
password_min_length: 12
storage:
provider: s3
max_upload_size: 2147483648 # 2GB
s3_endpoint: s3.amazonaws.com
s3_access_key: ${S3_ACCESS_KEY}
s3_secret_key: ${S3_SECRET_KEY}
s3_region: us-east-1
s3_bucket: my-production-bucket
s3_force_path_style: false # Use virtual-hosted style for AWS S3
realtime:
enabled: true
max_connections: 5000
max_connections_per_user: 20
admin:
enabled: false # Disable in production or protect behind VPN
security:
setup_token: ${SETUP_TOKEN}
enable_global_rate_limit: true
logging:
console_level: info
console_format: json
cors:
allowed_origins: "https://app.example.com,https://www.example.com"
allow_credentials: true
scaling:
backend: postgres # or redis for high-scale
enable_scheduler_leader_election: true
.env.production
FLUXBASE_DATABASE_HOST=postgres
FLUXBASE_DATABASE_PORT=5432
FLUXBASE_DATABASE_USER=fluxbase
FLUXBASE_DATABASE_PASSWORD=${DB_PASSWORD}
FLUXBASE_DATABASE_DATABASE=fluxbase
FLUXBASE_DATABASE_SSL_MODE=require
FLUXBASE_AUTH_JWT_SECRET=${JWT_SECRET}
FLUXBASE_STORAGE_PROVIDER=s3
FLUXBASE_STORAGE_S3_ACCESS_KEY=${S3_ACCESS_KEY}
FLUXBASE_STORAGE_S3_SECRET_KEY=${S3_SECRET_KEY}
FLUXBASE_STORAGE_S3_BUCKET=production-bucket
FLUXBASE_LOGGING_CONSOLE_LEVEL=info
FLUXBASE_LOGGING_CONSOLE_FORMAT=json
FLUXBASE_CORS_ALLOWED_ORIGINS=https://app.example.com,https://www.example.com
FLUXBASE_SECURITY_ENABLE_GLOBAL_RATE_LIMIT=true
# General
base_url: http://localhost:8080
debug: true
server:
address: ":8080"
database:
host: localhost
port: 5432
user: fluxbase
password: fluxbase
database: fluxbase
ssl_mode: disable
max_connections: 20
min_connections: 5
auth:
jwt_secret: dev-secret-change-in-production
jwt_expiry: 24h # Longer for development
refresh_expiry: 720h # 30 days
storage:
provider: local
local_path: ./storage
realtime:
enabled: true
max_connections: 100
admin:
enabled: true
security:
setup_token: dev-setup-token-change-in-production
enable_global_rate_limit: false
logging:
console_level: debug
console_format: console
cors:
allowed_origins: "http://localhost:3000,http://localhost:5173,http://127.0.0.1:3000"
allow_credentials: true
version: "3.8"
services:
fluxbase:
image: ghcr.io/nimbleflux/fluxbase:latest
environment:
# Database
FLUXBASE_DATABASE_HOST: postgres
FLUXBASE_DATABASE_PORT: 5432
FLUXBASE_DATABASE_USER: fluxbase
FLUXBASE_DATABASE_PASSWORD: password
FLUXBASE_DATABASE_DATABASE: fluxbase
FLUXBASE_DATABASE_SSL_MODE: disable
# Authentication
FLUXBASE_AUTH_JWT_SECRET: ${JWT_SECRET}
FLUXBASE_AUTH_JWT_EXPIRY: 15m
FLUXBASE_AUTH_REFRESH_EXPIRY: 168h
# Storage (MinIO)
FLUXBASE_STORAGE_PROVIDER: s3
FLUXBASE_STORAGE_S3_ENDPOINT: http://minio:9000
FLUXBASE_STORAGE_S3_ACCESS_KEY: minioadmin
FLUXBASE_STORAGE_S3_SECRET_KEY: minioadmin
FLUXBASE_STORAGE_S3_BUCKET: fluxbase
FLUXBASE_STORAGE_S3_FORCE_PATH_STYLE: true
FLUXBASE_STORAGE_S3_REGION: us-east-1
# Realtime
FLUXBASE_REALTIME_ENABLED: true
FLUXBASE_REALTIME_MAX_CONNECTIONS: 1000
# Logging
FLUXBASE_LOGGING_CONSOLE_LEVEL: info
FLUXBASE_LOGGING_CONSOLE_FORMAT: json
# CORS
FLUXBASE_CORS_ALLOWED_ORIGINS: http://localhost:3000
ports:
- "8080:8080"
depends_on:
postgres:
condition: service_healthy
volumes:
- ./fluxbase.yaml:/app/fluxbase.yaml
postgres:
image: ghcr.io/nimbleflux/fluxbase-postgres:18
environment:
POSTGRES_DB: fluxbase
POSTGRES_USER: fluxbase
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U fluxbase"]
interval: 5s
timeout: 5s
retries: 5
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
volumes:
postgres_data:
minio_data:

Helm chart configuration will be available in a future release.

Configuration is loaded in the following order (later sources override earlier ones):

  1. Default values (built-in)
  2. Configuration file (fluxbase.yaml)
  3. Environment variables
  4. Command-line flags (if applicable)

Fluxbase validates configuration on startup and will fail fast if:

  • Required values are missing (e.g., DATABASE_URL, JWT_SECRET)
  • Values are invalid (e.g., negative numbers, invalid formats)
  • Database connection fails
  • Storage backend is unreachable

Currently, Fluxbase does not support hot reloading of configuration. Restart the server after making configuration changes.

Never commit secrets to version control!

Use environment variables or secret management tools:

Terminal window
# Good: Load from environment
export JWT_SECRET=$(openssl rand -hex 32)
export DATABASE_URL="postgres://user:$(cat /run/secrets/db_password)@localhost/fluxbase"
# Bad: Hardcode in config file
jwt:
secret: my-secret-key # ❌ Don't do this!

Use a secrets management solution:

  • Kubernetes: Use Secrets and ConfigMaps
  • Docker Swarm: Use Docker Secrets
  • AWS: Use AWS Secrets Manager or Parameter Store
  • HashiCorp Vault: Enterprise secret management
  • Environment: Use .env files (not in git) with proper permissions
Terminal window
# Check if file exists
ls -la fluxbase.yaml
# Validate YAML syntax
yamllint fluxbase.yaml
# Check environment variables
env | grep FLUXBASE
Terminal window
# Test connection
psql "$DATABASE_URL"
# Check connection string format
echo $DATABASE_URL

If you see CORS errors in the browser:

  1. Check CORS_ALLOWED_ORIGINS includes your frontend URL
  2. Ensure CORS_ALLOW_CREDENTIALS is true if sending cookies
  3. Check browser console for specific CORS error