YouTube2Text

Homelab Services Tour 2025 - What am I Self-Hosting — Transcript

by Techno Tim · 12,452 words · 604 segments · language en · Watch on YouTube

Full transcript

  1. 0:00It's been another awesome year of self-hosting, and after sharing my Homelab hardware tour,
  2. 0:05many of you wanted to know what I'm running on all of that hardware.
  3. 0:08Well, you're in luck because today I'm breaking it all down for you.
  4. 0:12From dashboards to hypervisors for virtualization, a NAS with plenty of storage,
  5. 0:17five DNS servers, yes, five, segmented networks across multiple VLANs,
  6. 0:23reverse proxies, home security, media server, link pages, link shorteners, power management,
  7. 0:30and so much more. I'll also give you a sneak peek at the services that I'm keeping,
  8. 0:35the ones I'm replacing, and some big changes I'm planning this year. Spoiler alert, I've revamped
  9. 0:40quite a bit in the last 12 months, and 2025 will be no different. If you're into self-hosting services,
  10. 0:47make sure to subscribe so that you don't miss any of my future updates.
  11. 0:51All right, let's dive in, starting with my networks. So I have a lot of Ubiquiti devices,
  12. 0:55so naturally, I'm going to use the UniFi Network Controller to manage all of my devices,
  13. 1:00and some of my cameras, and other things you'll see later on. But in here, you can see my network
  14. 1:05typology. Now, first, you can see my fiber coming in right here, and then that connects to my EFG,
  15. 1:12and that's my gateway into my network. That was UDM SE before this, but now it's an EFG.
  16. 1:20That might go back to something a little bit more home-friendly, but for now, it's the EFG,
  17. 1:26because I'm testing it. Then from there, downstream from there, I kind of have my core switch,
  18. 1:30and this is my switch aggregation pro, and I see there's a RX fault there, but I'll look at that
  19. 1:36later. But this is my 10 gig switch, so all of my 10 gig devices connect into here, and then it uplinks
  20. 1:42at 25 gig. So down from this core switch, first I'll go this way, because this goes into my studio
  21. 1:49here. In my studio, my first switch is the Pro Max 24 PoE. That's right over there in a mini server
  22. 1:55rack for all of my workstations. And then from there, it connects to the Office Flex Mini, which is
  23. 2:02up there behind the TV, and that's there so I can connect all of those devices that are up there
  24. 2:07to a network and hard-wire them rather than using wireless. And then from here, it should go to this
  25. 2:14USW Pro Max 16 PoE, the little short one. That's actually on my workbench back there. I've unplugged
  26. 2:21it because I'm tearing things apart back there and kind of redoing my office, but that should be plugged
  27. 2:26in. And then downstream from that are two of the 2.5 UniFi Flex switches. And those were there for
  28. 2:33testing and updating, but I'll probably remove those and use those somewhere else. So then if we go back
  29. 2:40over here again, downstream from my Switch Aggregation Pro, then I have my 48 port PoE switch, and this
  30. 2:47connects a majority of my devices. So downstream from this, let's just start over here, is my U7 Outdoor
  31. 2:54Pro. And that's outside creating a wireless bridge to my garage. And it's also giving me coverage
  32. 3:00outdoors. But it does create a bridge to the device bridge that's in the garage. And that's connected
  33. 3:07to the PoE 8 port light, which gives it power and connectivity. And from here, this connects to
  34. 3:13a lot of cameras and maybe some more stuff in the future. And I did have this office workbench switch
  35. 3:20out there just for testing. But I removed it, I should probably remove it from here and reset it.
  36. 3:26But if we go to the next device downstream from my 48 PoE switch, I have the PDU for power management.
  37. 3:32I have two flex devices, those are the ones you saw on the wall. And that's just to give me more ports
  38. 3:38on the wall. Then I have a living room USW Ultra 210. And so this is a another PoE switch that's in my living
  39. 3:47room that's powering some cameras, it's powering a mini switch, the flex switch. And that goes behind
  40. 3:53my TV for the Xbox and some devices up there. And then this also powers the U6 mesh, which is that small
  41. 4:01little access point that I have in my living room just for some more coverage. And to give my doorbell
  42. 4:07some more coverage. That's specifically why I got it. And then connected to there, you might have saw that
  43. 4:13U7 Pro on top of my server rack. I meant to mount that a long time ago, but it actually fits nice there.
  44. 4:19And it covers some of the devices above there and actually some of the devices outside too. So downstream
  45. 4:25from this, I have the USP plug really, it's just connected over wireless. But this is an IoT device from
  46. 4:31Ubiquiti that will automatically toggle my ONT on and off. If it detects a problem with my internet connection.
  47. 4:38Super handy. I've had it for years and it saved me quite a few times. We talked about the flex. So then next to here
  48. 4:45is the U7 Pro Max and that's the access point that's right outside of my office. And it's the access point
  49. 4:51that a majority of the devices in my house connect to. It's central, it's the highest up, and it's a really good
  50. 4:58access point. So most of my devices end up connecting to this one. And that's it as far as topology goes. If you noticed, I have quite a few VLANs. I have one for
  51. 5:05cameras, one for guests, one for main, one for IoT, one for service trusted and one for untrusted. A couple of these went away
  52. 5:13because I made some changes. So here's my network setup or the way it used to be. So I have my default network where a lot of my
  53. 5:21devices are connected. This is where all of my networking devices live and all of my Ubiquiti devices live. And the only other
  54. 5:28devices that live there are devices that need access to all VLANs. So the camera VLAN, pretty self-explanatory. This is where all of my cameras live. And this VLAN is pretty special because I actually blocked the internet from this VLAN.
  55. 5:44cameras shouldn't reach out to the internet anyways they should connect back to UniFi Protect
  56. 5:49but just in case for some reason they decided to go to the internet one day they're not going to be
  57. 5:54able to make it so that's what I do wholesale across this camera vlan because I don't want
  58. 6:00any devices on there to ever go out to the internet they have no reason to because I self-host UniFi
  59. 6:06protect here then there's the iot vlan which is for all my iot devices and it's also for things
  60. 6:12that I don't trust now I use the term trust loosely we'll talk more about what I do trust and what i
  61. 6:17don't trust and why I don't trust some things but I don't trust any of my iot devices so they go here
  62. 6:24and this is one thing that has changed my Kubernetes node isn't here I actually have a network adapter
  63. 6:30here so it's not really a node so I'm going to take that off you'll be happy to know that I moved my
  64. 6:36wife's laptop off the iot vlan her work laptop I didn't have a great place to put it I threw it on
  65. 6:43the iot vlan but I've taken it off since then and this is where any device goes that I test I should
  66. 6:49probably have my own test vlan too that doesn't have access to the internet so that I can really
  67. 6:55test it in isolation just in case you know something was compromised or sent to me you know compromised but
  68. 7:02uh right now I test them on my iot vlan then there's the main vlan for everything that I trust
  69. 7:07and when I say trust it's not that I trust it with my life or anything like that it's more that I trust
  70. 7:13this device enough to sign into it to do taxes on it and to you know put my personal information
  71. 7:21on that device now would I put my personal information on any of these iot devices like no
  72. 7:28and so that's kind of how I think about it I mean you know do I trust my home pods with my life no I don't
  73. 7:35obviously but do I trust them enough to talk to them or to sign in with my iCloud account yes I do
  74. 7:42uh so this is kind of where those devices live on this main vlan then I have a guest vlan for
  75. 7:49everyone who never comes over because I never have any guests it's true and here's one of the biggest
  76. 7:55changes from last year I'm not using servers untrusted anymore since setting up my co-location
  77. 8:01i moved all of my untrusted servers and some of my public services there so I don't self-host most public
  78. 8:10services out of my house anymore so really this whole thing could go over here and then I could
  79. 8:17just basically say that hey this is this is my co-location over here so this would be home and this
  80. 8:24would be my colo over here so what I ended up doing was creating a site-to-site vpn between my co-location
  81. 8:31and my home so that some of my trusted devices can get to them directly and then this can serve out
  82. 8:38you know the services through the internet and this is how I ended up doing it I have home I have a site
  83. 8:44to site vpn not using tail scale that was one of my decisions and then my co-location and so I just
  84. 8:51traversed the network through a site-to-site vpn this is hosting a lot of my public services and then this is
  85. 8:57hosting a lot of my internal home lab services here if you want to see some of the decision points and
  86. 9:03how things are organized I have a video on that the dashboard that I'm using is home page now I switched
  87. 9:08to this this year and home page is great for a lot of reasons one it has a ton of flexibility so you can
  88. 9:14customize this the way that you want it supports a lot of services as you can see a lot of them are
  89. 9:20connected here that's another point is that you can get data back from those services and present it
  90. 9:27here in a little card and it still does the simplest thing which is a link on this page to get to some
  91. 9:33of your services but one of the reasons why I like this the most is because it's all configuration based
  92. 9:39and what do I mean by that well you can configure everything about this dashboard in yaml now I know a
  93. 9:45lot of people don't like yaml and they want a WYSIWYG editor that's totally fine but for me personally
  94. 9:51i'd rather do it in yaml because then my yaml file can be easily backed up and it doesn't require
  95. 9:58space on the disk where this is running that's really important for things like Kubernetes because
  96. 10:04now this runs stateless and you don't need to mount a volume to this container and then you could scale it as
  97. 10:10much as you want for example we saw my hypervisor column and then in here you could see all of my pve servers
  98. 10:17and then I had these variables in a dot emv file but you can see how simple it is I could copy and paste this a few
  99. 10:24times and get a few more Proxmox servers just by doing this then I have a containers column DNS column
  100. 10:30so on and so forth so I really like this way to configure stuff rather than using a WYSIWYG editor or drag and drop or anything like that
  101. 10:38don't get me wrong they're lovely and they work great but for me I want to be able to repeat this
  102. 10:44super easy and keep this configuration say in a configuration store like Kubernetes my hypervisor
  103. 10:51of choice is still Proxmox and for a good reason Proxmox is a wonderful hypervisor not only is it open
  104. 10:59source and based on kvm but it also has a wonderful web gui to manage all of this it can scale and you can run
  105. 11:07it in ha if you want it can run LXC containers and you can run cef to have distributed storage across
  106. 11:15all of these hypervisors that you're running in your cluster so lots of great features many of them i
  107. 11:20don't even use but I do have four nodes in my Proxmox cluster now I actually have two Proxmox clusters I'll
  108. 11:28show you the second one here in a second but this is my first cluster first up I have Storinator and for the time being I converted
  109. 11:35Storinator to a Proxmox node rather than installing something on it bare metal because it gives me
  110. 11:41all of the niceties from Proxmox like backups and all of that easy to connect to shares so I decided
  111. 11:48that hey I'm going to turn that into a Proxmox node and then I can run all of these virtual machines on
  112. 11:54here I think that's going to change I think that's going to change and I'll talk about that a little bit
  113. 11:57later in the NAS section if that's any clue but on here I have a lot of test machines I actually have a GitHub
  114. 12:04runner here I'll talk about that a little bit later I have three GitHub runners that run CI for some of my repos
  115. 12:11from GitHub when people open pull requests I have them running here locally I'll talk about it later but pretty cool that I can
  116. 12:18run and execute CI from GitHub the public version and run those runners here locally and then I have
  117. 12:25five test K3S nodes I'll talk about that a little bit later and what they're for and then I have pbs
  118. 12:31running so Proxmox backup server running as a virtual machine I'll kind of dive into that a little bit later
  119. 12:36then some DNS servers and some other servers just for testing you can see I was testing Unraid here true
  120. 12:42nas it's wonderful that I can actually test other nas systems on Proxmox it's pretty awesome and this
  121. 12:48is Unraid I was actually passing through the usb key where my production version of unraid was installed
  122. 12:55and that was one quick way I was able to virtualize it was just plug in that key pass it to to the virtual
  123. 13:00machine and I didn't need to configure anything else so the next three nodes are those Intel nux you saw
  124. 13:06that I said I have in a cluster and each of them are running similar VMs or containers that the other
  125. 13:13ones are running so for instance if I look at HA Proxy one on this node one or if I look at HA Proxy
  126. 13:19two on node two or HA Proxy three on node three so what I've done is spread these out for ha and on my
  127. 13:28one node for Proxmox I put all of my one guest machines the same for two and then the same for three
  128. 13:35so this really helps me coordinate shutdowns so for instance if I wanted to use Ansible to patch all of
  129. 13:40the three devices I know that all of the three devices live on this Proxmox node 3 so I'll run my
  130. 13:47Ansible command to update all of these machines and then I'll update the host so xing-3 and then I'll
  131. 13:55reboot it and then they'll come back up and because this is ha for the most part these services will stay
  132. 14:01running and so I use that convention pretty much anywhere because I'll always know that if it's a
  133. 14:06dash or one it's going to live on node one node two and node three and so on and so forth um but HA Proxy
  134. 14:13this was for testing Postgres was for testing and then you'll see here I have my K8S home
  135. 14:19oh one and my K8S home worker oh one so this is one of my three Kubernetes clusters we'll talk about
  136. 14:27that a little bit later but this is the server node or the node that has etcd and control plane for Kubernetes
  137. 14:34that's the dash oh one and then the dash oh two on node two is also that role and the same for three on node
  138. 14:43three this dash three is running Kubernetes etcd and control plane so those three nodes just manage
  139. 14:51this Kubernetes cluster in the state and the api and then on each of them I have worker nodes that pick
  140. 14:58up some of the pods that I deploy to them so as I deploy services through Kubernetes they'll just land
  141. 15:04on one of these nodes which nodes I don't really care as long as it lands on one of them and then if this
  142. 15:09node goes down you know it'll shuffle those around and continue on working my second Proxmox cluster
  143. 15:17is actually in my co-location so I move those three 1u servers to my co-location and each of those three
  144. 15:241u servers are running Proxmox and then within each one of these I'm running different VMs and LXC
  145. 15:31containers that's a big change this year too so let's talk about these three again I have the same convention
  146. 15:38here node one as Postgres one HA Proxy one MongoDB one MySQL one Rancher one DNS one K8S public one
  147. 15:49and K8S public worker one it's a lot going on there and the same for two same exact thing and the
  148. 15:55same for three as you can see now I don't know if I mentioned this but last year I was running a lot of
  149. 16:00my databases in Kubernetes now there's nothing inherently wrong with running databases in Kubernetes
  150. 16:06if it's architected the right way I didn't architect mine the right way and the biggest takeaway from
  151. 16:13this is to not use a database in a shared service server so as you can see I have a lot of virtual
  152. 16:21machines in here and a lot of things that are sensitive to latency databases are one and etcd is
  153. 16:28another and so I had databases running in Kubernetes on this host that's also hosting all of these
  154. 16:35containers and virtual machines so not a great mix if I had more machines what I would do is just
  155. 16:42dedicate a couple of nodes specifically to databases and let the databases run there then they don't
  156. 16:49have to worry about competing for cpu and io and network they could have their own dedicated per node so
  157. 16:56anyways I i learned a ton I learned that hey if I want to run databases in Kubernetes I need some more
  158. 17:02hardware or at least better hardware if these were all on NVMe it'd probably work which i'd love to do
  159. 17:08in the future and I'm thinking about doing it but anyways on this first node I have Postgres sql so this
  160. 17:14is the first node in this Postgres cluster and if you want to see how to configure Postgres ha I have a great
  161. 17:20video on it doesn't use Docker doesn't use Kubernetes I called it Postgres sql the hard way
  162. 17:26kind of you know a tip in my hat to Kubernetes the hard way because this is really the step-by-step
  163. 17:34manual way of showing you how to do it for Postgres so if you need a database and something supports
  164. 17:39Postgres always choose Postgres it's great but anyways I have node 1 2 and 3 and this is ha I can shut this LXC
  165. 17:46container down and my databases will continue to run HAProxy is actually a proxy in front of Postgres to
  166. 17:54kind of you know field those requests and send them to the nodes that are alive and the same thing I have
  167. 18:011 2 and 3 this 2 is actually down there's something weird going on where I can't start it so I don't
  168. 18:07know I'm gonna have to restore it or delete it I probably should have done that already but as you can see
  169. 18:12i mean one is down right now and HAProxy is handling it just fine one and three up actually
  170. 18:18with HAProxy you only need two nodes for high availability but that's besides the point I did three
  171. 18:24just because I have three nodes anyways that aside it runs great then I have Mongodb if you're not
  172. 18:31familiar with Mongodb it's really a no sql database and so it doesn't use sql at all it uses documents
  173. 18:39but it's pretty popular among javascript developers and for things that aren't relational actually
  174. 18:46can do relational stuff now and at the same time relational databases can do schema-less or no
  175. 18:53sql type databases too with documents it's all crazy they're just intermingling now but anyways I use
  176. 18:59that for a lot of my external services and some of my internal services too so again I have three of them
  177. 19:05one two three this is ha could take one down pass it around and then you know one will get promoted
  178. 19:13and my services will continue to run same with MySQL full disclosure this isn't working exactly
  179. 19:20the way I want it to MySQL is a little bit harder to do than Mongo and Postgres so full
  180. 19:27disclosure this isn't fully working I'm not going to pretend like it is but eventually I will move my
  181. 19:33my MySQL stuff to hear and you're probably saying to yourself right now why isn't he using
  182. 19:37MariaDB why is he using MySQL well MariaDB used to be a drop-in replacement for MySQL
  183. 19:44now they started diverging so MariaDB is doing some things that MySQL isn't doing and some
  184. 19:52services that I use only are tested with MySQL and I've already found some services that don't work with
  185. 19:59MariaDB and it goes back and forth you might find some services that were built and tested with MariaDB
  186. 20:06but don't work with MySQL db so we're in a weird situation right here and I don't blame the
  187. 20:12developers of those services they have limited staff and they can't test every single database and so
  188. 20:18they're only going to certify or ensure that their service runs fine on the database of their choice so in the future I'm probably going to have a MariaDB database in here too
  189. 20:27uh as soon as I run a service that says they only test with that but anyways I plan to fix this I just
  190. 20:35haven't had time yet then you'll see I have Rancher Rancher 01 and then Rancher 02 Rancher 03 so this is my Rancher cluster we'll talk about it a little bit later but I have three Kubernetes clusters all managed with Rancher and these are the three VMs that help me do it next I have DNS01 so I have DNS01
  191. 20:55uh so I have DNS01 I don't have DNS02 on two which is kind of weird so I should probably move it and shuffle that around
  192. 21:02uh but I have DNS02 and I have two DNS servers here I'm going to talk about what I'm using for DNS a little bit later
  193. 21:11uh but just know in my colo I have my own DNS servers there too next I have K8S public 01 again this is a another Kubernetes cluster and this is for all of my public services my self-hosted services
  194. 21:23hosted services that I provide for people like you so my documentation some other stuff apis used to have wiki
  195. 21:29js but I have a lot of things out there in the public that I want to host and so those run on this cluster
  196. 21:36right here and then like my home cluster so the dash one dash two dash three are really for managing Kubernetes
  197. 21:44it's Kubernetes itself so it's etcd control plane are running on those three servers so it's managing the state of Kubernetes
  198. 21:51Kubernetes as well as having the api for kube control commands then I have three worker nodes one on each
  199. 21:59Proxmox node and that's where all of my user services run so my documentation is running on there right now
  200. 22:06if you go to my documentation you'll actually get routed to one of three of these because I run three
  201. 22:12replicas so my documentation is ha and I run three replicas and there should be one on each one of
  202. 22:19these nodes so where you get sent to I don't know but I know it'll be one of the three and then i
  203. 22:25have you know templates other random VMs and you know all of my shares connected but this is my second
  204. 22:31Proxmox cluster in my co-location and since I was lucky enough to get a co-location and put my service there
  205. 22:38that's where I put a lot of my public services too and that's what helped shape my home network
  206. 22:43down so I don't need that untrusted server vlan anymore because I only have trusted servers there
  207. 22:49because all of the public stuff that I'm hosting is in my co-location so so a lot of changes over the
  208. 22:54last year and more to come for sure that is a lot on hypervisors and a lot on Proxmox because I love
  209. 23:01Proxmox it's awesome but there's one more thing with Proxmox it's not Proxmox itself but it's Proxmox
  210. 23:06backup server so I use Proxmox backup server to back up all of my machines and this Proxmox backup server
  211. 23:13lives in a virtual machine on my machine back here at home the cool thing is is that I have it configured
  212. 23:21as a target for both my co-location machines and my machines here at home so you can see I created two data
  213. 23:29stores TrueNAS dc and TrueNAS home so TrueNAS that's the name of where the storage lives so it's living on
  214. 23:37TrueNAS over nfs it's a little bit of a hack but it works great might change it in a little bit but not
  215. 23:44important I have a data store that's stored on TrueNAS for my data center and one for home and you can see
  216. 23:51I'm not too bad so the data center is using 504 gigabytes and home is using 2.62 terabytes now you
  217. 24:01can tweak your backups with garbage collection jobs prune jobs tell it how many you want to keep how
  218. 24:07many you want to let go and how often all of those jobs run but the cool thing about it is it de-duplicates
  219. 24:14a lot of this too so even though I have what 504 gigs that's used in this data store I think if i
  220. 24:21restored that it'd be a lot lot more than that because a lot of things are de-duplicated like
  221. 24:27things in the os and stuff like that I think that's how it works but yeah it works great and if you're
  222. 24:33curious about what it can and can't do I got a short video on it just explaining an overview of how to do
  223. 24:38it and how I set mine up as for storage I'm using TrueNAS for all of my storage services that means
  224. 24:45smb nfs I scuzzy and even object storage and I'm running the electric eel version which means I have
  225. 24:52Docker for apps instead of Kubernetes but you can see some of my stats about my nas I have a 128 gigs of
  226. 24:59ram I have a pretty okay cpu in here it's a bronze Intel xeon it only has six cores running at 1.9
  227. 25:07gigahertz now that's great for power usage it's a low power Intel if there's such a thing but
  228. 25:14it's pretty good on power all things considered and I do need a xeon because I need all of those lanes
  229. 25:20could be amd but I'm just saying I need a server grade processor so I get all of these lanes for all
  230. 25:26of these devices in here so if you want to see how my discs are laid out I think we can go right here but
  231. 25:33i have five mirrors that are too wide so I have mirrored v devs and I have five of them so I have
  232. 25:3910 14 terabyte drives in there and so I'm kind of losing half of my storage because I'm using mirrored
  233. 25:45v devs but I did that because it's easy to expand my pool by just adding two more drives and that's why
  234. 25:52i did it plus some performance reasons even though it's kind of expensive you know every time I need to
  235. 25:57add more storage you gotta buy two drives and I get half of that storage I decided that you know
  236. 26:02that's best for me for right now kind of committed to this because I don't have a really good way to
  237. 26:09move that data off to something else you know I don't have 40 terabytes somewhere where I can move
  238. 26:14this off and then change my layout and move it back on so I'm kind of you know stuck with it for a
  239. 26:20little bit but there might be something in the future that could change to where I can do that so
  240. 26:25anyways but you can see I have a log v dev or my slog so I have a mirror two wide and that's a
  241. 26:32112 gigabyte Intel Optane drives and I have those mirrored and then a cache drive which I probably don't
  242. 26:41need but I put them in there anyways I have two of those as well no spare v devs and nothing for
  243. 26:47dedupe so it's you know a pretty standard installation you can see here you know mirror mirror mirror
  244. 26:55mirror and then two cache drives and then my log or my slog is also mirrored and I think I'm going to
  245. 27:03optimize this in the future and move my metadata off the main pool just so I can get some better
  246. 27:10performance when I open up folders that have you know hundreds of files I notice it kind of crawls
  247. 27:15but I do have folders that have hundreds of thousands of files inside of them so I think
  248. 27:20moving my metadata to a group of super fast drives that will help speed up some performance I don't
  249. 27:26know we'll see I have two 10 gig NICs on here and they're bonded and set up in a LAGG as far as
  250. 27:32applications go I only have one application running on here right now and that's Minio or Min IO and
  251. 27:38that's object storage and so if you think of things like S3 or Google Cloud storage GCS or whatever Azure
  252. 27:46has for storage it's really just S3 or object storage and this is the open source self-hosted
  253. 27:53version and so this is really handy because a lot of my backups or a lot of my services at least in
  254. 27:58Kubernetes or containers they always like to back up to object storage which is awesome I agree it should be
  255. 28:03object storage and so I want to host that myself and so I host it with Minio now Minio used to be on
  256. 28:10TrueNAS proper it wasn't an application and then they took it off and now it is an application which
  257. 28:15i think is the right way to go too I'm most likely going to move all of my home production services here
  258. 28:23and that's something I'll talk about a little bit later too but the gist of it is I want
  259. 28:29something a little bit more simple for my home production I want to make sure that when I hit a
  260. 28:34button for Home Assistant it's going to work I want to make sure that Plex is always up and running and
  261. 28:40the highest available of all of my servers is my nas if my nas is down there's big problems you know I do
  262. 28:48everything possible to keep my nas up and it should be always running in my environment and so since my
  263. 28:53nas is always running I figure some of my home lab services in my home production should run here too
  264. 29:00and by home production I mean all of the services that I need and rely on and depend on and my home lab
  265. 29:07stuff that runs on my knock and elsewhere are things that can be down and no one will notice that's kind of how i
  266. 29:12separate it if I'm running services and they're down and someone notices you know then I should
  267. 29:18consider that home production so I'm going to move all of them here another reason why I do it too is
  268. 29:23because well I get easy snapshots I get a lot of caching and performance that I get from my TrueNAS stuff
  269. 29:29at least I think I do with TrueNAS I need to look into that but I've done so much to optimize my TrueNAS
  270. 29:36server and now that they have Docker it just totally makes sense to put all of my containers running here
  271. 29:41and I'm pretty excited for it I really am now that we're past hypervisors and backups now it's time for
  272. 29:47DNS the DNS that I am still using is PiHole I don't see any reason to change it anytime soon I know that
  273. 29:56UniFi Network can now manage CNAMEs and do DNS for you and there are other DNS systems out there but
  274. 30:04I'm super comfortable with PiHole it lets me easily create DNS records cname records and I can replicate
  275. 30:11those across all of my nodes with Gravity Sync now I know that there are better things out there but
  276. 30:18i like PiHole and it works really good gives me easy way to disable stuff gives me an easy way to
  277. 30:25see which domains are being used gives me an easy way to block domains I get ad lists I get a lot of
  278. 30:31stuff and it works really really good so I don't see a reason to change I kind of want to keep things
  279. 30:37semi-simple at home because I'm a person of one so PiHole is just that for me it works great I can't
  280. 30:44complain and so the way that I have my DNS set up I have actually I have three DNS systems here at home
  281. 30:51so I have you know DNS1 DNS2 and dn S3 and then I use kube-vip to create a virtual ip for my second DNS it's
  282. 31:01it's a little wild but there's a method to my madness so if you look at it think of this like this is my
  283. 31:09primary DNS so it's 192.168.60.10 and then the vip that keepalived creates
  284. 31:18is my second DNS that I hand out in my DHCP scope and so this one is actually .22 so let me
  285. 31:26label this one two three so the reason I did this is because these two right here are actually virtual
  286. 31:36machines within my home lab well if that big server rack goes down or I reboot my hypervisors or whatever
  287. 31:44the thing tips over or gets disconnected normally that would mean I don't have DNS but number three
  288. 31:51will save the day because this is on the wall and this is a pi zero and it's running PiHole and this vip
  289. 32:00will still be up but now the traffic will be routed to here so it gives me a super simple low power way
  290. 32:06to still serve out DNS if my whole entire server rack goes down which it happens you know I need to
  291. 32:11reboot stuff or accidentally unplug stuff so that's why I did that but then to make matters even more
  292. 32:18confusing what I ended up doing in my co-location is spinning up two more PiHole servers and think of this
  293. 32:26really like four and five so this is what I was saying I have five DNS servers but what I realized
  294. 32:34is that if I have a vpn connection to these you know I might need to access the same DNS records here at home
  295. 32:44and here in my co-location what I ended up doing is running Gravity Sync and synchronizing everything over
  296. 32:53so really one is my primary DNS and this is where I make all of my changes so I make all of my changes
  297. 33:01here then Gravity Sync will push these changes out to all of these machines so I had to do very little
  298. 33:09besides spin these up and set up Gravity Sync and just tell it hey number one is the source of truth
  299. 33:16so it's pretty awesome it shares lists shares DNS records shares c names so it works out really really
  300. 33:22good so this is why I have five DNS servers I think it worked out pretty good I mean you know this is
  301. 33:27like me hacking and homelabbing and trying to do a colo at the same time I think it turned out pretty
  302. 33:32good I do wish that PiHole had first class support for this maybe in version two but to be able to
  303. 33:38run these you know in a cluster and be able to easily synchronize them would be great but in the meantime
  304. 33:44we have tools to do this so the only thing I have to keep telling myself is never make changes on any of these
  305. 33:50these always make my changes on one and those will replicate out so pretty fun it's been fun figuring
  306. 33:57out all this with PiHole it's pretty versatile as you can see for home security I'm using UniFi Protect
  307. 34:03huge fan of UniFi Protect it's such a great application and on top of that you know the cameras are
  308. 34:10relatively cheap for what you get and on top of that it's all local so all of this is recording local on my
  309. 34:17nvr now I used to have that UDM SE that had one drive in there but I ended up buying an nvr and that
  310. 34:24has four drives so you can see that my storage capacity right now is going back 33 days it's
  311. 34:31pretty good I need to add another drive in here and I could probably get some more storage but 33 days for
  312. 34:36almost 10 cameras is pretty good you know and not only does it keep these recordings local but a lot of them
  313. 34:42have smart oh you can oh you can see right here I hooked a camera up to my 3D printer so I'm printing
  314. 34:48a spool right now and not only does all of this stay local I also get AI features like object detection
  315. 34:54and facial recognition and stuff like that with these cameras so huge huge fan of protect it just keeps
  316. 35:01getting better now containers are a huge topic so I'm gonna break this up into two sections first we're gonna
  317. 35:07have containers or the engine that I use and run and then we'll have orchestration basically Kubernetes
  318. 35:13spoiler alert but with containers I actually made a big change this year and moved stuff back to Docker
  319. 35:21for a long time I was going all in with Kubernetes at home and since I was hosting things at home and since
  320. 35:28I was also hosting my public services at home it got pretty complicated pretty quick you know I always had
  321. 35:34to be sure that I was deploying things to the right vlan or to the right node to be sure that hey this is
  322. 35:41the public facing service and not an internal service and I did a pretty good job at it but I realized it was
  323. 35:47just getting way too complicated now I manage a lot of clusters at work and I still manage all of my
  324. 35:53public services with Kubernetes those three clusters that I have and some of my home services
  325. 35:59but I decided that my home production now is going to be Docker along with less comPlexity there are
  326. 36:05actually less points of failure now too if you think about it with Kubernetes it could be one of any no
  327. 36:11those points of failure and so I ended up creating a virtual machine in Proxmox that has all of my
  328. 36:38containers running so this is my home production right now virtual machine running Docker on Proxmox
  329. 36:44that's going to change here in a little bit and even though I'm showing you Portainer I manage all of
  330. 36:50this with Docker Compose now I use Portainer every now and then just to see how things are doing or to
  331. 36:55look at the logs but for the most part I SSH into that machine and then manage them there so there you
  332. 37:03can see I have my AI stack we'll talk about that a little bit later my Home Assistant stack still
  333. 37:08going to talk about that home page which we talked about Plex which we're going to talk about too
  334. 37:14Portainer, Scrypted we'll talk about Tautulli, Traefik, and Watchtower so these are all stacks that
  335. 37:20are running on that virtual machine but soon as I mentioned earlier I'm going to be moving all of these
  336. 37:25containers over to TrueNAScale so since TrueNAScale has containers now and has Docker support and not
  337. 37:32Kubernetes I'm going to put all my containers there and I mentioned that earlier but I wanted to make it
  338. 37:38clear that I'll no longer have a vm running Docker on it I'm moving all of that to TrueNAScale and
  339. 37:43running that there so it's only one point of failure and that nas has pretty good uptime because if that
  340. 37:50nas is down there are lots of problems so lots of migrations still yet to come and for container
  341. 37:55orchestration I'm using Kubernetes how'd you guess but I am using Kubernetes I have three Kubernetes
  342. 38:02clusters we talked about a little bit earlier and I'm using Rancher to manage all of that so how does
  343. 38:07that work well I made a lot of changes to my Kubernetes clusters this year especially so my Rancher
  344. 38:14cluster is running RKE2 and it's upstream of everything else so if you think about it I installed
  345. 38:20RKE2 then I started running Rancher on there and then from there I provisioned more clusters downstream
  346. 38:28so I have my home cluster downstream and I have my public cluster downstream but this is really cool
  347. 38:34about Rancher is that I can manage all three of these clusters right from here and so I have a single
  348. 38:40pane of glass to manage all of my clusters if I wanted to do something like make a single node
  349. 38:47cluster on my store nader after I move everything out of there which I might do I easily could a cluster
  350. 38:53of one give it all rolls and then I manage it here from Rancher so pretty awesome now I will say that i
  351. 38:59use this ui basically for read only this is just my dashboard to inspect things really quick or to quickly
  352. 39:06kill a pod or anything like that but it's an easy way for me to see how my cluster is doing
  353. 39:11for mobile or from web without SSH-ing into those machines I use GitOps to manage the state of my
  354. 39:18cluster and I'll talk about that here in a little bit but I'm a huge fan of Rancher even if I had a
  355. 39:23cluster of one I probably would install Rancher on it just because I get so many features from it and I get
  356. 39:29so much visibility from it and it's so accessible through a website now I know a lot of people are going to
  357. 39:34say it uses a lot of resources yeah but I get a lot of use out of those resources I get a lot of value
  358. 39:40out of installing it and managing clusters and now I'm managing three clusters pretty soon it'll be four
  359. 39:45clusters and so doing it this way or at least provisioning those clusters with Rancher and having
  360. 39:52them all report back to Rancher is awesome it's golden I love doing it and upgrades are super simple too
  361. 39:58but I do a lot of that with GitOps too so just think of Rancher at least for me as a way to create and
  362. 40:04manage new Kubernetes clusters and when I say manage I don't mean manage deployments I mean manage nodes
  363. 40:11add remove nodes things like that so in my home cluster are all of my home containers so it's some
  364. 40:17of the services you've already seen some that you will see and then it's a test bed for a lot of my other Kubernetes stuff
  365. 40:24public is where all of my public services are running so these are things that are publicly available to
  366. 40:30really anyone and then obviously as I mentioned a few time I have my Rancher cluster which manages the
  367. 40:36state of all of the clusters and it's an easy way to create new clusters you know for example if I wanted
  368. 40:42to create a cluster I could click create there I could say hey it's going to be a harvester or a custom cluster
  369. 40:50custom is probably what I want I would choose my Kubernetes version RKE2 or K3S you know choose the one I want
  370. 40:58and then I would choose a unique name so I would call it test
  371. 41:03and then I would click create I'm not going to do it and then from there it would give you a couple cli commands to run on
  372. 41:10any Linux machine and they'll automatically join the cluster and give it the roles that you tell it so
  373. 41:16super easy to create a Kubernetes cluster once you have this running and the other kind of containers i
  374. 41:21now run are LXC containers so what are LXC containers well they're lightweight Linux containers that
  375. 41:28actually share the kernel with Linux so they're not totally isolated but you can think of them as simple
  376. 41:35lightweight virtual machines that's the way I like to think about them but it actually shares the kernel
  377. 41:40the kernel with the host that it's on so super awesome super fast so if you don't like Docker containers
  378. 41:46or cri containers where you're basically isolating an application LXC might be for you because you can
  379. 41:53create an LXC container install what you want and manage it almost exactly like a vm but with a fraction of the
  380. 41:59resources so I talked about this a little bit earlier and what they are but my HA Proxy Mongodb these are all
  381. 42:05containers right here that I'm running right on Proxmox so super cool if you want an easy way to
  382. 42:11create containers or virtual machines you check out Proxmox helper scripts I have a video on it super
  383. 42:16awesome if you're new to Proxmox it's great or even if you know everything about Proxmox it's still really
  384. 42:21awesome to be able to run these scripts to create a lot of these services so check it out I have a video on it
  385. 42:26so get ops is a huge topic and if you don't know what get ops is it's really just a practice that says
  386. 42:32that your git repo should be the source of truth and so what people like to do is create infrastructure
  387. 42:40as code so what they'll do is write code which is their infrastructure and they'll use a CI process
  388. 42:47to deploy that out to whatever the system is and so a good example of this is with Kubernetes so if i
  389. 42:53want to for example deploy home page right here in my home cluster this is how I do it I would commit this
  390. 43:00resource to my GitHub repo I would push it up and then there's a CI process that will deploy that and so
  391. 43:08what you end up doing is not really managing your cluster through a ui or through manual convention
  392. 43:15you do it all through git so really your git repo becomes the source of truth rather than the cluster
  393. 43:21itself and this is why I was saying earlier with Rancher I don't make any changes in the Rancher ui
  394. 43:27i make changes to yaml deploy that yaml push it up in a commit and then the process will take over which
  395. 43:35is Flux and apply those changes so Flux is what I use for GitOps it's pretty awesome there's also
  396. 43:41ArgoCD which is really awesome I just got into Flux really early and so I'm still here on Flux I do want
  397. 43:48to check out ArgoCD I don't really want to rewrite a lot of this though for ArgoCD maybe I'll do it for
  398. 43:55my public cluster because there's less running there but really cool I do wish there was GitOps for
  399. 44:00Docker it's kind of seems like an oxymoron doing production stuff with Docker Compose but I wish there
  400. 44:06was a way to do GitOps with Docker Compose because I think that would you know satisfy both of my needs
  401. 44:11uh for wanting to keep things simple and doing Docker and yaml but at the same time using my git repo as the source of truth
  402. 44:19and then having that deploy some way so it totally is something that no one should ever build but I would love it if someone did
  403. 44:27and then along with GitOps I actually use a tool called Renovate to help me manage my updates and it's really cool so I self host this thing from mend called Renovate and it's a bot that's running in my cluster and that bot will go out and check
  404. 44:43and check some of the resources that I have and see if there are newer versions of those resources so for example if you could see on get home page I'm using version 0.10.19
  405. 44:54but if we look at the last change right here you can see I got a pull request from techno boto that's my bot
  406. 45:01to make a change and this change is replace this line right here with this line and you can see the container image went from 0.10.6
  407. 45:10to 0.10.9 and so it saw that there was an update in this container opened up a pull request and then I got a pull request from this bot and all I have to do is approve it
  408. 45:22that's what's cool about git ops 2 so after I approved and merged in that PR the GitOps process takes over and it will deploy the latest version of this container so it's really awesome I don't need to manage updates anymore
  409. 45:35at least not in conventional ways I wait for a pull request from a bot that shows me not only the
  410. 45:42version but also some of the differences if there's differences in the chainsaw and then I get to decide
  411. 45:48whether I want to update it or not and I do that all from a mobile device or web page just saying yes
  412. 45:54approve and a couple minutes later you know I get the latest version of container so it's another reason why I love
  413. 45:59get us but I use Renovate to do that for my reverse proxy I'm still running Traefik now I think I have
  414. 46:06four instances of Traefik running so I have Traefik running on my Docker machine to serve all of my
  415. 46:12traffic over https along with certificates for all of my home and home production stuff then I think I have
  416. 46:20three or four instances of Traefik within Kubernetes and those are for different things like I have an
  417. 46:27internal version of Traefik running in Kubernetes to serve traffic you know to me over the vpn versus out
  418. 46:35publicly and then I have another instance of Traefik that's used for a reverse proxy to serve that traffic out
  419. 46:42publicly with certificates now that's a lot of information and if you don't know what a reverse
  420. 46:49proxy is at its core a reverse proxy is a proxy that takes requests and will send those requests based on
  421. 46:58their http headers to downstream services if you think about it you could have your reverse proxy in front of
  422. 47:06different services like TrueNAS or Proxmox or Rancher and so that's what's handling those requests and as
  423. 47:14they come in it will look at the header and see where it should be routed and then route it accordingly
  424. 47:20according to your configuration so you know it's a reverse proxy because if you think of a forward proxy
  425. 47:26you know everyone coming together and going through one thing well this is reverse it's everyone coming in
  426. 47:33and then going out to different things so I love Traefik I've been running it for a long time I run
  427. 47:38it in Docker now and three or four on Kubernetes it's great in the Docker version I use Traefik to get
  428. 47:44my certificates from let's encrypt using cloudflare let's encrypt and that works great for Docker in
  429. 47:52Kubernetes I'm using cert manager to manage my certificates and all that's really doing is saying hey
  430. 47:58Traefik isn't responsible for getting and storing my certificates cert manager is so cert manager will
  431. 48:05actually do that it will go out request new certificates pull them down put them as configuration
  432. 48:12within Kubernetes and then Traefik can use those since it's a shared resource within Kubernetes so in
  433. 48:19Docker I use Traefik to get and manage certificates in Kubernetes I use cert manager to do it but then
  434. 48:27they're still used by Traefik so a little bit of nuance there monitoring and logging and I wish I had
  435. 48:34a better story for this so last time I was saying yeah I want to do more monitoring logging don't we all
  436. 48:40and at that time I was using Uptime Kuma to monitor some of my services especially my internal services and
  437. 48:47now that my internal services are kind of all spread out I took down Uptime Kuma and I'm not actually
  438. 48:54monitoring anything internal I know that's bad I wait for someone to scream but for external
  439. 49:01services I monitor all of those with uptime robot so I don't need to worry about my public services being
  440. 49:07monitored I still want to monitor some of my internal services now I did stop using Uptime Kuma even though
  441. 49:13it's great had nothing to do with it itself although it does get slow sometimes I mainly stopped using it
  442. 49:19because it uses a sqlite database and that sqlite database required storage in Kubernetes which is
  443. 49:28kind of a nightmare and that storage would either get corrupted or that storage would disconnect from my
  444. 49:34pods and it would be down so the last time I used it it did get corrupted and I said I'm not using it anymore
  445. 49:40so now that it's going to Docker and it's going to live on my nas yeah I'll probably end up using it
  446. 49:46again it's just that Kubernetes made it a little bit complicated and I think there's a version of uptime
  447. 49:52kuma now coming that uses MariaDB which I'm excited about because it means the state of your Uptime Kuma now
  448. 50:00lives in a database versus a sqlite database that's on disk so much better architecture coming in the
  449. 50:08future looking forward to that I did use Gatus for a little bit and it's a great monitoring system a
  450. 50:13little bit different than Uptime Kuma I think it has more of a developer lens on it but the nice thing
  451. 50:18about Gatus is that it's stateless so you manage all of the configuration and code with yaml and that will
  452. 50:24configure all of your uptime monitors that way so you're not doing it through a ui so pretty cool for
  453. 50:29Kubernetes because you can use a config map for the configuration and then it's totally stateless and
  454. 50:35then you can scale it and you don't need to worry about storage but since I moved a lot of my home
  455. 50:40prod services out of my home Kubernetes cluster I didn't have a use for Gatus for monitoring internally
  456. 50:47anymore so anyways a lot to figure out there if you want something that's cool and different Gatus is
  457. 50:53the way to go I have a video too for data visualization I'm embarrassed to say I'm not using Grafana
  458. 50:58now I've used a lot of those tools at work in the past and I kind of decided that I don't want to use those
  459. 51:04tools here at home too now I might set those up for my co-location because that's a little bit different
  460. 51:10that's running Kubernetes but for here at home I ended up finding out that Home Assistant is actually
  461. 51:17really good to monitor and visualize some of your services at home now I'm not talking about monitoring the
  462. 51:24temperature or humidity in your home lab I'm talking about monitoring things like Proxmox
  463. 51:30TrueNAS Docker you name it as a quick example I set up a quick dashboard with Plex with PiHole with
  464. 51:37TrueNAS and even some of the services that are running on TrueNAS and I can manage it all from here
  465. 51:43so if I wanted to turn FTP on and off right here I could or if I wanted to see who's watching something
  466. 51:49on Plex I definitely could or to see PiHole or quickly toggle it off to get around the PiHole
  467. 51:57blocking system and then toggle it back on when I'm done so there are lots of services that are already
  468. 52:03compatible with Home Assistant and a lot of these do charting too for instance I created a network
  469. 52:09dashboard and these are all of my network devices so my efg my access points my switches and you can
  470. 52:17see right here I created this little chart to see how many clients are connected to each one of these
  471. 52:22wireless devices so on this one there's 13 on this one there's 26 and on this one there's five and there's
  472. 52:30a lot you can do this is only kind of scratching the surface I think I might continue to use this
  473. 52:35uh really because it puts all of this data in Home Assistant which I'm already using and I have an app
  474. 52:42for it so pretty cool I'm going to see if I can make some pretty cool dashboards too I have a video
  475. 52:47on this covering all of this it's it's really cool if you want to use Home Assistant for something like
  476. 52:52that um it's definitely better than nothing is it as advanced as Grafana and loki no not at all and
  477. 52:59I'm looking for simplicity along with a good user interface and so Home Assistant gives me all of
  478. 53:05that so speaking of home automation all of my home automation is running on Home Assistant one of the
  479. 53:12biggest changes I made this year was moving it out of Kubernetes and into Docker and then this year
  480. 53:18I'll be moving it from a Docker vm on to TrueNAS itself but Home Assistant need I see more I mean I can
  481. 53:25remote control everything in my house I keep adding more and more things to Home Assistant and it seems
  482. 53:31like every day there are more and more services that are being added you can see a list of services that
  483. 53:37i have configured here and some of the entities that I have configured and then from here you can see
  484. 53:42quite a few devices that are connected so my goal is to connect everything to Home Assistant and then if I need to do things downstream from there I will what do I mean by that well my wife and I use a lot of
  485. 53:53what do I mean by that well my wife and I use home kit and it's nice to have you know the home app on apple
  486. 53:58or tell Siri to do stuff and the way that I do that is connect all the devices to Home Assistant first and
  487. 54:04then expose them to home kit with home kit bridge and so all of the non-certified devices I can get into here
  488. 54:11and expose them as certified devices so that gives us some more automation like with apple TVs or Siri and stuff like that
  489. 54:19uh but for the most part I try to get everything in Home Assistant first and I've been managing some of
  490. 54:23my more comPlex automations here so yeah last year it was only kind of being used for a few things now
  491. 54:30everything's in here I mean you can see my 3D printer is in here right now I mean that's that's how far it's
  492. 54:36going so I am going to continue to use this more and more like I said not only for home automation but for some of my
  493. 54:44monitoring of some of my home lab services so really cool I love Home Assistant it just keeps getting
  494. 54:49better and better I talked a little bit earlier about home security and I just talked about home
  495. 54:55assistant and there's kind of something that's in between which I use which is Scrypted so Scrypted can
  496. 55:01be an mbr but the way I like to look at it is it's a system or an interface that allows you to connect
  497. 55:08most any camera to most any hub and what do I mean by that well I have my cameras provided by UniFi right
  498. 55:17UniFi Protect and they're not home kit certified which means they don't integrate with home kit at all so
  499. 55:24when someone presses the doorbell I don't get a notification on apple TV or on Siri or anything like that
  500. 55:30and so what Scrypted can do is connect all of your cameras to a hub of your choice now I know it can
  501. 55:35connect to home kit I think it can Google Home Alexa and a lot of these are supported and a lot of
  502. 55:41different camera systems are supported so anyways I use this to get those video feeds into there for
  503. 55:48other reasons but I use Scrypted to do it it's open source it's awesome Scrypted can also be used as an
  504. 55:54mvr too so really cool piece of open source software for a link page I use my link page still and it's
  505. 56:02Little Link and this is an open source project that I host on GitHub a lot of people have contributed to
  506. 56:07it but if you ever find yourself needing to host a bunch of links you can do it with this it's a Docker
  507. 56:13container that runs super small lightweight and it's all configurable with environment variables so you
  508. 56:20have to do very little pass in a couple environment variables and you get buttons that you can click
  509. 56:25on to go different places for a link shortener I still use Shlink now Shlink is open source
  510. 56:32self-hostable and I can create a whole bunch of urls and then shorten them with my custom domain
  511. 56:38you don't know what I'm talking about think bitly but self-hosted open source and hosted within my
  512. 56:45infrastructure you can create as many links as you want and send them wherever you want and you also
  513. 56:50get some counts and metrics about those links I've looked at a lot in this space and this is the most
  514. 56:56modern and I think the most well architected system that's out there uses Postgres on the database
  515. 57:01they've separated the api from the client like this is production ready and I use it in production and so
  516. 57:07most of my links that you see the l.technotim.live.docs will take you to my documentation page and so that's
  517. 57:14helpful if I ever need to change a link let's say one day I don't want to host my docs on technotim.live
  518. 57:20anymore change that boom it's done everywhere so it's great to run even if you need to manage just
  519. 57:25a few links for my media server I'm using Plex I don't need to tell you how awesome Plex is but i
  520. 57:31think it's really awesome especially for recording live TV and over the air TV and I've been doing that for
  521. 57:38for many many years going back to windows xp media center edition so I have a long history of recording
  522. 57:44over the air TV and I do it here too so that hd home run quad gives me four tuners or four separate
  523. 57:52channels if you will to record different channels within Plex and I can also stream up to four although i
  524. 57:58only use one the other cool thing about recording TV is that you can skip commercials it'll look for
  525. 58:04commercials and you can either cut them out or skip them I usually mark them as skip which makes watching
  526. 58:10the things I want to see that much better because they don't have commercials and then this also saves
  527. 58:15me from getting subscriptions to other services like Hulu or Peacock this used to be running on a
  528. 58:20bluetooth virtual machine then I moved it to Docker then it was running on windows now it's back on Docker
  529. 58:27on a virtual machine but soon I'm going to move it over to my nas along with everything else for power
  530. 58:33management I'm still using NUT Server now I use NUT Server to manage three of my ups so I have a Tripp
  531. 58:40Lite UPS as you can see here I have my apc backup that's on the wall and then I have an Eaton UPS that's
  532. 58:48in there too and this is this device here now it's really nice because it's hard to see this data
  533. 58:54otherwise and the other nice thing about NUT Server is that you can coordinate shutdowns
  534. 58:59now I used to do that but a couple of times it didn't work out so well so I've kind of eased back
  535. 59:05and I disabled that feature of NUT Server but it's there if you need it say for instance you want to
  536. 59:10shut down a machine safely when there's only 10% battery left you can totally do that but NUT Server is
  537. 59:16a great way to look at your ups and see how it's doing at a glance I do wish there was something newer
  538. 59:23than NUT Server and there kind of is there's this self-hosted service you could run called Peanut
  539. 59:29and what it's doing is something I like which is giving a modern facelift to NUT Server itself and we
  540. 59:36could see my different devices that I was just seeing in NUT Server you can switch between them and it will
  541. 59:43plot out all of this data on this chart the one thing though is that none of this data persists so you'd have to keep this open for a really long time
  542. 59:52and I hope in the future that some of this data gets persisted maybe to a database or something like that
  543. 59:57so we can see all of this data over time because it's only good for right now like I said unless you
  544. 1:00:04leave it open then you'll see it plotted but still this is a great start to making a more modern version of
  545. 1:00:10NUT Server content management systems I think last year I had three so I was running Wordpress I was running Ghost blog
  546. 1:00:19and I was also running wiki js now I'm down to one I wanted to get down to one and the way that I did
  547. 1:00:27it was by shutting down two of the three so I did shut down my Wordpress blog because a lot of it was
  548. 1:00:33redundant with what I'm doing now on my documentation so I shut that down and I was actually glad to shut
  549. 1:00:38down Wordpress because it's kind of a nightmare to manage and then I shut down wiki.js we were using it in our
  550. 1:00:45Discord server for a while but then they released version two and there was no upgrade path and I
  551. 1:00:51think we all just kind of stopped using it so since it wasn't getting any use with our Discord server I
  552. 1:00:57did retire that and so the last one that's up in my environment is Ghost blog and that's for my wife's
  553. 1:01:04portfolio so only one cms system and it's Ghost blog which I think is the best out right now as far as static
  554. 1:01:10site generators go I'm running two still so I'm running Jekyll and I'm running Hugo now they're
  555. 1:01:16kind of the same they're both older tools but the idea behind a static site generator is that you write
  556. 1:01:23markdown and then it will generate mark up for you so for instance with my documentation site all I need
  557. 1:01:31to do is write these articles in markdown save them and then when it generates the markup you get nice
  558. 1:01:38looking articles like this and they're great if you're not a designer or not really good at creating
  559. 1:01:43uis because you can just focus on the content that you're writing and then the markdown generator the
  560. 1:01:49markup generator will make it look nice for you and also I like managing even my documents as code so I write
  561. 1:01:57this as code it runs CI CD against it it transpiles or generates the markup for me and then it puts it
  562. 1:02:05in a container and then it puts it out in the public web actually in my Kubernetes cluster and then it's
  563. 1:02:11out in the public web and then I do some stuff with globflare tell it to flush the cache but
  564. 1:02:16again I have CI and CD for this too and I like doing it this way because it lets me manage my content as code
  565. 1:02:23speaking of CI and CD I'm actually using two solutions right now so CI is continuous integration
  566. 1:02:32and CD is continuous delivery so what does that mean really they're just concepts if you think about it
  567. 1:02:38continuous integration basically says like hey we're gonna continuously integrate what you're working on
  568. 1:02:45with the rest of what everyone else is working on so if you think of this like code it's like hey you work
  569. 1:02:51on your own branch at some point you want to merge that branch into the main branch and that's when
  570. 1:02:57your continuous integration would run and so you might run tests you might build containers you might
  571. 1:03:02do anything you want to do but that's the continuous integration piece and then on the delivery side a lot
  572. 1:03:09of people think of it like deployment it can be deployment but on that side you're delivering some
  573. 1:03:14value now that could be an updated website some features it could be dropping off you know a zip
  574. 1:03:20file somewhere it's really up to you and there really isn't a great definition for it at least as far as
  575. 1:03:27what you deliver and so really it's just automating that entire process of building testing and delivering
  576. 1:03:34some content or delivering software to someone else so I use two solutions for that I use GitHub and GitLab
  577. 1:03:42and GitLab those are source control systems but with each they now have CI integration I mean GitLab's had it from the beginning
  578. 1:03:49I'm getting and so GitLab has pipelines and runners so when I commit code at least specific code in my private GitLab
  579. 1:03:57i have runners that will pick up that job and run the CI tasks and so those runners are hosted in my
  580. 1:04:05Kubernetes cluster in my public cluster and each time I push up code to a private repo that I have it'll pull
  581. 1:04:12it down run it build it deliver it deploy it whatever whatever it needs to do and that's all running in my
  582. 1:04:19Kubernetes cluster in the co-location and then I also have GitHub runners for GitHub actions GitHub does it a
  583. 1:04:25little bit different but have things called GitHub actions that run pipelines for you and so I created
  584. 1:04:32runners that run here that actually run those actions and it sounds kind of complicated now I did that
  585. 1:04:39specifically because I have a K3S playbook that helps you bootstrap and create a Kubernetes cluster
  586. 1:04:46well I wanted a way to actually test the changes that people make so since it's open source people open up prs
  587. 1:04:54against this repo and for a while I was testing all of this on my own personal Kubernetes cluster this
  588. 1:05:02one two three four five here that I mentioned earlier and this is where I would pull down their
  589. 1:05:07branch run their Ansible playbook and see if it passed and then merge in the PR if it did that got
  590. 1:05:14really tedious really fast as you can imagine especially with more contributors so what I ended up doing was
  591. 1:05:20creating my own GitHub action runners three of them and this will run the CI for those pull requests so if
  592. 1:05:27someone makes a change to the K3S cluster Ansible playbook that I have this GitHub action runner will
  593. 1:05:33pick it up it will actually create the full Kubernetes cluster all automated all in CI and run tests against
  594. 1:05:41it and if they pass it will you know give a thumbs up or a green check mark on the CI for the pull request
  595. 1:05:48and so that's something that took a long time and it took a lot of help from a lot of people
  596. 1:05:53but it makes testing and accepting pull requests really easy because if it doesn't pass CI then
  597. 1:06:00there's no reason to merge it in so but anyways I use two different CI and CD systems because I use both
  598. 1:06:06GitLab and GitHub and then there's everything else like custom code I write to manage bots on Twitch, Twitter, and
  599. 1:06:13Discord I'm running Longhorn on two Kubernetes cluster for my Kubernetes storage I'm running netboot xyz on my network
  600. 1:06:22so that my clients can boot to network and install operating systems and that didn't fit into a category
  601. 1:06:27and I'm even self-hosting some diagramming tools that you might have seen but I didn't know where those fit in
  602. 1:06:34this has been another awesome year in self-hosting and I made a lot of changes going into 2025
  603. 1:06:40and now throughout 2025 I'm going to make some of the biggest changes yet be sure you're subscribed so
  604. 1:06:46you can see those updates I'm Tim [ASL] thanks for watching

About this transcript

This page contains the full transcript of Homelab Services Tour 2025 - What am I Self-Hosting by Techno Tim, generated from the public captions YouTube serves with the video. The transcript has 12,452 words across 604 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.

What you can do with it

Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to choose a caption track available on the video.

Free YouTube transcript tool

YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, caption language selection, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.