What I'm Running in My Homelab in 2026
In my last homelab tour, I focused on the hardware.
This time, I wanted to answer the question a lot of people asked after that video: what am I actually running on all of this infrastructure?
So this is the software side of the lab in 2026. The services, the applications, and the systems that make the hardware useful.
Some of this is practical. Some of it is for learning. Some of it replaces tools I would otherwise pay for. And some of it is simply because I enjoy self-hosting.
The basic shape of the lab
At a high level, I am running three main layers:
It is a fairly broad setup, but it has settled into a structure that makes sense for how I use the lab.
At home, I keep most of my internal services close to the data. In practice, that means many applications now live directly on TrueNAS with Docker Compose.
For public-facing services and the workloads I want to run in a more orchestrated way, I place those in Kubernetes in my co-location environment.
That split has worked well for me:
- Home services: Docker on TrueNAS
- Public services: Kubernetes in co-location
It keeps the home side simpler while still giving me room to run more distributed workloads where it makes sense and to keep my Kubernetes skills sharp.
Network first
Everything starts with the network.
I simplified the network quite a bit this year. I used to have more VLANS which added more complexity. I scaled them back a bit to a network that is easier to maintain and easier to reason about.
My main VLANs are:
- Main
- IoT
- Cameras
- Management, depending on how you count it
My trusted devices live on main. Laptops, workstations, phones, Apple TVs, HomePods,and my NAS.
I put my HomePods and Apple TVs on this network because it’s much easier (and safer I believe) than trying to create dozens of firewall rules from Main to IoT that I could mess up.
IoT contains the devices I do not fully trust or do not want sharing the same space as my main devices. Lights, thermostats, and similar devices go there.
Cameras are on their own VLAN, which makes sense both from a security standpoint and from a traffic standpoint.
One thing I have to tell myself over and over is that secure does not always mean complicated. A simpler network that I understand is way better than a more elaborate design that becomes difficult to maintain.
Co-location
I also have a few servers running in a co-location. These are 1u servers that I use to run at home.
I moved them there because some of my public-facing services outgrew being hosted at home. After enough traffic hit my documentation site, it became clear that I should move that kind of workload out of the house from both a security and reliability standpoint.
So now I have a few machines there, still on hardware I own, still running services I manage, just with better power, better network, and more separation from my homelab.
There is also a VPN between home and co-location, which makes management and backups easier.
That setup has been a good middle ground between running everything at home and moving everything into the cloud.
Of course, I am still using Proxmox
I am still running Proxmox, and I do not expect that to change anytime soon. It’s great and does everything I want, except native OCI containers (but don’t get me started on that)
At home I have a three-node cluster, and I have another three-node cluster in my co-location. I am not clustering Proxmox because I want Proxmox itself to be the HA, I am clustering it because I want:
- one pane of glass
- easier migrations
- easier backups
That is really all I need. One day if I get a faster network or just want to play with Ceph I will reconsider.
I am not doing HA VMs or HA LXCs in the Proxmox sense. I would rather push high availability down into the service layer itself.
So instead making a VM is highly available, I would rather run three Postgres nodes on LXC, or three Kubernetes control-plane nodes, or redundant DNS, and let the application or platform handle failure the way it was designed to.
This approach better aligns to the way I build and manage systems outside of my homelab.
TrueNAS became more than storage
One of the bigger changes this year is that TrueNAS stopped being just storage and became more like my home production box. “Home Prod” is what I have been calling it.
It is still where my data lives. ZFS, datasets, shares, snapshots, and replication are still at the core of the system.
But now it is also where many of my applications live.
Once I found out I could use Docker Compose on TrueNAS, I went all in and migrated all of my apps to this pattern. Now that I run my apps on TrueNAS, I can keep app data local, manage it with ZFS, snapshot it, replicate it, and roll it back the same way I do with the rest of my data.
That has a few advantages:
- app data stays local to the machine
- I am not moving everything over NFS and all of the headaches that come along with that
- snapshots are easy
- replication is easy
- my operational model stays consistent
It is one of the changes that made my NAS feel much more useful.
How I think about Docker vs Kubernetes
I get asked this a lot.
For me, the answer is fairly simple:
- Docker Compose on TrueNAS for home services
- Kubernetes for public services and orchestrated workloads
That is not because Kubernetes is better at everything. It is because not everything benefits from Kubernetes.
A lot of services at home just need to run reliably, store some data, sit behind a reverse proxy, and be easy to back up. Docker Compose is well suited for that.
Kubernetes still makes sense for the workloads where I want a more cloud-native setup, a better GitOps flow, or more flexibility around placement and scaling.
You can absolutely run everything in Kubernetes if you want to. I just do not think that automatically improves the outcome.
The services I use most often
There are a few services that I use.
Homepage
I still use Homepage as my main dashboard.
At this point it is less about live status and more about organization. I like that it is YAML driven, simple, and easy to manage as configuration.
It has effectively become my launch point for the rest of the services in my homelab.
Since I showed Homepage in the video, here is a redacted version of the config I am using. I keep URLs, API keys, and host-specific values in environment variables so I can reuse the same config without hardcoding secrets.
settings.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
---
title: Techno Tim Homepage
background:
image: https://cdnb.artstation.com/p/assets/images/images/006/897/659/large/mikael-gustafsson-wallpaper-mikael-gustafsson.jpg
blur: md # sm, md, xl... see https://tailwindcss.com/docs/backdrop-blur
saturate: 100 # 0, 50, 100... see https://tailwindcss.com/docs/backdrop-saturate
brightness: 50 # 0, 50, 75... see https://tailwindcss.com/docs/backdrop-brightness
opacity: 100 # 0-100
theme: dark
color: slate
useEqualHeights: true
disableCollapse: true
target: _blank
layout:
Hypervisor:
header: true
style: row
columns: 6
DNS:
header: true
style: row
columns: 6
Network:
header: true
style: row
columns: 6
Containers:
header: true
style: row
columns: 6
Monitoring:
header: true
style: row
columns: 6
Remote Access:
header: true
style: row
columns: 7
Storage:
header: true
style: row
columns: 6
Media:
header: true
style: row
columns: 6
Energy:
header: true
style: row
columns: 6
Home Automation:
header: true
style: row
columns: 6
AI:
header: true
style: row
columns: 6
Documents:
header: true
style: row
columns: 6
Tools:
header: true
style: row
columns: 6
Database:
header: true
style: row
columns: 6
Other:
header: true
style: row
columns: 6
services.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
---
- Hypervisor:
- Proxmox:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PROXMOX_URL}}"
description: pve1
- Proxmox:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PROXMOX_URL}}"
description: pve2
- Proxmox:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PROXMOX_URL}}"
description: pve3
- Proxmox:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PROXMOX_MPLS_URL}}"
description: pve1-mpls
- Proxmox:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PROXMOX_MPLS_URL}}"
description: pve2-mpls
- Proxmox:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PROXMOX_MPLS_URL}}"
description: pve3-mpls
- PBS:
icon: proxmox.svg
href: "{{HOMEPAGE_VAR_PBS_URL}}"
description: backup server
- DNS:
- pihole1:
icon: pi-hole.svg
href: "{{HOMEPAGE_VAR_PIHOLE_URL_1}}"
description: pihole1
- pihole2:
icon: pi-hole.svg
href: "{{HOMEPAGE_VAR_PIHOLE_URL_2}}"
description: pihole2
- pihole3:
icon: pi-hole.svg
href: "{{HOMEPAGE_VAR_PIHOLE_URL_3}}"
description: pihole3
- dns01:
icon: pi-hole.svg
href: "{{HOMEPAGE_VAR_PIHOLE_URL_4}}"
description: dns01
- dns02:
icon: pi-hole.svg
href: "{{HOMEPAGE_VAR_PIHOLE_URL_5}}"
description: dns02
- Network:
- UniFi:
icon: unifi-controller.png
href: "{{HOMEPAGE_VAR_UNIFI_NETWORK_URL}}"
description: network
- Traefik:
icon: traefik-proxy.svg
href: "{{HOMEPAGE_VAR_TRAEFIK_URL}}"
description: reverse proxy
- Uptime Kuma:
icon: uptime-kuma.svg
href: "{{HOMEPAGE_VAR_UPTIME_KUMA_URL}}"
description: internal
- Uptime Robot:
icon: uptimerobot.svg
href: "{{HOMEPAGE_VAR_UPTIME_ROBOT_URL}}"
description: external
- OpenSpeedTest:
icon: openspeedtest.svg
href: "{{HOMEPAGE_VAR_OPENSPEEDTEST_URL}}"
description: speed test
- Containers:
- Rancher:
icon: rancher.svg
href: "{{HOMEPAGE_VAR_RANCHER_URL}}"
description: k8s
- Longhorn:
icon: longhorn.svg
href: "{{HOMEPAGE_VAR_LONGHORN_URL}}"
description: k8s storage
- Dozzle:
icon: dozzle.svg
href: "{{HOMEPAGE_VAR_DOZZLE_URL}}"
description: container logs
- Monitoring:
- Grafana:
icon: grafana.svg
href: "{{HOMEPAGE_VAR_GRAFANA_URL}}"
description: dashboards
- Prometheus:
icon: prometheus.svg
href: "{{HOMEPAGE_VAR_PROMETHEUS_URL}}"
description: metrics
- Grafana Alloy:
icon: alloy.svg
href: "{{HOMEPAGE_VAR_ALLOY_URL}}"
description: log collector
- Scrutiny:
icon: scrutiny.svg
href: "{{HOMEPAGE_VAR_SCRUTINY_URL}}"
description: drive health
- Loki:
icon: loki.svg
href: "{{HOMEPAGE_VAR_LOKI_EXPLORE_URL}}"
description: log explorer
- Remote Access:
- PiKVM:
icon: pikvm.svg
href: "{{HOMEPAGE_VAR_PIKVM_URL}}"
description: pikvm
- kvm-1:
icon: jetkvm.svg
href: "{{HOMEPAGE_VAR_KVM_1_URL}}"
description: jetkvm
- kvm-2:
icon: jetkvm.svg
href: "{{HOMEPAGE_VAR_KVM_2_URL}}"
description: jetkvm
- kvm-3:
icon: jetkvm.svg
href: "{{HOMEPAGE_VAR_KVM_3_URL}}"
description: jetkvm
- kvm-4:
icon: jetkvm.svg
href: "{{HOMEPAGE_VAR_KVM_4_URL}}"
description: jetkvm
- kvm-5:
icon: jetkvm.svg
href: "{{HOMEPAGE_VAR_KVM_5_URL}}"
description: jetkvm
- kvm-6:
icon: jetkvm.svg
href: "{{HOMEPAGE_VAR_KVM_6_URL}}"
description: jetkvm
- IPMI:
icon: supermicro.svg
href: "{{HOMEPAGE_VAR_IPMI_1_URL}}"
description: storinator
- IPMI:
icon: supermicro.svg
href: "{{HOMEPAGE_VAR_IPMI_2_URL}}"
description: hl15
- Netboot.xyz:
icon: netbootxyz.svg
href: "{{HOMEPAGE_VAR_NETBOOT_URL}}"
description: network boot
- Code Server:
icon: vscode.svg
href: "{{HOMEPAGE_VAR_CODE_SERVER_URL}}"
description: browser ide
- Storage:
- TrueNAS:
icon: truenas.svg
href: "{{HOMEPAGE_VAR_TRUENAS_URL}}"
description: scale
- MinIO:
icon: minio.svg
href: "{{HOMEPAGE_VAR_MINIO_URL}}"
description: object storage
- Rackula:
icon: rackula.svg
href: "{{HOMEPAGE_VAR_RACKULA_URL}}"
description: rack diagram
- UNAS:
icon: unifi-drive.svg
href: "{{HOMEPAGE_VAR_UNAS_URL}}"
description: nas
- Media:
- Plex:
icon: plex.svg
href: "{{HOMEPAGE_VAR_PLEX_URL}}"
description: media server
- Tautulli:
icon: tautulli.svg
href: "{{HOMEPAGE_VAR_TAUTULLI_URL}}"
description: plex stats
- Immich:
icon: immich.svg
href: "{{HOMEPAGE_VAR_IMMICH_URL}}"
description: photo library
- Dispatcharr:
icon: dispatcharr.svg
href: "{{HOMEPAGE_VAR_DISPATCHARR_URL}}"
description: media dispatcher
- ErsatzTV:
icon: ersatztv.png
href: "{{HOMEPAGE_VAR_ERSATZTV_URL}}"
description: iptv server
- Handbrake:
icon: handbrake.svg
href: "{{HOMEPAGE_VAR_HANDBRAKE_URL}}"
description: video transcoder
- HDHomerun:
icon: hdhomerun.svg
href: "{{HOMEPAGE_VAR_HDHOMERUN_URL}}"
description: flex 4k
- Energy:
- PeaNUT:
icon: peanut.svg
href: "{{HOMEPAGE_VAR_PEANUT_URL}}"
description: ups monitor
- Tripp Lite:
icon: "{{HOMEPAGE_VAR_TRIPP_LITE_ICON_URL}}"
href: "{{HOMEPAGE_VAR_UPS_1_URL}}"
description: 1500
- Eaton:
icon: "{{HOMEPAGE_VAR_EATON_ICON_URL}}"
href: "{{HOMEPAGE_VAR_UPS_2_URL}}"
description: 5p
- Home Automation:
- Home Assistant:
icon: home-assistant.svg
href: "{{HOMEPAGE_VAR_HOME_ASSISTANT_URL}}"
description: home
- UniFi Protect:
icon: unifi-protect.png
href: "{{HOMEPAGE_VAR_UNIFI_PROTECT_URL}}"
description: cameras
- Scrypted:
icon: scrypted.png
href: "{{HOMEPAGE_VAR_SCRYPTED_URL}}"
description: camera mgmt
- Zigbee2MQTT:
icon: zigbee2mqtt.svg
href: "{{HOMEPAGE_VAR_ZIGBEE2MQTT_URL}}"
description: zigbee bridge
- SLZB-06M:
icon: smlight.png
href: "{{HOMEPAGE_VAR_SLZB06M_URL}}"
description: zigbee coordinator
- AI:
- Open WebUI:
icon: open-webui.svg
href: "{{HOMEPAGE_VAR_OPEN_WEBUI_URL}}"
description: llm chat
- n8n:
icon: n8n.svg
href: "{{HOMEPAGE_VAR_N8N_URL}}"
description: workflow automation
- Documents:
- Paperless:
icon: paperless.svg
href: "{{HOMEPAGE_VAR_PAPERLESS_URL}}"
description: document mgmt
- Paperless AI:
icon: paperless-ai.png
href: "{{HOMEPAGE_VAR_PAPERLESS_AI_URL}}"
description: ai document tagging
- Stirling PDF:
icon: stirling-pdf.svg
href: "{{HOMEPAGE_VAR_STIRLING_URL}}"
description: pdf tools
- Tools:
- IT Tools:
icon: it-tools.svg
href: "{{HOMEPAGE_VAR_IT_TOOLS_URL}}"
description: developer utilities
- SearXNG:
icon: searxng.svg
href: "{{HOMEPAGE_VAR_SEARXNG_URL}}"
description: meta search engine
- Postiz:
icon: postiz.svg
href: "{{HOMEPAGE_VAR_POSTIZ_URL}}"
description: social scheduler
- Bambu Studio:
icon: "{{HOMEPAGE_VAR_BAMBUSTUDIO_ICON_URL}}"
href: "{{HOMEPAGE_VAR_BAMBUSTUDIO_URL}}"
description: 3d slicer
- Database:
- pgAdmin:
icon: pgadmin.svg
href: "{{HOMEPAGE_VAR_PGADMIN_URL}}"
description: postgres admin
- phpMyAdmin:
icon: phpmyadmin.svg
href: "{{HOMEPAGE_VAR_PHPMYADMIN_URL}}"
description: mariadb admin
- DBgate:
icon: "{{HOMEPAGE_VAR_DBGATE_ICON_URL}}"
href: "{{HOMEPAGE_VAR_DBGATE_URL}}"
description: multi-db client
- Adminer:
icon: adminer.svg
href: "{{HOMEPAGE_VAR_ADMINER_URL}}"
description: lightweight db client
- Databasus:
icon: databasus.svg
href: "{{HOMEPAGE_VAR_DATABASUS_URL}}"
description: db admin
- Other:
- GitLab:
icon: gitlab.svg
href: "{{HOMEPAGE_VAR_GITLAB_URL}}"
description: source code
- GitHub:
icon: github.svg
href: "{{HOMEPAGE_VAR_GITHUB_URL}}"
description: source code
- Shlink:
icon: shlink.svg
href: "{{HOMEPAGE_VAR_SHLINK_URL}}"
description: url shortener
.env example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
TZ=America/Chicago
HOMEPAGE_ALLOWED_HOSTS=
# Pi-hole v6 app passwords — generate in each Pi-hole > Settings > API > App passwords
HOMEPAGE_VAR_PIHOLE_API_KEY_1=
HOMEPAGE_VAR_PIHOLE_API_KEY_2=
HOMEPAGE_VAR_PIHOLE_API_KEY_3=
HOMEPAGE_VAR_PIHOLE_API_KEY_4=
HOMEPAGE_VAR_PIHOLE_API_KEY_5=
HOMEPAGE_VAR_PIHOLE_API_URL_1=
HOMEPAGE_VAR_PIHOLE_API_URL_2=
HOMEPAGE_VAR_PIHOLE_API_URL_3=
HOMEPAGE_VAR_PIHOLE_API_URL_4=
HOMEPAGE_VAR_PIHOLE_API_URL_5=
HOMEPAGE_VAR_PIHOLE_URL_1=
HOMEPAGE_VAR_PIHOLE_URL_2=
HOMEPAGE_VAR_PIHOLE_URL_3=
HOMEPAGE_VAR_PIHOLE_URL_4=
HOMEPAGE_VAR_PIHOLE_URL_5=
HOMEPAGE_VAR_PIHOLE_HOST_1=
HOMEPAGE_VAR_PIHOLE_HOST_2=
HOMEPAGE_VAR_PIHOLE_HOST_3=
HOMEPAGE_VAR_PIHOLE_HOST_4=
HOMEPAGE_VAR_PIHOLE_HOST_5=
# Hypervisor
HOMEPAGE_VAR_PROXMOX_URL=
HOMEPAGE_VAR_PROXMOX_MPLS_URL=
HOMEPAGE_VAR_PROXMOX_USER=
HOMEPAGE_VAR_PROXMOX_MPLS_USER=
HOMEPAGE_VAR_PROXMOX_API_KEY=
HOMEPAGE_VAR_PROXMOX_MPLS_API_KEY=
HOMEPAGE_VAR_PBS_URL=
HOMEPAGE_VAR_PVE_HOST_1=
HOMEPAGE_VAR_PVE_HOST_2=
HOMEPAGE_VAR_PVE_HOST_3=
HOMEPAGE_VAR_PVE_HOST_4=
HOMEPAGE_VAR_PVE_MPLS_HOST_1=
HOMEPAGE_VAR_PVE_MPLS_HOST_2=
HOMEPAGE_VAR_PVE_MPLS_HOST_3=
# Network
HOMEPAGE_VAR_UNIFI_NETWORK_URL=
HOMEPAGE_VAR_UNIFI_NETWORK_API_URL=
HOMEPAGE_VAR_UNIFI_NETWORK_USERNAME=
HOMEPAGE_VAR_UNIFI_NETWORK_PASSWORD=
HOMEPAGE_VAR_UNIFI_PROTECT_URL=
HOMEPAGE_VAR_TRAEFIK_URL=
HOMEPAGE_VAR_TRAEFIK_USERNAME=
HOMEPAGE_VAR_TRAEFIK_PASSWORD=
HOMEPAGE_VAR_UPTIME_KUMA_URL=
HOMEPAGE_VAR_UPTIME_ROBOT_URL=
HOMEPAGE_VAR_UPTIME_ROBOT_API_KEY=
HOMEPAGE_VAR_OPENSPEEDTEST_URL=
HOMEPAGE_VAR_UDM_HOST=
HOMEPAGE_VAR_UNVR=
# Containers
HOMEPAGE_VAR_RANCHER_URL=
HOMEPAGE_VAR_LONGHORN_URL=
HOMEPAGE_VAR_DOZZLE_URL=
# Monitoring
HOMEPAGE_VAR_GRAFANA_URL=
HOMEPAGE_VAR_GRAFANA_USERNAME=
HOMEPAGE_VAR_GRAFANA_PASSWORD=
HOMEPAGE_VAR_PROMETHEUS_URL=
HOMEPAGE_VAR_ALLOY_URL=
HOMEPAGE_VAR_LOKI_URL=
HOMEPAGE_VAR_LOKI_EXPLORE_URL=
HOMEPAGE_VAR_SCRUTINY_URL=
# Remote Access
HOMEPAGE_VAR_PIKVM_URL=
HOMEPAGE_VAR_PIKVM_HOST=
HOMEPAGE_VAR_KVM_1_URL=
HOMEPAGE_VAR_KVM_2_URL=
HOMEPAGE_VAR_KVM_3_URL=
HOMEPAGE_VAR_KVM_4_URL=
HOMEPAGE_VAR_KVM_5_URL=
HOMEPAGE_VAR_KVM_6_URL=
HOMEPAGE_VAR_IPMI_1_URL=
HOMEPAGE_VAR_IPMI_2_URL=
HOMEPAGE_VAR_IPMI_1_HOST=
HOMEPAGE_VAR_IPMI_2_HOST=
HOMEPAGE_VAR_NETBOOT_URL=
HOMEPAGE_VAR_CODE_SERVER_URL=
HOMEPAGE_VAR_BROADLINK_CONTROL_URL=
# Storage
HOMEPAGE_VAR_TRUENAS_URL=
HOMEPAGE_VAR_TRUENAS_API_KEY=
HOMEPAGE_VAR_TRUENAS_HOST=
HOMEPAGE_VAR_MINIO_URL=
HOMEPAGE_VAR_RACKULA_URL=
HOMEPAGE_VAR_UNAS_URL=
# Media
HOMEPAGE_VAR_PLEX_URL=
HOMEPAGE_VAR_PLEX_API_TOKEN=
HOMEPAGE_VAR_TAUTULLI_URL=
HOMEPAGE_VAR_TAUTULLI_API_KEY=
HOMEPAGE_VAR_IMMICH_URL=
HOMEPAGE_VAR_IMMICH_API_KEY=
HOMEPAGE_VAR_DISPATCHARR_URL=
HOMEPAGE_VAR_ERSATZTV_URL=
HOMEPAGE_VAR_HANDBRAKE_URL=
HOMEPAGE_VAR_HDHOMERUN_URL=
HOMEPAGE_VAR_HDHOMERUN_HOST=
# Energy
HOMEPAGE_VAR_PEANUT_URL=
HOMEPAGE_VAR_NUT_SERVER_HOST=
HOMEPAGE_VAR_UPS_1_URL=
HOMEPAGE_VAR_UPS_2_URL=
HOMEPAGE_VAR_UPS_1_HOST=
HOMEPAGE_VAR_UPS_2_HOST=
HOMEPAGE_VAR_TRIPP_LITE_ICON_URL=
HOMEPAGE_VAR_EATON_ICON_URL=
# Home Automation
HOMEPAGE_VAR_HOME_ASSISTANT_URL=
HOMEPAGE_VAR_HOME_ASSISTANT_API_KEY=
HOMEPAGE_VAR_SCRYPTED_URL=
HOMEPAGE_VAR_ZIGBEE2MQTT_URL=
HOMEPAGE_VAR_SLZB06M_URL=
# AI
HOMEPAGE_VAR_OPEN_WEBUI_URL=
HOMEPAGE_VAR_N8N_URL=
HOMEPAGE_VAR_N8N_API_KEY=
# Documents
HOMEPAGE_VAR_PAPERLESS_URL=
HOMEPAGE_VAR_PAPERLESS_API_KEY=
HOMEPAGE_VAR_PAPERLESS_AI_URL=
HOMEPAGE_VAR_STIRLING_URL=
# Tools
HOMEPAGE_VAR_IT_TOOLS_URL=
HOMEPAGE_VAR_SEARXNG_URL=
HOMEPAGE_VAR_POSTIZ_URL=
HOMEPAGE_VAR_BAMBUSTUDIO_URL=
HOMEPAGE_VAR_BAMBUSTUDIO_ICON_URL=
# Database
HOMEPAGE_VAR_PGADMIN_URL=
HOMEPAGE_VAR_PHPMYADMIN_URL=
HOMEPAGE_VAR_DBGATE_URL=
HOMEPAGE_VAR_DBGATE_ICON_URL=
HOMEPAGE_VAR_ADMINER_URL=
HOMEPAGE_VAR_DATABASUS_URL=
# Other
HOMEPAGE_VAR_GITLAB_URL=
HOMEPAGE_VAR_GITHUB_URL=
HOMEPAGE_VAR_SHLINK_URL=
LittleLinkServer
I also still use Little Link Server for all of my social links. It is simple, easy to configure, and does exactly what I need it to do.
Jekyll
My documentation site and blog are still built with Jekyll. I have tried several static site generators over time, but I chose Jekyll this time because I really like the Chirpy Theme.
Shlink
I still use Shlink for link shortening and redirect control. It is one of those services that becomes more useful the longer you run it.
The core infra
The services that make self-hosting are not always the most visible ones.
Traefik
I am still using Traefik as my reverse proxy. It handles routing, certificates, and ingress for a large portion of what I run, both at home and in Kubernetes.
Pi-hole
I still rely on Pi-hole for DNS and ad blocking, but I also use it heavily for local DNS. That becomes more important as my homelab.
Nebula Sync and Keepalived
When you have multiple Pi-hole instances, you need a reliable way to keep them aligned. Nebula Sync handles the synchronization side, and Keepalived helps with failover.
One thing I changed this year was how I think about primary DNS. Most clients strongly prefer the primary until they absolutely cannot use it, so making the primary more resilient made things fail over much smoother.
Previous to discover this I was made my secondary DNS HA.
Monitoring and logging
This year I decided that if I depend on a service, I should monitor it properly.
So I leaned more heavily into:
- Prometheus
- Grafana
- Loki
- Alloy
- Uptime Kuma
- Uptime Robot for external checks
That stack gives me a good mix of:
- metrics
- dashboards
- logs
- uptime checks
- internal visibility
- external visibility
This is one of the areas where self-hosting can become difficult quickly if you ignore it. It is easy to spin up an application. It is harder to notice when it is failing or throwing lots of errors.
I have also ended up relying on several exporters because many tools do not expose the metrics I want out of the box.
And for quick log visibility, Dozzle is still very useful. Sometimes you do not need a full observability workflow and all you need at the moment is to see what a container is doing right now.
Media
Media is still one of the largest categories in my homelab.
I still run Plex as my primary media server, but I also run Jellyfin against the same library. Part of that is comparison, and part of it is simply having an alternative ready.
If something changes with Plex someday, I do not want to be starting from zero.
I also run a number of companion tools around media:
- Tautulli for activity and stats
- Kometa for collection and metadata automation
- HandBrake for re-encoding
- HDHomeRun for OTA TV into Plex
- ErsatzTV for virtual channels
- Dispatcharr to help feed multiple channel sources into Plex
The live TV and virtual channel side of things is one of the more interesting parts of my homelab. It is not the most essential thing I run, but it has been one of the more enjoyable areas to experiment with.
Immich, which I forgot to mention in the video
I also need to call out Immich because I accidentally skipped over it in my notes while recording and did not mention it in the video.
Immich is awesome.
I primarily use it for my good photos, mostly post-edit, rather than as a complete dump of every photo I take. That has worked out for me and it makes the library feel more intentional and more useful.
I also have a full tutorial on Immich here:
If you are looking for a self-hosted photo application, Immich is well worth a look.
Documents
I have also become more serious about document handling.
Paperless-ngx is a big part of that. It is the kind of tool that becomes more useful the more real world paperwork you put through it.
On top of that I am also using:
That combination makes the Paperless much more useful than OCR alone. It turns it into something closer to a real document workflow.
I also run Stirling PDF for general PDF editing. it handles splitting, merging, and converting all within a clean web ui. I forgot to mention this in the video, as I did a few others due to the super long bulleted outline I was following.
Visual tools
I am a visual learner, so I keep a few tools around that help me think through systems and explain them clearly, especially on video calls.
Excalidraw is great when I want to explain something quickly without worrying much about precision.
draw.io is better when I want something more structured.
Rackula is useful and fun because it helps me diagram my rack and that saved me from running to the basement to see how things are set up.
Automation
I run n8n, and I think it is a very good tool however I don’t have a need for a low-code solution right now.
I still like to write code for a lot of the automation I want, mostly because that’s a big part of my day job.
I also tried Postiz for scheduling social posts. It is useful, and I can see the value, especially for teams or for people planning content farther ahead than I usually do.
Since I am a small solo creator, I find this a little less useful than I originally thought it would be.
Home Assistant
I am still running Home Assistant, and if you have used it, you know it’s quite the undertaking.
It is powerful, flexible, and worth the effort once you get it working the way you want.
Alongside it I am running:
- MQTT
- Zigbee2MQTT
- Scrypted
- UniFi Protect
That gives me a flexible setup for home automation, cameras, and bridging devices into ecosystems they were not originally designed for.
Scrypted especially has been very useful in getting my Protect cameras into HomeKit. It’s great.
Databases
A lot of the services I run need databases, so I end up running several of them.
Mainly:
And because I do not always want to manage those from the terminal, I also keep a few admin tools around:
If working on a postgres DB, I always use pgAdmin. But when it comes to MySQL-like DBs I usually reach for Adminer first because it is lightweight and does what I need without much overhead.
For backup and restores I am using databases. It’s an awesome tool to backup almost any type of DB.
Local AI
It is 2026, so yes, I am also running local AI tools in my homelab.
The main pieces there are:
That gives me a local setup for pulling models, running them, and chatting with them without sending everything elsewhere.
I do not think every AI workflow needs to be local, the models just aren’t good enough, but having a local option has been useful, especially when testing or experimenting.
Kubernetes and platform operations
I am running three Kubernetes clusters and managing them with Rancher.
I mostly treat Rancher as the management layer, not the place where I make configuration changes. The actual workflow is still GitOps driven for me, with:
That stack has been working well. I like defining things in Git, I like updates showing up as pull requests, and I like keeping the running environment close to what the repository says it should be.
There is still plenty of complexity in Kubernetes, but GitOps gives that complexity a structure.
There are also a few Kubernetes applications that did not really make it into the video because it was already too long, but they are important enough to mention here.
Longhorn
I use Longhorn for cloud-native storage in Kubernetes. It is one of the pieces that becomes foundational once you start running more stateful workloads in the cluster.
Reflector
Reflector is useful for reflecting or duplicating secrets across namespaces. That simplifies secret management when the same values need to exist in more than one place.
kube-vip
I use kube-vip for service load balancing and as a control-plane load balancer. It is a small component, but an important one.
Reloader
Reloader will automatically cycle services when secrets or configuration changes. That removes a lot of manual restarts.
A few tools that make life easier
There are also a number of smaller tools that do not always fit neatly into one category but are still useful enough to keep around.
- Code Server for editing from the browser
- IT-Tools for encoding, decoding, and general development utilities
- OpenSpeedTest for local bandwidth checks
- Scrutiny for disk health
- nvtop for GPU visibility
- Netboot.xyz for network installs
- NUT and PeaNUT for UPS monitoring
Bambu Studio
One other thing that did not make it into the video is Bambu Studio.
I am actually self-hosting it, which is a little jank inside a container, but I have been testing it out. I keep it around for the times when I need to print something and do not have access to my main machine.
It is not the cleanest setup, but it has been useful enough that I keep it running in my homelab.
The main theme this year
If I had to summarize the software side of my homelab this year, it would be this:
I am trying to make it more intentional.
Less “spin things up because I can.” More “put things where they make sense, monitor them properly, back them up, and make them easy to operate.”
That does not mean the lab is simple now. It definitely is not.
But it does feel more cohesive.
More of the services have a reason to exist. More of the architecture choices feel deliberate. More of the setup feels like something I can actually operate without constantly rebuilding it.
That is probably the biggest difference from previous years.
What is next
The follow-up from here is backups.
How I back things up, where they land, what I replicate, what I do not, and how I think about recovery is probably the next important piece to show.
Running a lot of services is one thing.
Restoring them cleanly when something breaks is another.
Final thoughts
This is what I am running right now, not necessarily what I would recommend every person run.
Some of this is more than most people need. Some of it is experimentation. Some of it is simply what happens when a homelab evolves over time.
But I hope it gives you some useful ideas.
Not just for specific tools, but for how to think about the split between home services, public services, storage, orchestration, monitoring, and the operational details in between.
If there is one self-hosted service you absolutely cannot live without, I would be interested to hear what it is.
Related
- My 2026 Homelab Tour (Rack + Servers + Network + Storage)
- My Immich tutorial
- Self-Hosted Paperless-ngx + Local AI
- Self-Host Your Own Automation Platform with n8n + Docker
- TrueNAS Docker Pro video
Join the conversation
Everything I’m self-hosting in 2026 is live. Full breakdown from Proxmox + TrueNAS + K8S and all the way up through the apps.
— Techno Tim (@TechnoTimLive) March 15, 2026
What are you hosting right now?https://t.co/xz1j7uhyIb pic.twitter.com/GnSH2oaMK3
🤝 Support the channel and help keep this site ad-free
🛍️ Check out all merch: https://shop.technotim.com/
