Purpose: A plain-english runbook of what to do and when. No jargon, just actions.
Last updated: 15 May 2026
Applies to: DSPT / DTAC compliance maintenance
| Tool | URL | What it's for |
|---|---|---|
| Wiki.js | https://wiki.veripath.co.uk | Knowledge base |
| Keycloak admin | https://auth.veripath.co.uk/admin/veripath/console/ | User accounts and SSO |
| DefectDojo | https://security.veripath.co.uk | Security issues tracker |
| Uptime Kuma | http://YOUR-SERVER-IP:3001 | Service uptime monitoring |
| Forgejo | https://git.veripath.co.uk | Git repositories |
Check your backups are running:
/usr/local/bin/check-backup-freshness.sh
This runs automatically at 07:00 every day via cron. If something's wrong it logs to /var/log/wiki-backup-health.log. You only need to run it manually if you suspect an issue.
What to look for: The output says "ALL BACKUPS FRESH" at the end.
Always run this one command — it takes 5 seconds and creates a safety net:
/usr/local/bin/preflight-backup.sh
This saves a timestamped copy of the Wiki.js database to /backups/wiki/pre_work/. If something goes wrong, your data is safe.
If Docker is restarted (e.g. after OS updates or a server reboot), check everything came back up:
/usr/local/bin/post-restart-verify.sh
This checks:
Run it once. If all checks pass, you're good.
DefectDojo tracks security issues — think of it as a to-do list for security.
Verified = fixed, no action neededtail -20 /var/log/wiki-backup-health.log
Look for the most recent entry. If it says ALL BACKUPS FRESH you're fine. If you see WARNING or CRITICAL, investigate.
Run through the procedure at https://wiki.veripath.co.uk/infrastructure/backups/quarterly-restore-drill
This creates a test database, restores the latest backup into it, checks the page count matches, then deletes the test database.
Why do this? An untested backup is not a backup. This proves yours actually work.
After completing the drill, log the result in the table on that page.
┌─────────────────────────────────────────────────────┐
│ VPS (Ubuntu / Docker) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌───────────────────┐ │
│ │ nginx │ │ Keycloak │ │ PostgreSQL (shared)│ │
│ │(proxies) │ │ (SSO) │ │ │ │
│ └──────────┘ └──────────┘ │ wiki──┐ │ │
│ ┌──────────┐ ┌──────────┐ │ gp_ ├ apps DB │ │
│ │ Wiki.js │ │ Forgejo │ │ booking │ │
│ │ (pages) │ │ (git) │ └───────────────────┘ │
│ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ Defect │ │ Uptime │ │
│ │ Dojo │ │ Kuma │ │
│ └──────────┘ └──────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ /backups/wiki/ │ │
│ │ Local File System (live sync) │ │
│ │ + _daily/ archives (30 day retain) │ │
│ └──────────────────────────────────────┘ │
│ ┌──────────────────────────────────────┐ │
│ │ /root/backups/ │ │
│ │ Full DB dumps (daily 03:00) │ │
│ │ 30 day retention │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
| What | Where | When | How long kept |
|---|---|---|---|
| Wiki.js pages (as markdown) | /backups/wiki/ |
Every page edit (real-time) | Live files: forever |
| Wiki.js daily archive | /backups/wiki/_daily/ |
Daily (auto) | 30 days |
| Full database dump | /root/backups/ |
Daily at 03:00 | 30 days |
| All Docker volumes | /root/backups/ |
Daily at 03:00 | 30 days |
| Issue | Contact |
|---|---|
| Wiki.js not loading | Check service status first, then infrastructure team |
| Can't log in | Check Keycloak at https://auth.veripath.co.uk |
| Backup alert | Check /var/log/wiki-backup-health.log and DefectDojo |
| Anything else | Infrastructure team |
gp_booking_app container as a Django sub-application — it's not a separate service.