Skip to main content

Networking & Docker

All OpenVLE services run in Docker containers and communicate via an internal Docker network. Only a few ports are published externally. A reverse proxy in front is recommended for production use but is not strictly required.

Docker Network

The Docker Compose stack automatically creates an internal network (openvle-internal). All containers are connected via this network and can reach each other using their service names (e.g., backend, mariadb, redis).

DNS Resolution

Docker Compose provides internal DNS resolution: containers can address other containers using the service name as hostname. This is why the environment variables use, for example, MARIADB_HOST = "db" instead of an IP address.

Exposed Ports

In the default docker-compose.yml, only two ports are published externally:

ServiceContainer PortHost PortPurpose
frontend8080Web interface (Vue.js/Nginx)
backend808000REST API (FastAPI)

Both services must be reachable from the end user's browser: the frontend serves the web interface, and the browser communicates directly with the backend at runtime (API requests).

All other services (MariaDB, MongoDB, Redis, Worker, Scheduler) do not publish any ports and are only accessible internally.

Reverse Proxy (recommended)

When using a Reverse Proxy, the port publications should be restricted to 127.0.0.1, since external access then goes through the proxy:

ports:
- 127.0.0.1:80:80
- 127.0.0.1:8000:8000

Communication Paths

External Access

With Reverse Proxy (recommended):

Browser → Reverse Proxy → Frontend (Port 80)
Browser → Reverse Proxy → Backend (Port 8000)

Without Reverse Proxy:

Browser → Frontend (Port 80)
Browser → Backend (Port 8000)

A reverse proxy is optional but recommended for production use -- it handles SSL termination, routing, and optionally load balancing. See Reverse Proxy for setup instructions.

Internal Communication

FromToPurpose
backendmariadbReading/writing core entities
backendmongodbWriting activities and logs
backendredisEnqueuing background tasks
workermariadbReading/writing during task execution
workerredisFetching jobs from the queue
schedulermariadbFetching jobs from the database
schedulerredisEnqueuing periodic tasks

External Systems

OpenVLE communicates with the following external systems:

SystemDirectionProtocolPurpose
Proxmox VEBackend/Worker → ProxmoxHTTPS (8006/tcp)VM management via Proxmox API
SMTP ServerBackend/Worker → SMTPSSL/TLS (465/tcp)Email delivery
Apache Guacamole (optional, recommended)Backend/Worker → GuacamoleHTTPS (443/tcp)Connection management via Guacamole API
Moodle (optional)Backend/Worker → MoodleHTTPS (443/tcp)Course and participant management via Moodle Web Services API
LDAP Server (optional)Backend/Worker → LDAPLDAP(S) (389/636)User authentication
OIDC Provider (optional)Backend → OIDCHTTPS (443/tcp)Single Sign-On
Firewall Rules

The OpenVLE server must be able to establish outbound connections to the external systems listed above. Make sure the corresponding ports are allowed in the firewall.