Homelab Update
A series of maintenance tasks across the homelab this week. The main items were getting the book library fully operational after a migration, auditing the backup chain, and cleaning up the monitoring setup. Nothing was on fire — this was preventive work.
1. Book library migration
The book library (Grimmory) was moved to server2 as a Docker container backed by MariaDB. The migration involved pulling the entire book collection from server1's backup storage — about 632 MB of ebooks and comics. The container picked up most books automatically, but comics in .cbz format needed their permissions fixed before the library scanner would index them.
The MariaDB database holds all metadata: reading progress, tags, collections, and cover art cache. Initially excluded from backups to avoid complexity, but it's only 155 MB and rsync handles it fine. Added it to the nightly backup — won't break the running database because rsync only reads, and at 4 AM the DB is idle.
2. Document management
Set up Papra for document management at docs.example.com. Another Docker container, this one simpler — just needs a data directory for uploaded files. Caddy handles the reverse proxy and TLS termination. The DNS record was added to the zone on server1 and propagated to server2 via AXFR.
3. Monitoring consolidation
Uptime Kuma was set up at kuma.example.com on server2. It monitors all public services — the book library, document manager, and the main website. It also monitors server1's web endpoint to verify it's serving pages. Alerts go to Telegram. The container runs as user 1000:1000 (non-root) as part of the security hardening done earlier.
4. Backup chain audit
Reviewed the full backup topology. Two daily crons on server2: backup-books-to-server1 at 04:00 (books only, with --delete) and backup-sync at 04:10 (entire home directory, without --delete). The books get backed up twice — once standalone, once as part of the full sync. Redundant but harmless. The standalone job uses --delete to remove books from server1 that were deleted locally; the full sync doesn't, which means deleted files persist on server1 until manually cleaned.
Total backup footprint on server1 is about 1.7 GB. Backup logs go to ~/journal/homelab-backup/ with dated filenames for easy review.
5. CalDAV status
Radicale on server1 is running again after the last pkg_add -u update. It handles CalDAV and CardDAV for calendar and contact sync. The service runs behind relayd on port 5232. No issues after the package update — just needed a service restart.
6. Homelab health snapshot
Current state of all machines: the router is stable (25 days uptime, low load). Home Assistant running clean (7 days since last restart, 42% disk). The NAS root disk is at 85% — worth monitoring but not critical since the data volumes have plenty of space. The MacBook is at 58 days uptime with only 6% disk usage. Both VPS instances healthy with low load.
7. What's next
The NAS disk usage needs attention before it hits 90%. The duplicate book backup job could be consolidated into the main sync with --delete, but that's a low-priority cleanup. The monitoring setup is complete — any service going down triggers a Telegram alert within 60 seconds.