Skip to content

Environment variables

This is a reference for the environment variables a self-hosted forum reads. For how they combine, see Configuration.

Variable Default Notes
DATABASE_URL PostgreSQL URL. Presence = production mode.
SECRET_KEY Required in production; app won’t start without it.
API_KEY Platform API bootstrap key (if API enabled).
JWT_SECRET JWT signing secret (if token auth used).
BLUSET_REDIS_URL Redis URL for cache, rate-limiting, and Celery. Not a canonical name — it must carry the BLUSET_ prefix.
BLUSET_REDIS_ENABLED False Set True to actually use Redis (otherwise cache falls back to in-process and the rate-limiter to memory).
BLUSET_PRODUCTION unset Force production mode either way.
BLUSET_DEBUG False Never enable in production.
BLUSET_AUTO_MIGRATE True Migrations run on container start by default; set False to manage them yourself.
BLUSET_SETTINGS Path to a Python config file to load.
BLUSET_SENTRY_DSN Error tracking (optional).
BLUSET_SENTRY_ENVIRONMENT production Sentry environment tag.
BLUSET_STATIC_DIR image path Static assets directory.
BLUSET_THEMES_DIR image path Themes directory.
BLUSET_SOCKET_DIR /run/bluset Socket directory when binding a socket.
Variable Default Notes
FORUM_ENABLED true Enable the web interface (forum, auth, admin, user, help-desk web).
API_ENABLED true Enable the API interface (forum/CMS/auth/help-desk APIs).
FEATURE_SET Comma-separated allowlist of child features to enable. When present, it is authoritative each boot.
Variable Notes
ADMIN_USERNAME Bootstrap admin username. Change immediately.
ADMIN_EMAIL Bootstrap admin email.
ADMIN_PASSWORD Bootstrap admin password. Never keep the sample value.

Prefer creating the admin explicitly with bluset create-admin (see the CLI reference) so credentials never sit in the environment.

These are Flask-Mail settings, so they take the BLUSET_ prefix.

Variable Default Notes
BLUSET_MAIL_SERVER localhost SMTP host.
BLUSET_MAIL_PORT 25 SMTP port.
BLUSET_MAIL_USE_TLS False STARTTLS (set True for port 587).
BLUSET_MAIL_USE_SSL False Implicit TLS (set True for port 465).
BLUSET_MAIL_USERNAME / BLUSET_MAIL_PASSWORD SMTP credentials.
BLUSET_MAIL_DEFAULT_SENDER From address.
Variable Default Notes
GUNICORN_BIND unix:/runtime/bluset.sock Set 0.0.0.0:8000 for TCP behind a proxy.
WEB_CONCURRENCY 2 Workers; a good start is (cores × 2) + 1.
PYTHON_MAX_THREADS 1 Threads per worker.
WEB_TIMEOUT 120 Worker timeout (seconds).
WEB_RELOAD false Development only.
GUNICORN_LOG_LEVEL info Log level.
Variable Default Notes
CELERY_LOG_LEVEL info Worker log level (container/entrypoint var).
BLUSET_CELERY_BEAT_ENABLED False Enable scheduled tasks.
BLUSET_CELERY_CONFIG Redis on localhost Override the whole Celery config dict (broker/result backend) — e.g. to point at a separate Redis.
Variable Default Notes
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB sample values Change for production.
POSTGRES_VERSION alpine Postgres image tag.
REDIS_VERSION alpine Redis image tag.
COMPOSE_PROJECT_NAME bluset Compose project name.
TAG latest Image tag to run.
UID / GID 2000 Non-root run user.
DOCKER_RESTART_POLICY unless-stopped Container restart policy.

See Connect a support inbox for BLUSET_HELPDESK_INBOUND_SECRET, BLUSET_HELPDESK_SUPPORT_EMAIL, and related keys.