Skip to main content

Server Configuration Reference

Multiforum configuration has two layers:

  1. Environment variables describe deployment capabilities, credentials, image versions, and public URLs.
  2. ServerConfig and related role nodes contain administrator-controlled forum settings.

Use .env.quickstart.example for local evaluation and .env.production.example with the production Compose overlay. The examples in the deployment repository are authoritative and are validated in CI.

Automatic setup​

When the database is empty, the backend creates ServerConfig, default roles, and the initial administrator relationship. Manual Cypher initialization is no longer required for the supported Compose paths.

The quick-start uses:

MULTIFORUM_AUTH_PROVIDER=local-dev
MULTIFORUM_BOOTSTRAP_EMAIL=admin@multiforum.local
MULTIFORUM_BOOTSTRAP_USERNAME=admin
MULTIFORUM_BOOTSTRAP_PASSWORD=multiforum-local-admin

Production uses Auth0 and MULTIFORUM_SUPERADMIN_EMAIL. Local bootstrap password authentication must never be exposed publicly.

Production deployment variables​

Instance and network​

VariableDescription
MULTIFORUM_DOMAINPublic hostname without scheme or path
MULTIFORUM_INSTANCE_NAMEUser-facing instance name
MULTIFORUM_BIND_ADDRESSHost address for diagnostic ports; production defaults to loopback
CADDY_ACME_EMAILACME contact used by Caddy

Pinned images​

VariableDescription
MULTIFORUM_NEO4J_IMAGETested Neo4j image reference
MULTIFORUM_BACKEND_IMAGEOfficial backend image reference
MULTIFORUM_BACKEND_PULL_POLICYCompose pull policy
MULTIFORUM_FRONTEND_IMAGEOfficial frontend image reference
MULTIFORUM_FRONTEND_PULL_POLICYCompose pull policy
MULTIFORUM_CADDY_IMAGETested Caddy image reference

Use release or immutable sha-* tags in production rather than edge or latest.

Required secrets and identity​

VariableDescription
NEO4J_PASSWORDNeo4j password
MULTIFORUM_SUPERADMIN_EMAILVerified Auth0 break-glass administrator email
PLUGIN_SECRET_ENCRYPTION_KEY32-character key used to protect plugin secrets
AUTH0_DOMAINAuth0 tenant domain
AUTH0_CLIENT_IDAuth0 Regular Web Application client ID
AUTH0_AUDIENCEAuth0 API identifier
NUXT_AUTH0_CLIENT_SECRETAuth0 Regular Web Application client secret
NUXT_AUTH0_SESSION_SECRETLong secret protecting frontend sessions

The production overlay derives the frontend base URL, logout URL, callback base, and GraphQL proxy configuration from MULTIFORUM_DOMAIN. Do not recreate the former VITE_AUTH0_* or VITE_GRAPHQL_URL configuration.

Optional object storage​

VariableDescription
GCS_BUCKET_NAMEPublic image/upload bucket
GCS_PRIVATE_DOWNLOAD_BUCKET_NAMEPrivate downloadable-file bucket
GOOGLE_CREDENTIALS_BASE64Base64 service-account JSON

If these remain empty, upload capabilities remain disabled.

Optional maps and geocoding​

VariableDescription
GOOGLE_MAPS_API_KEYBrowser-restricted Google Maps key
GOOGLE_MAP_IDOptional Google Map ID
OPEN_CAGE_API_KEYOpenCage geocoding key

The production image receives these values at runtime through NUXT_PUBLIC_* runtime configuration. Rebuilding the frontend is not required.

Optional branding​

VariableDescription
NUXT_PUBLIC_BRANDING_PRODUCT_NAMEName in the footer attribution
NUXT_PUBLIC_BRANDING_DOCS_URLDocumentation link target
NUXT_PUBLIC_BRANDING_SOURCE_URLSource repository link target
NUXT_PUBLIC_BRANDING_ISSUES_URLIssue tracker link target
NUXT_PUBLIC_BRANDING_SUPPORT_EMAILSupport contact address
NUXT_PUBLIC_BRANDING_SHOW_UPSTREAM_LINKSfalse hides all upstream references
NUXT_PUBLIC_BRANDING_CUSTOM_FOOTER_LINKSJSON array of {label, url} footer links
NUXT_PUBLIC_BRANDING_LOCKEDtrue pins branding to these variables and makes the admin tab read-only

These are optional; administrators can set the same values under Admin Settings → Settings → Branding. Each one is passed to the frontend container only when it is set, so an unset variable keeps the built-in default while an assigned empty value deliberately hides that link. See Instance branding.

Optional email​

VariableDescription
EMAIL_PROVIDERresend or sendgrid
EMAIL_FROMSender address
RESEND_API_KEYResend API key
SENDGRID_API_KEYSendGrid API key
SENDGRID_FROM_EMAILOptional SendGrid-specific sender address

Email gracefully no-ops when it is unconfigured.

Capability status​

The backend reports setup state for authentication, email, maps, geocoding, uploads, downloads, events, and plugins. Each capability can distinguish configured from enabled and report missing required variables. The frontend uses this as the source of truth for Admin → Instance Setup and feature placeholders.

ServerConfig fields​

Basic information​

FieldTypeDescription
serverNameStringInstance identifier/name
serverDescriptionStringPublic description
serverIconURLStringServer icon URL
rulesJSONServer-wide rules

Feature toggles​

FieldTypeDescription
enableDownloadsBooleanAllow download features when storage is configured
enableEventsBooleanAllow event features
allowedFileTypes[String]Server-level allowed file extensions

Branding​

FieldTypeDescription
brandingProductNameStringName in the footer attribution
brandingDocsURLStringDocumentation link target
brandingSourceURLStringSource repository link target
brandingIssuesURLStringIssue tracker for the software itself
brandingSupportEmailStringSupport contact address for this instance
brandingShowUpstreamLinksBooleanShow documentation, source and attribution links (default true)
brandingCustomFooterLinksJSONArray of {label, url} footer links, at most eight

The following fields exist on ServerConfig but are not rendered yet: brandingLogoDarkURL, brandingLogoAlt, brandingFaviconURL, and brandingPrimaryColor. serverIconURL doubles as the light-mode logo.

Branding fields are writable only by administrators and are validated on save: URLs must be http(s) or site-relative, so a javascript: or data: URL cannot be stored and later rendered into a link. An empty string clears a field; see Instance branding for the full resolution order and the NUXT_PUBLIC_BRANDING_* variables that can set or pin these values.

Plugins​

FieldTypeDescription
pluginRegistries[String]Plugin registry endpoints
pluginPipelinesJSONOrdered event pipeline configuration

Installed plugin versions, administrators, moderators, suspensions, invitations, and default roles are represented through relationships from ServerConfig.

Server plugin state can also be reconciled from a versioned desired-state manifest. See Declarative plugin configuration.

Default roles​

First-run setup creates default user, moderator, elevated moderator, suspended user, and suspended moderator roles. Administrators can review their detailed permissions under Admin → Roles. See the Admin Settings Reference for the permissions and membership workflow.

Validate configuration​

Before a production start or upgrade:

docker compose \
--env-file .env.production \
-f docker-compose.yml \
-f docker-compose.production.yml \
config --quiet

Compose rejects empty required production values. After startup, run:

scripts/verify-self-hosting.sh --env-file .env.production