Environment Variables

All configuration values in application.yml can be overridden via environment variables. The following are the most important for deployment.

Core

VariableConfig PathDefaultDescription
JWT_SECRETmicronaut.security.token.jwt.signatures.secret.default.secret(dev default)JWT signing secret
JWT_REFRESH_SECRETmicronaut.security.token.jwt.generator.refresh-token.secret(dev default)Refresh token secret

Database

VariableConfig PathDefaultDescription
DB_URLdatasources.default.urljdbc:h2:./data/matrix;DB_CLOSE_DELAY=-1JDBC connection URL
DB_USERNAMEdatasources.default.usernamesaDatabase username
DB_PASSWORDdatasources.default.password(empty)Database password

Matrix Server

VariableConfig PathDefaultDescription
matrix.homeserver.base-urlhttp://localhost:8899Public server URL
matrix.identity.modedisabledIdentity service mode

Example: Docker Compose

environment:
  - JWT_SECRET=${JWT_SECRET:-devSecretKey123456789012345678901234567890123456789012345678901234567890}
  - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET:-devRefreshKey123456789012345678901234567890123456789012345678901234567890}
  - DB_URL=${DB_URL:-jdbc:h2:./data/matrix;DB_CLOSE_DELAY=-1}
  - DB_USERNAME=${DB_USERNAME:-sa}
  - DB_PASSWORD=${DB_PASSWORD:-}

Example: Systemd Service

[Service]
Environment=JWT_SECRET=your-production-secret
Environment=JWT_REFRESH_SECRET=your-production-refresh-secret
Environment=DB_URL=jdbc:h2:/var/lib/firmiana/data/matrix;DB_CLOSE_DELAY=-1
Environment=DB_USERNAME=sa
Environment=DB_PASSWORD=your-db-password
ExecStart=/usr/bin/java -cp "target/classes:$(cat target/cp.txt)" com.firmiana.matrix.Application

Example: Shell

export JWT_SECRET="your-secret-key"
export JWT_REFRESH_SECRET="your-refresh-secret"
export DB_URL="jdbc:h2:./data/matrix;DB_CLOSE_DELAY=-1"

mvn exec:java

Configuration Priority

Environment variables override application.yml values. The ${VAR:default} syntax in YAML provides fallback defaults:

secret: ${JWT_SECRET:myDefaultDevValue}

If JWT_SECRET is set, it's used. Otherwise, myDefaultDevValue is used.