cmc/cleberg.net
My personal web garden & blog.
clone: git clone https://gitbay.org/cmc/cleberg.net.git
main: content/blog/2026-06-26-homelab-maintenance.org · raw
1#+date: [2026-06-26 Fri 23:01:11]
2#+title: I Don't Maintain My Homelab
3#+description: I don't maintain my homelab... it maintains itself.
4#+slug: homelab-maintenance
5#+filetags: :self-hosting:
6
7It's true. I *don't* maintain my homelab... it maintains itself.
8
9Have I reached nirvana? Is this the ultimate goal of homelabbers? It seems
10that I've somehow automated myself out of a job (hobby?) by building a resilient
11homelab.
12
13Let's figure out where it all went "wrong".
14
15* Infrastructure
16** Server
17I have used a few different servers over the years, but have since consolidated
18all of my services onto a single server ([[https://cleberg.net/blog/server-build.html][build guide here]]), reducing the
19complexity of my environment.
20
21Because of the single-server setup, maintenance is down 75% (from four
22servers to one). Yes, clusters and hypervisors and hybrid cloud solutions are
23shiny and fancy and popular, but I just don't care for it. Instead, I have a
24single metal box I can pick up with my hands sitting in my basement.
25
26I /do/ have one more "server": a Raspberry Pi 4, but it uses Home Assistant OS,
27updates itself, and requires literally *zero* maintenance. Is that really a
28server? I guess, by technical definition. But it certainly doesn't feel like it;
29it feels like I've turned a potential server device into a self-sustaining IoT
30device instead.
31
32** Network
33Aside from the server itself, I have a mini rack of UniFi gear (server is in the
34same rack). A UniFi Dream Machine Pro, a switch, and a couple of access points
35(APs) constitute my personal data center sitting in my basement.
36
37Again, it really just maintains itself. UniFi supports automatic and scheduled
38updates, allowing you to disconnect from any manual maintenance of the hardware.
39UniFi truly is a "set it and forget it" platform.
40
41* Software
42
43There's a single crontab line on my server, which runs all updates for my Docker
44services on a weekly basis.
45
46#+begin_src
470 0 * * 0 docker-update
48#+end_src
49
50Which is an alias for:
51
52#+begin_src sh
53for d in ~/docker/*/; do (cd "$d" && sudo docker compose pull && sudo docker compose up -d); done
54#+end_src
55
56I do run a few crontab schedules via the =root= user as well, to account for
57permission issues. These jobs are really just for backups, to be honest. I've
58never required a backup, but it's good to be safe.
59
60#+begin_src
61# Generate a daily system report
620 8 * * * /home/cmc/daily_sys_report.sh
63
64# Backup
65SHELL=/bin/bash
66PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
67
68## App-aware database dumps
6945 1 * * * mkdir -p /tank/cloud/server/backups/immich && sudo docker exec -t immich_postgres pg_dumpall -U postgres > /tank/cloud/server/backups/immich/immich-postgres-$(date +\%F).sql
7050 1 * * * mkdir -p /tank/cloud/server/backups/piped && sudo docker exec -t piped-postgres pg_dumpall -U piped > /tank/cloud/server/backups/piped/piped-postgres-$(date +\%F).sql
71
72## Backup files to ZFS pool
730 2 * * * rsync -aHAX --delete /var/lib/plexmediaserver/ /tank/cloud/plexmediaserver/
745 2 * * * rsync -aHAX --delete /var/www/ /tank/cloud/server/web_server/
7510 2 * * * rsync -aHAX --delete /etc/nginx/ /tank/cloud/server/nginx/
7615 2 * * * rsync -aHAX --delete --exclude='**/postgres/' --exclude='**/postgresql/' --exclude='**/mysql/' --exclude='**/mariadb/' --exclude='**/redis/' --exclude='**/valkey/' --exclude='**/database/' --exclude='**/cache/' --exclude='**/tmp/' --exclude='**/logs/' /home/cmc/docker/ /tank/cloud/server/docker/
7720 2 * * * rsync -aHAX --delete /home/cmc/.ssh/ /tank/cloud/server/ssh/
78#+end_src
79
80Aside from this, the only other required updates are running =apt update= and
81potentially restarting. This requires about 60 seconds of time whenever I want
82to do it.
83
84#+begin_src sh
85sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
86#+end_src
87
88* The Outcome
89
90So, what's the end result? I've approximated it somewhere around /15 minutes of
91maintenance per month/, barring an emergency.
92
93If that's normal to you, congrats - you've peaked in life. However, that's
94*absolutely absurd* to me. I used to spend days on end building, maintaining, and
95debugging various aspects of my servers, databases, apps, etc.
96
97You know what's even crazier? If I don't have 15 minutes in a month to =ssh= into
98my server and update things, it literally does not affect anything. I could
99probably go 6 months (maybe more?) without touching it and it wouldn't break.
100
101/(This is not a challenge, please don't break my server.)/
102
103What a great situation to be in - especially for someone who's become as busy in
104their career as I have. I feel like I've struck a fantastic balance between
105privacy, security, and convenience.