openCBT

A school entirely online

The full-cloud deployment, for a school with no hall server.

full-cloud is the whole application on one server on the internet: papers are written, sat and marked there, and there is nothing to sync. It suits a small school — under about a hundred students sitting at once — that would rather not keep a machine in a hall.

It is a deliberate trade. An exam sat over the internet depends on the internet for its whole duration: a school with unreliable power or bandwidth should run the onsite deployment instead, which is what the hall design exists for.

Setting one up

Its own server, not shared with cloud companions: this one sits exams.

apt update && apt install -y docker.io docker-compose-v2
# copy deploy/ across
cd deploy
docker login ghcr.io -u YOUR-GITHUB-USERNAME
cp full-cloud.env.example .env

Fill in POSTGRES_PASSWORD, the same password inside DATABASE_URL, and SUPER_ADMIN_PASSWORD — unlike a cloud companion, this deployment seeds its own first account, because no school server is going to send it one.

Put the school's domain and your email in Caddyfile.full-cloud, point the domain at the server, then:

docker compose -f compose.full-cloud.yml up -d

Caddy is in this stack rather than shared, since there is only one school on it. It gets the certificate itself.

What differs from a school's own server

Hall serverFull cloud
Students sign inyesyes
Addressplain HTTP on the LANHTTPS on a domain
Live hall screensover the LANover the internet
Cloud Sync pagepresenthidden: nothing to sync
Backupson demand from Settingson demand, plus nightly

SYNC_KEY and CLOUD_URL are not set here. The Cloud Sync page does not appear, and the sync endpoint answers as if it did not exist.

What to watch

The live connection. Each machine sitting a paper keeps a connection for the clock and the invigilator's commands. Caddy passes those through without configuration, but a flaky link shows up as students dropping in and out of the Hall page.

Sizing. A hundred students writing at once is light work; the cost is in uploads if your questions carry pictures. A CX22 is a sensible starting point, with the disk sized for /data.

Backups leave the building. Nightly on the server, downloadable from Settings, and worth pulling off the VPS regularly — the school has no hall machine holding a second copy of anything.

On this page