Running it
The rule that overrides every other
Same hypervisor, same Active Directory domain, same backup, same identity provider: the day that perimeter falls, Kastell falls with it.
A separate host, separate DNS, a separate alerting path. It is the one operating constraint that is not negotiable.
Backups
No backup mechanism is built into the product. The root console says so rather than showing a reassuring state with nothing behind it.
Three volumes to back up: the database, the object store, the recordings.
docker compose -f docker/compose.yaml --env-file .env exec -T postgres \
pg_dump -U kastell --format=custom kastell > kastell-$(date +%F).dump
Test it quarterly. A restored database must pass the root console's integrity check — otherwise the backup was not one.
Monitoring
GET /api/etat
A public probe, no account needed, deliberately poor: it says whether the service works, never who is using it.
A status page served by the service it monitors says nothing on the day that service goes down. This probe is what a page hosted elsewhere queries.
GET /api/administration/metriques
The same figures in Prometheus format, root-only: an instance's volumetry says how many crises are open in it.
The root console also offers a diagnostic that actually queries every component — database, storage, media, antivirus, real-time — with its latency. The antivirus probe presents the EICAR test file and requires the verdict "infected": a scanner that answers "clean" to everything is more dangerous than no scanner, because it reassures.
Upgrading
git pull
KASTELL_REVISION=$(git rev-parse HEAD) \
docker compose -f docker/compose.yaml --env-file .env up -d --build
docker compose -f docker/compose.yaml --env-file .env logs app | head -30
Migrations run at startup. The application only declares itself ready once migration has succeeded.
The root account
It administers the instance and does not read crisis content. Crossing from one register to the other exists — an operator must be able to help a customer whose incident log is unreadable after a restore — but it is a break-glass act: justified, capped at eight hours, traced, and visible to the organisation concerned.
Grant the right to a second account as soon as you can. A root who loses their phone locks the operator out, and the product refuses to remove the last one.
If you modify Kastell
The AGPL, in its section 13, says that running a modified version over a network counts as distribution: your remote users are entitled to that version's source.
KASTELL_SOURCE_URL=https://git.example.org/our-kastell
An internal repository your users can reach is enough; it need not be public. See Licence.
What is on you, and the product will not do
- Keeping the preparedness dossier current. The indicator measures it; nobody will fill it in for you.
- Printing the paper export. It is what remains when everything is encrypted.
- Getting everyone to open the tool at least once. A tool discovered on the day of the crisis does not get used.