Server requirements
Hardware
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores | 8+ cores |
| RAM | 8 GB | 16+ GB |
| Disk | 40 GB SSD | 100+ GB SSD |
| Network | 100 Mbit/s | 1 Gbit/s |
Plan for the peak
A 5000-student exam generates traffic spikes. Size the server for the biggest simultaneous exam you expect, not for the daily average.
Software
| Software | Version | Purpose |
|---|---|---|
| Ubuntu | 22.04 or 24.04 | Operating system |
| Docker | 24.0+ | Container runtime |
| Docker Compose | v2+ | Container orchestration |
| Ansible | 2.15+ | Deployment automation |
| Nginx | Latest | Reverse proxy (TLS termination) |
Network (open ports)
| Port | Service | External access |
|---|---|---|
| 443 | HTTPS (Nginx) | Yes |
| 8080 | Keycloak | Optional (admin console) |
| 9000 | Django (Gunicorn) | No (internal) |
| 9010 | Nginx proxy | No (internal) |
| 5432 | PostgreSQL | No (internal) |
| 6379 | Redis | No (internal) |
| 6432 | Connection pooler | No (internal) |
Keep internal services internal
Only 443 (HTTPS) and optionally 8080 (Keycloak admin) should be reachable
from the internet. All other services stay on the internal Docker network.
Example sizing
A single server can host the entire platform for most institutes. Separate instances are only needed when you want to isolate Keycloak or scale the database across multiple machines.