Skip to main content

Configuration Reference

Complete reference of all available environment variables for backend and frontend. The variables are configured via two files at the project's root: .env (backend, workers, scheduler) and frontend.env (frontend).

The variables required for startup are described in the OpenVLE installation guide. This page serves as a reference for all available options.

In the tables, Yes = always required and Yes* = required when the respective feature is enabled.

info

All backend variables must be enclosed in quotation marks (" "), otherwise parsing errors will occur at startup. After every change, the containers must be restarted: docker compose down && docker compose up -d.

Backend (.env)

General

Basic application settings. CORS_ORIGINS is the only required variable in this category — it must contain the URL where the frontend is accessible, otherwise the browser will block API requests. The remaining variables control the displayed project name, contact information, and the environment (production/development).

VariableDefault valueRequiredDescription
API_HEALTH_TOKEN""NoToken for authenticating health check requests
APP_ENV"prod"NoEnvironment (e.g., prod, dev)
CONTACT_MAIL"support@inett.de"NoContact email
CONTACT_NAME"inett GmbH"NoName of the contact person/organization
CONTACT_URL"https://inett.de"NoContact website
CORS_ORIGINS[""]YesAllowed origins for CORS (URL of the frontend)
DOCS_ENABLEDFalseNoEnable OpenAPI endpoints (/docs, /redoc, /openapi.json)
PROJECT_DESCRIPTION"Kursverwaltungssoftware - Backend"NoProject description
PROJECT_NAME"OpenVLE"NoInternal project name
PROJECT_TITLE"OpenVLE"NoDisplayed title in the interface
PROJECT_VERSION1.0NoProject version

Authentication

Controls user sessions and token-based authentication. AUTH_SECRET and SESSION_SECRET_TOKEN must be set to secure, random strings — they protect the JWT tokens and session data. Changing AUTH_SECRET immediately logs out all active users.

VariableDefault valueRequiredDescription
AUTH_ACCESS_TOKE_EXPIRE_MINUTES480NoExpiry time for access tokens (minutes)
AUTH_ALOGORITHM"HS256"NoAlgorithm for JWT authentication
AUTH_SECRET""YesSecret key for JWT authentication
SESSION_SECRET_TOKEN""YesSecret token for session management

Database — MariaDB

MariaDB is the primary relational database and stores all core entities: users, roles, permissions, environments, events, VMs, VM templates, and connections. The connection details must match the MariaDB instance in the Docker Compose stack. The pool settings control how many concurrent database connections the backend keeps open — the default values are sufficient for most installations.

VariableDefault valueRequiredDescription
MARIADB_CHARSET"utf8mb4"NoCharacter set
MARIADB_DATABASE"project"YesDatabase name
MARIADB_HOST"db"YesHostname of the MariaDB server
MARIADB_IMAGE_TAG"11.2"NoDocker image tag
MARIADB_PASSWORD"project"YesPassword
MARIADB_POOL_ACQUIRE15000NoAcquire timeout (ms)
MARIADB_POOL_IDLE60000NoIdle timeout (ms)
MARIADB_POOL_MAX12NoMaximum connections in pool
MARIADB_POOL_MIN2NoMinimum connections in pool
MARIADB_PORT3306YesMariaDB port
MARIADB_QUERY_RESULT_LIMIT200NoMax. records per query
MARIADB_ROOT_PASSWORD""YesRoot password for the MariaDB instance
MARIADB_TIMEOUT120NoConnection timeout (seconds)
MARIADB_TYPE"mysql"YesDatabase type
MARIADB_USER"project"YesUsername

Database — MongoDB

MongoDB stores activities, system events, and audit logs. This data is used for the activity overview in the user interface. The connection details must match the MongoDB instance in the Docker Compose stack.

VariableDefault valueRequiredDescription
MONGODB_DATABASE"project"YesDatabase name
MONGODB_HOST"localhost"YesHostname of the MongoDB server
MONGODB_IMAGE_TAG"jammy"NoDocker image tag
MONGODB_PASSWORD"project"YesPassword
MONGODB_PORT27017YesPort
MONGODB_USER"project"YesUsername

Database — Redis

Redis serves as the task queue and cache for the worker and scheduler processes. All asynchronous tasks (VM operations, email sending, periodic tasks) are distributed via Redis queues.

VariableDefault valueRequiredDescription
REDIS_DATABASE0YesDatabase index
REDIS_HOST"localhost"YesHostname of the Redis server
REDIS_IMAGE_TAG"latest"NoDocker image tag
REDIS_PASSWORD"password"YesPassword
REDIS_PORT6379YesPort
REDIS_USERNAME"username"YesUsername

Proxmox VE

Configures the connection to Proxmox VE, the hypervisor that manages the virtual machines. The credentials (user, token) must match the setup from the Proxmox VE Integration.

The network and VM settings (PVE_VMS_*) determine how newly created VMs are configured: which pool they are placed in, which network and subnet they use, and whether Cloud-Init is used for automatic configuration.

VariableDefault valueRequiredDescription
PVE_API_POLL_RATE5NoAPI polling interval (seconds)
PVE_CI_DRIVE"cephssd"NoStorage for Cloud-Init drive
PVE_CI_ENABLEDFalseNoEnable Cloud-Init on VM creation
PVE_FQDN"domain.intern"YesFQDN of the Proxmox server
PVE_HOSTNAME"proxmox:8006"YesHostname and port of the Proxmox server
PVE_TOKEN_NAME"my-token"YesName of the API token
PVE_TOKEN_VALUE"my-token-secret"YesSecret value of the API token
PVE_USER"user@pve"YesProxmox user
PVE_VERIFY_SSLTrueNoVerify SSL certificates
PVE_VM_SUBNET"0.0.0.0/16"YesSubnet for VMs
PVE_VMS_CIPASSWORD""NoCloud-Init password
PVE_VMS_CIUPGRADEFalseNoSystem upgrade on VM start
PVE_VMS_CIUSER"user"NoCloud-Init username
PVE_VMS_DNS_DOMAIN""NoDNS domain for VMs
PVE_VMS_DNS_SERVER"1.1.1.1"NoDNS server for VMs
PVE_VMS_EXCLUDED_IPS""NoIP addresses excluded from allocation. Comma-separated list of IPs, IP ranges (1-254), and CIDRs (/24). Default: 172.20.0.200, 172.20.0.1-172.20.0.254, 172.20.100.0/24
PVE_VMS_FULL_CLONE_DEFAULTFalseNoUse full clones instead of linked clones by default
PVE_VMS_GATEWAY""NoGateway for VM networks
PVE_VMS_NETWORK""YesNetwork configuration for VMs
PVE_VMS_POOL"OpenVLE-VMs"YesProxmox pool for managed VMs
PVE_VMS_SMBIOS_METADATATrueNoPass VM metadata to the guest OS via SMBIOS
PVE_VMS_SUBNET"/24"NoSubnet size

Email / SMTP

OpenVLE sends system emails for various occasions: event notifications and status messages for VM operations. A working SMTP server is required for production use. MAIL_MAX_AGE_WEEKS controls how long sent emails are retained in the database before being automatically deleted.

VariableDefault valueRequiredDescription
MAIL_MAX_AGE_WEEKS4NoRetention period for emails (weeks)
SMTP_FROM_MAIL"OpenVLE@example.com"YesSender address
SMTP_FROM_NAME"OpenVLE"YesSender display name
SMTP_HOST"localhost"YesHostname of the SMTP server
SMTP_METHOD"ssl"YesConnection method (SSL/TLS)
SMTP_PASSWORD"password"YesSMTP password
SMTP_PORT465YesSMTP port
SMTP_USERNAME"username"YesSMTP username

Events

Controls the automatic deployment and cleanup of events. The preparation time (PREP_TIME_DAYS) determines how many days before the start date or after the end date of an event the automatic processes (VM creation, VM deletion) are triggered. With EVENTS_START_REQUIRE_STUDENTS, you can specify whether an event should only be started if at least one participant is assigned.

VariableDefault valueRequiredDescription
EVENTS_END_PREP_TIME_DAYS7NoDays before event end for post-processing
EVENTS_START_PREP_TIME_DAYS7NoDays before event start for preparations
EVENTS_START_REQUIRE_STUDENTSFalseNoOnly start event when participants are assigned

Worker

The worker process executes asynchronous background tasks: VM operations (cloning, starting, stopping), email sending, and Guacamole connection management. The scheduler triggers periodic tasks, e.g., regular synchronization of Proxmox node information. WORKER_MAX_RETRY controls how many times a failed job is automatically retried before it is marked as permanently failed.

VariableDefault valueRequiredDescription
WORKER_MAX_RETRY5NoMax. retries for failed jobs
WORKER_PVE_PERIODIC_INTERVAL60NoInterval for periodic Proxmox jobs (seconds)

Apache Guacamole (optional)

Optional

These variables are only required when Apache Guacamole is used for remote desktop access. Without Guacamole, OpenVLE can still be used to manage VMs and VM templates — however, web-based remote desktop access will not be available.

OpenVLE connects to the Guacamole database using these credentials to automatically create, update, and delete connections. The CONNECTIONS_PREFIX allows distinguishing connections from different OpenVLE instances on the same Guacamole server.

VariableDefault valueRequiredDescription
GUACAMOLE_CONNECTIONS_PREFIX""NoPrefix for automatically created connections
GUACAMOLE_CONNECTIONS_PREFIX_EVENTSFalseNoAlso use prefix for event connections
GUACAMOLE_DB"mysql"Yes*Database type for Guacamole
GUACAMOLE_PASSWORD"OpenVLE"Yes*Password of the OpenVLE account
GUACAMOLE_URL"http://openvle-guacamole:8080"Yes*URL of the Guacamole server
GUACAMOLE_USER"OpenVLE"Yes*Username of the OpenVLE account in Guacamole

Connection parameters — General

These variables control the default values for automatically created Guacamole connections. They are used as the default configuration when creating new connections and can be customized per connection type (RDP, VNC, SSH).

VariableDefault valueDescription
GUACAMOLE_CONN_TIMEZONEEurope/BerlinTimezone for connections

Connection parameters — RDP

Default values for RDP connections (Remote Desktop Protocol). These settings control display quality, file transfer permissions, and keyboard layout for remote desktop access.

VariableDefault valueDescription
GUACAMOLE_RDP_COLOR_DEPTH32Color depth in bits (8, 16, 24, or 32)
GUACAMOLE_RDP_DISABLE_BITMAP_CACHINGFalseDisable bitmap caching
GUACAMOLE_RDP_DISABLE_DOWNLOADTruePrevent file download from the remote desktop
GUACAMOLE_RDP_DISABLE_GFXFalseDisable GFX pipeline
GUACAMOLE_RDP_DISABLE_OFFSCREEN_CACHINGFalseDisable offscreen caching
GUACAMOLE_RDP_DISABLE_UPLOADTruePrevent file upload to the remote desktop
GUACAMOLE_RDP_ENABLE_AUDIO_INPUTFalseEnable microphone redirection
GUACAMOLE_RDP_ENABLE_DESKTOP_COMPOSITIONFalseEnable desktop composition (Aero)
GUACAMOLE_RDP_ENABLE_DRIVEFalseEnable drive redirection (file transfer)
GUACAMOLE_RDP_ENABLE_FONT_SMOOTHINGFalseEnable font smoothing (ClearType)
GUACAMOLE_RDP_ENABLE_FULL_WINDOW_DRAGTrueShow window contents while dragging
GUACAMOLE_RDP_ENABLE_MENU_ANIMATIONSFalseEnable menu animations
GUACAMOLE_RDP_ENABLE_PRINTINGFalseEnable printer redirection
GUACAMOLE_RDP_ENABLE_THEMINGFalseEnable Windows theme effects
GUACAMOLE_RDP_ENABLE_WALLPAPERTrueShow desktop wallpaper
GUACAMOLE_RDP_IGNORE_CERTTrueDo not validate the RDP server certificate
GUACAMOLE_RDP_PRINTER_NAMEPrinter-NameName of the redirected printer
GUACAMOLE_RDP_RESIZE_METHODreconnectMethod for window resizing (reconnect or display-update)
GUACAMOLE_RDP_SECURITY""RDP security mode (empty = automatic, nla, tls, rdp, any)
GUACAMOLE_RDP_SERVER_LAYOUTde-de-qwertzKeyboard layout (e.g., de-de-qwertz, en-us-qwerty)
Display quality vs. performance

The options for wallpaper, desktop composition, font smoothing, theming, and menu animations improve visual quality but increase the required bandwidth. For connections with limited bandwidth, it is recommended to leave these options disabled.

File transfer

By default, upload and download are disabled (DISABLE_DOWNLOAD=True, DISABLE_UPLOAD=True). Only enable these options if file transfer between user and VM is desired. Additionally, ENABLE_DRIVE=True must be set.

Connection parameters — VNC

Default values for VNC connections (Virtual Network Computing).

VariableDefault valueDescription
GUACAMOLE_VNC_COLOR_DEPTH32Color depth in bits

Connection parameters — SSH / SFTP

Default values for SSH and SFTP connections. The SERVER_ALIVE_INTERVAL values control the keep-alive interval to prevent idle connections from timing out.

VariableDefault valueDescription
GUACAMOLE_SFTP_SERVER_ALIVE_INTERVAL30Keep-alive interval for SFTP connections (seconds)
GUACAMOLE_SSH_SERVER_ALIVE_INTERVAL30Keep-alive interval for SSH connections (seconds)

LDAP (optional)

Optional

These variables are only required if users should log in via an existing LDAP server (e.g., Active Directory, OpenLDAP). When LDAP is enabled, users can log in with their existing credentials without needing a separate OpenVLE password.

VariableDefault valueRequiredDescription
LDAP_ATTR_MAIL"mail"NoLDAP attribute for email
LDAP_ATTR_USER"uid"NoLDAP attribute for username
LDAP_DN_PEOPLE"ou=people,dc=org,dc=de"Yes*DN for people search
LDAP_ENABLEDFalseNoEnable LDAP authentication
LDAP_HOST"localhost"Yes*Hostname of the LDAP server
LDAP_PORT389Yes*Port
LDAP_VERIFY_SSLTrueNoVerify SSL certificates

OIDC (optional)

Optional

These variables are only required if users should log in via an OpenID Connect provider (e.g., Keycloak, Azure AD, Google). OIDC enables Single Sign-On (SSO) — users log in through the external identity provider and are automatically registered in OpenVLE if needed (OIDC_ENROLL_USERS).

VariableDefault valueRequiredDescription
OIDC_ALLOWED_REDIRECT_URLS[""]NoAllowed redirect URLs
OIDC_ATTR_EMAIL"email"NoAttribute for email
OIDC_ATTR_NAME"name"NoAttribute for display name
OIDC_ATTR_USERNAME"sub"NoAttribute for username
OIDC_CLIENT_ID""Yes*Client ID
OIDC_CLIENT_SECRET""Yes*Client secret
OIDC_ENABLEDFalseNoEnable OIDC authentication
OIDC_ENROLL_USERSTrueNoAutomatically register users on first login
OIDC_SCOPES"openid email profile"NoOIDC scopes
OIDC_URL_METADATA""Yes*URL of the OIDC metadata document

Moodle (optional)

Optional

These variables are only required when OpenVLE should be connected to a Moodle instance. When not in use, all Moodle-related elements are hidden in the user interface. The integration is disabled by default.

VariableDefault valueRequiredDescription
MOODLE_COURSE_VISIBLE"True"NoVisibility of duplicated Moodle courses
MOODLE_DELETE_COURSE_ON_EVENT_DELETE"False"NoDelete Moodle course when the event is deleted
MOODLE_ENABLEDFalseNoEnable Moodle integration
MOODLE_SYNC_TIMEOUT"10"NoTimeout for synchronization tasks (seconds)
MOODLE_TIMEOUT"30"NoTimeout for API requests (seconds)
MOODLE_TOKEN""Yes*Web Services API Token
MOODLE_URL""Yes*URL of the Moodle instance (without trailing slash)
MOODLE_USER_AUTH"manual"NoAuthentication method for newly created Moodle users (e.g., ldap, oauth2, manual)
MOODLE_USER_MATCH_FIELD"email"NoField for matching OpenVLE and Moodle users (email or username)
MOODLE_VERIFY_SSLTrueNoVerify SSL certificate

Sentry (optional)

Optional

These variables are only required when Sentry should be enabled for error monitoring and performance monitoring. Sentry automatically captures exceptions, traces, and performance profiles from the backend and worker — in both development and production environments. OpenVLE does not provide a public Sentry endpoint. You can enter the DSN values of your own Sentry instance (on-premise or SaaS) here.

VariableDefault valueRequiredDescription
SENTRY_BACKEND_DSN""Yes*DSN for backend project
SENTRY_BACKEND_ENABLE_TRACINGTrueNoEnable tracing
SENTRY_BACKEND_ENABLEDFalseNoEnable Sentry for backend
SENTRY_BACKEND_PROFILES_SAMPLE_RATE1.0NoSample rate for profiles
SENTRY_BACKEND_TRACES_SAMPLE_RATE1.0NoSample rate for traces
SENTRY_ENV"dev"NoEnvironment (e.g., dev, prod)
SENTRY_WORKER_DSN""Yes*DSN for worker project
SENTRY_WORKER_ENABLE_TRACINGTrueNoEnable tracing
SENTRY_WORKER_ENABLEDFalseNoEnable Sentry for worker
SENTRY_WORKER_PROFILES_SAMPLE_RATE1.0NoSample rate for profiles
SENTRY_WORKER_TRACES_SAMPLE_RATE1.0NoSample rate for traces

Frontend

The frontend configuration is done via frontend.env. Only VITE_BACKEND_URL is required — it must point to the URL of the backend where the frontend sends API requests (e.g., https://openvle.example.com/v1). All other variables relate to the optional Sentry integration for client-side error tracking in the browser.

VariableDefault valueRequiredDescription
VITE_BACKEND_URL'http://localhost:8000/v1'YesBackend API URL
VITE_SENTRY_DSN''NoSentry DSN
VITE_SENTRY_ENABLED'false'NoEnable Sentry
VITE_SENTRY_ENV'dev'NoSentry environment
VITE_SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE1.0NoSample rate for error replays
VITE_SENTRY_REPLAYS_SESSION_SAMPLE_RATE1.0NoSample rate for session replays
VITE_SENTRY_REPORT_ERROR_ENABLED'false'NoEnable error reporting
VITE_SENTRY_REPORT_USER_ENABLED'false'NoEnable user reporting
VITE_SENTRY_TRACE_PROPAGATION_TARGETS['localhost']NoTargets for trace propagation
VITE_SENTRY_TRACES_SAMPLE_RATE1.0NoSample rate for traces
VITE_SENTRY_TRANSMIT_USER_DETAILS'false'NoTransmit detailed user information

Troubleshooting

ProblemSolution
Backend does not start after .env changeMake sure all values are enclosed in quotation marks. Missing quotes cause parsing errors.
Database connection failsCheck whether MARIADB_HOST, MARIADB_PORT, MARIADB_USER, and MARIADB_PASSWORD are set correctly and the database container is running.
CORS error in browserMake sure CORS_ORIGINS contains the URL of your frontend (e.g., ["https://openvle.example.com"]).
Variable change has no effectContainers must be restarted after .env changes: docker compose down && docker compose up -d.