-
My laptop
I edit the repository from here or from the control node.
-
Forgejo, the origin
Where the work happens: the repository's origin, with CI. It has its own unit.
-
Private GitHub repository
Where the documentation is pushed, outside the house.
-
My password manager
Holds a copy of the backups' encryption key. Without it nothing can be restored, and it's off the server.
-
Me
Who decides what's in, what's out and what's missing.
-
Element
The incidents room: only failures arrive.
-
The backup disk
A 4.5 TB disk just for this. If it isn't mounted, the backup server doesn't start: it never writes to the system disk.
-
post-commit hook
Versioned in the repository itself: every commit is pushed to the backup on its own, in the background.
-
Backup repository
A bare repository in a tiny container, on a different disk from the working one.
- Git
- Linux (Debian, Alpine, Arch)
-
Git-only user
The backup user can only push and pull: not even a shell. With its own key.
- Linux / SSH hardening
- Linux (Debian, Alpine, Arch)
-
Documentation backup
The notes vault is pushed every 10 minutes. It has its own unit.
-
Rollback script
Before a delicate change, the state is saved along with a script that puts everything back.
- Linux (Debian, Alpine, Arch)
-
Scheduled rollback
If the change locks me out, it undoes itself after 5 minutes. If all goes well, I cancel the timer.
- Linux (Debian, Alpine, Arch)
-
Dated copies
Ansible leaves a dated copy of every file it replaces.
-
Snapshot
A frozen picture of the disk before a change or a backup, so a consistent state gets copied. Deleted afterwards.
-
Proxmox Backup Server
In its own container. Every night it gets a copy of every container, incremental and deduplicated: only what changed travels.
-
Encrypted before leaving
The main server encrypts them before sending. Whoever took the backup disk couldn't read anything.
- Proxmox Backup Server
- Linux / SSH hardening
-
Who copies doesn't delete
The main server gets in with a permission that allows backing up and restoring, not deleting. Only the backup server prunes: 7 daily, 4 weekly and 6 monthly.
- Proxmox Backup Server
- Linux / SSH hardening
-
The game worlds
They live outside the game panel's container, so they're not in its copy. They have their own, at 3:30.
-
Weekly verification
Every Sunday, the backup server rereads every copy and checks it's whole.
-
Date of the last commit
The simplest way to tell whether a Git backup is still alive.
-
Restoring for real
The only proof a backup works, and it's automatic: every Sunday a group of containers is restored on the side and compared file by file. Each container gets its turn once a month.
- Proxmox VE
- Proxmox Backup Server
-
Failure alerts
If a backup fails, Proxmox posts to the incidents room. If all goes well, silence.