Homelab Services Tour 2025 - What am I Self-Hosting — Transcript
Full transcript
- 0:00It's been another awesome year of self-hosting, and after sharing my Homelab hardware tour,
- 0:05many of you wanted to know what I'm running on all of that hardware.
- 0:08Well, you're in luck because today I'm breaking it all down for you.
- 0:12From dashboards to hypervisors for virtualization, a NAS with plenty of storage,
- 0:17five DNS servers, yes, five, segmented networks across multiple VLANs,
- 0:23reverse proxies, home security, media server, link pages, link shorteners, power management,
- 0:30and so much more. I'll also give you a sneak peek at the services that I'm keeping,
- 0:35the ones I'm replacing, and some big changes I'm planning this year. Spoiler alert, I've revamped
- 0:40quite a bit in the last 12 months, and 2025 will be no different. If you're into self-hosting services,
- 0:47make sure to subscribe so that you don't miss any of my future updates.
- 0:51All right, let's dive in, starting with my networks. So I have a lot of Ubiquiti devices,
- 0:55so naturally, I'm going to use the UniFi Network Controller to manage all of my devices,
- 1:00and some of my cameras, and other things you'll see later on. But in here, you can see my network
- 1:05typology. Now, first, you can see my fiber coming in right here, and then that connects to my EFG,
- 1:12and that's my gateway into my network. That was UDM SE before this, but now it's an EFG.
- 1:20That might go back to something a little bit more home-friendly, but for now, it's the EFG,
- 1:26because I'm testing it. Then from there, downstream from there, I kind of have my core switch,
- 1:30and this is my switch aggregation pro, and I see there's a RX fault there, but I'll look at that
- 1:36later. But this is my 10 gig switch, so all of my 10 gig devices connect into here, and then it uplinks
- 1:42at 25 gig. So down from this core switch, first I'll go this way, because this goes into my studio
- 1:49here. In my studio, my first switch is the Pro Max 24 PoE. That's right over there in a mini server
- 1:55rack for all of my workstations. And then from there, it connects to the Office Flex Mini, which is
- 2:02up there behind the TV, and that's there so I can connect all of those devices that are up there
- 2:07to a network and hard-wire them rather than using wireless. And then from here, it should go to this
- 2:14USW Pro Max 16 PoE, the little short one. That's actually on my workbench back there. I've unplugged
- 2:21it because I'm tearing things apart back there and kind of redoing my office, but that should be plugged
- 2:26in. And then downstream from that are two of the 2.5 UniFi Flex switches. And those were there for
- 2:33testing and updating, but I'll probably remove those and use those somewhere else. So then if we go back
- 2:40over here again, downstream from my Switch Aggregation Pro, then I have my 48 port PoE switch, and this
- 2:47connects a majority of my devices. So downstream from this, let's just start over here, is my U7 Outdoor
- 2:54Pro. And that's outside creating a wireless bridge to my garage. And it's also giving me coverage
- 3:00outdoors. But it does create a bridge to the device bridge that's in the garage. And that's connected
- 3:07to the PoE 8 port light, which gives it power and connectivity. And from here, this connects to
- 3:13a lot of cameras and maybe some more stuff in the future. And I did have this office workbench switch
- 3:20out there just for testing. But I removed it, I should probably remove it from here and reset it.
- 3:26But if we go to the next device downstream from my 48 PoE switch, I have the PDU for power management.
- 3:32I have two flex devices, those are the ones you saw on the wall. And that's just to give me more ports
- 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
- 3:47room that's powering some cameras, it's powering a mini switch, the flex switch. And that goes behind
- 3:53my TV for the Xbox and some devices up there. And then this also powers the U6 mesh, which is that small
- 4:01little access point that I have in my living room just for some more coverage. And to give my doorbell
- 4:07some more coverage. That's specifically why I got it. And then connected to there, you might have saw that
- 4:13U7 Pro on top of my server rack. I meant to mount that a long time ago, but it actually fits nice there.
- 4:19And it covers some of the devices above there and actually some of the devices outside too. So downstream
- 4:25from this, I have the USP plug really, it's just connected over wireless. But this is an IoT device from
- 4:31Ubiquiti that will automatically toggle my ONT on and off. If it detects a problem with my internet connection.
- 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
- 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
- 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
- 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
- 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
- 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
- 5:21devices are connected. This is where all of my networking devices live and all of my Ubiquiti devices live. And the only other
- 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.
- 5:44cameras shouldn't reach out to the internet anyways they should connect back to UniFi Protect
- 5:49but just in case for some reason they decided to go to the internet one day they're not going to be
- 5:54able to make it so that's what I do wholesale across this camera vlan because I don't want
- 6:00any devices on there to ever go out to the internet they have no reason to because I self-host UniFi
- 6:06protect here then there's the iot vlan which is for all my iot devices and it's also for things
- 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
- 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
- 6:24and this is one thing that has changed my Kubernetes node isn't here I actually have a network adapter
- 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
- 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
- 6:43the iot vlan but I've taken it off since then and this is where any device goes that I test I should
- 6:49probably have my own test vlan too that doesn't have access to the internet so that I can really
- 6:55test it in isolation just in case you know something was compromised or sent to me you know compromised but
- 7:02uh right now I test them on my iot vlan then there's the main vlan for everything that I trust
- 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
- 7:13this device enough to sign into it to do taxes on it and to you know put my personal information
- 7:21on that device now would I put my personal information on any of these iot devices like no
- 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
- 7:35obviously but do I trust them enough to talk to them or to sign in with my iCloud account yes I do
- 7:42uh so this is kind of where those devices live on this main vlan then I have a guest vlan for
- 7:49everyone who never comes over because I never have any guests it's true and here's one of the biggest
- 7:55changes from last year I'm not using servers untrusted anymore since setting up my co-location
- 8:01i moved all of my untrusted servers and some of my public services there so I don't self-host most public
- 8:10services out of my house anymore so really this whole thing could go over here and then I could
- 8:17just basically say that hey this is this is my co-location over here so this would be home and this
- 8:24would be my colo over here so what I ended up doing was creating a site-to-site vpn between my co-location
- 8:31and my home so that some of my trusted devices can get to them directly and then this can serve out
- 8:38you know the services through the internet and this is how I ended up doing it I have home I have a site
- 8:44to site vpn not using tail scale that was one of my decisions and then my co-location and so I just
- 8:51traversed the network through a site-to-site vpn this is hosting a lot of my public services and then this is
- 8:57hosting a lot of my internal home lab services here if you want to see some of the decision points and
- 9:03how things are organized I have a video on that the dashboard that I'm using is home page now I switched
- 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
- 9:14customize this the way that you want it supports a lot of services as you can see a lot of them are
- 9:20connected here that's another point is that you can get data back from those services and present it
- 9:27here in a little card and it still does the simplest thing which is a link on this page to get to some
- 9:33of your services but one of the reasons why I like this the most is because it's all configuration based
- 9:39and what do I mean by that well you can configure everything about this dashboard in yaml now I know a
- 9:45lot of people don't like yaml and they want a WYSIWYG editor that's totally fine but for me personally
- 9:51i'd rather do it in yaml because then my yaml file can be easily backed up and it doesn't require
- 9:58space on the disk where this is running that's really important for things like Kubernetes because
- 10:04now this runs stateless and you don't need to mount a volume to this container and then you could scale it as
- 10:10much as you want for example we saw my hypervisor column and then in here you could see all of my pve servers
- 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
- 10:24times and get a few more Proxmox servers just by doing this then I have a containers column DNS column
- 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
- 10:38don't get me wrong they're lovely and they work great but for me I want to be able to repeat this
- 10:44super easy and keep this configuration say in a configuration store like Kubernetes my hypervisor
- 10:51of choice is still Proxmox and for a good reason Proxmox is a wonderful hypervisor not only is it open
- 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
- 11:07it in ha if you want it can run LXC containers and you can run cef to have distributed storage across
- 11:15all of these hypervisors that you're running in your cluster so lots of great features many of them i
- 11:20don't even use but I do have four nodes in my Proxmox cluster now I actually have two Proxmox clusters I'll
- 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
- 11:35Storinator to a Proxmox node rather than installing something on it bare metal because it gives me
- 11:41all of the niceties from Proxmox like backups and all of that easy to connect to shares so I decided
- 11:48that hey I'm going to turn that into a Proxmox node and then I can run all of these virtual machines on
- 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
- 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
- 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
- 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
- 12:18run and execute CI from GitHub the public version and run those runners here locally and then I have
- 12:25five test K3S nodes I'll talk about that a little bit later and what they're for and then I have pbs
- 12:31running so Proxmox backup server running as a virtual machine I'll kind of dive into that a little bit later
- 12:36then some DNS servers and some other servers just for testing you can see I was testing Unraid here true
- 12:42nas it's wonderful that I can actually test other nas systems on Proxmox it's pretty awesome and this
- 12:48is Unraid I was actually passing through the usb key where my production version of unraid was installed
- 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
- 13:00machine and I didn't need to configure anything else so the next three nodes are those Intel nux you saw
- 13:06that I said I have in a cluster and each of them are running similar VMs or containers that the other
- 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
- 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
- 13:28one node for Proxmox I put all of my one guest machines the same for two and then the same for three
- 13:35so this really helps me coordinate shutdowns so for instance if I wanted to use Ansible to patch all of
- 13:40the three devices I know that all of the three devices live on this Proxmox node 3 so I'll run my
- 13:47Ansible command to update all of these machines and then I'll update the host so xing-3 and then I'll
- 13:55reboot it and then they'll come back up and because this is ha for the most part these services will stay
- 14:01running and so I use that convention pretty much anywhere because I'll always know that if it's a
- 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
- 14:13this was for testing Postgres was for testing and then you'll see here I have my K8S home
- 14:19oh one and my K8S home worker oh one so this is one of my three Kubernetes clusters we'll talk about
- 14:27that a little bit later but this is the server node or the node that has etcd and control plane for Kubernetes
- 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
- 14:43three this dash three is running Kubernetes etcd and control plane so those three nodes just manage
- 14:51this Kubernetes cluster in the state and the api and then on each of them I have worker nodes that pick
- 14:58up some of the pods that I deploy to them so as I deploy services through Kubernetes they'll just land
- 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
- 15:09node goes down you know it'll shuffle those around and continue on working my second Proxmox cluster
- 15:17is actually in my co-location so I move those three 1u servers to my co-location and each of those three
- 15:241u servers are running Proxmox and then within each one of these I'm running different VMs and LXC
- 15:31containers that's a big change this year too so let's talk about these three again I have the same convention
- 15:38here node one as Postgres one HA Proxy one MongoDB one MySQL one Rancher one DNS one K8S public one
- 15:49and K8S public worker one it's a lot going on there and the same for two same exact thing and the
- 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
- 16:00my databases in Kubernetes now there's nothing inherently wrong with running databases in Kubernetes
- 16:06if it's architected the right way I didn't architect mine the right way and the biggest takeaway from
- 16:13this is to not use a database in a shared service server so as you can see I have a lot of virtual
- 16:21machines in here and a lot of things that are sensitive to latency databases are one and etcd is
- 16:28another and so I had databases running in Kubernetes on this host that's also hosting all of these
- 16:35containers and virtual machines so not a great mix if I had more machines what I would do is just
- 16:42dedicate a couple of nodes specifically to databases and let the databases run there then they don't
- 16:49have to worry about competing for cpu and io and network they could have their own dedicated per node so
- 16:56anyways I i learned a ton I learned that hey if I want to run databases in Kubernetes I need some more
- 17:02hardware or at least better hardware if these were all on NVMe it'd probably work which i'd love to do
- 17:08in the future and I'm thinking about doing it but anyways on this first node I have Postgres sql so this
- 17:14is the first node in this Postgres cluster and if you want to see how to configure Postgres ha I have a great
- 17:20video on it doesn't use Docker doesn't use Kubernetes I called it Postgres sql the hard way
- 17:26kind of you know a tip in my hat to Kubernetes the hard way because this is really the step-by-step
- 17:34manual way of showing you how to do it for Postgres so if you need a database and something supports
- 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
- 17:46container down and my databases will continue to run HAProxy is actually a proxy in front of Postgres to
- 17:54kind of you know field those requests and send them to the nodes that are alive and the same thing I have
- 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
- 18:07know I'm gonna have to restore it or delete it I probably should have done that already but as you can see
- 18:12i mean one is down right now and HAProxy is handling it just fine one and three up actually
- 18:18with HAProxy you only need two nodes for high availability but that's besides the point I did three
- 18:24just because I have three nodes anyways that aside it runs great then I have Mongodb if you're not
- 18:31familiar with Mongodb it's really a no sql database and so it doesn't use sql at all it uses documents
- 18:39but it's pretty popular among javascript developers and for things that aren't relational actually
- 18:46can do relational stuff now and at the same time relational databases can do schema-less or no
- 18:53sql type databases too with documents it's all crazy they're just intermingling now but anyways I use
- 18:59that for a lot of my external services and some of my internal services too so again I have three of them
- 19:05one two three this is ha could take one down pass it around and then you know one will get promoted
- 19:13and my services will continue to run same with MySQL full disclosure this isn't working exactly
- 19:20the way I want it to MySQL is a little bit harder to do than Mongo and Postgres so full
- 19:27disclosure this isn't fully working I'm not going to pretend like it is but eventually I will move my
- 19:33my MySQL stuff to hear and you're probably saying to yourself right now why isn't he using
- 19:37MariaDB why is he using MySQL well MariaDB used to be a drop-in replacement for MySQL
- 19:44now they started diverging so MariaDB is doing some things that MySQL isn't doing and some
- 19:52services that I use only are tested with MySQL and I've already found some services that don't work with
- 19:59MariaDB and it goes back and forth you might find some services that were built and tested with MariaDB
- 20:06but don't work with MySQL db so we're in a weird situation right here and I don't blame the
- 20:12developers of those services they have limited staff and they can't test every single database and so
- 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
- 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
- 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
- 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
- 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
- 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
- 21:23hosted services that I provide for people like you so my documentation some other stuff apis used to have wiki
- 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
- 21:36right here and then like my home cluster so the dash one dash two dash three are really for managing Kubernetes
- 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
- 21:51Kubernetes as well as having the api for kube control commands then I have three worker nodes one on each
- 21:59Proxmox node and that's where all of my user services run so my documentation is running on there right now
- 22:06if you go to my documentation you'll actually get routed to one of three of these because I run three
- 22:12replicas so my documentation is ha and I run three replicas and there should be one on each one of
- 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
- 22:25have you know templates other random VMs and you know all of my shares connected but this is my second
- 22:31Proxmox cluster in my co-location and since I was lucky enough to get a co-location and put my service there
- 22:38that's where I put a lot of my public services too and that's what helped shape my home network
- 22:43down so I don't need that untrusted server vlan anymore because I only have trusted servers there
- 22:49because all of the public stuff that I'm hosting is in my co-location so so a lot of changes over the
- 22:54last year and more to come for sure that is a lot on hypervisors and a lot on Proxmox because I love
- 23:01Proxmox it's awesome but there's one more thing with Proxmox it's not Proxmox itself but it's Proxmox
- 23:06backup server so I use Proxmox backup server to back up all of my machines and this Proxmox backup server
- 23:13lives in a virtual machine on my machine back here at home the cool thing is is that I have it configured
- 23:21as a target for both my co-location machines and my machines here at home so you can see I created two data
- 23:29stores TrueNAS dc and TrueNAS home so TrueNAS that's the name of where the storage lives so it's living on
- 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
- 23:44important I have a data store that's stored on TrueNAS for my data center and one for home and you can see
- 23:51I'm not too bad so the data center is using 504 gigabytes and home is using 2.62 terabytes now you
- 24:01can tweak your backups with garbage collection jobs prune jobs tell it how many you want to keep how
- 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
- 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
- 24:21restored that it'd be a lot lot more than that because a lot of things are de-duplicated like
- 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
- 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
- 24:38it and how I set mine up as for storage I'm using TrueNAS for all of my storage services that means
- 24:45smb nfs I scuzzy and even object storage and I'm running the electric eel version which means I have
- 24:52Docker for apps instead of Kubernetes but you can see some of my stats about my nas I have a 128 gigs of
- 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
- 25:07gigahertz now that's great for power usage it's a low power Intel if there's such a thing but
- 25:14it's pretty good on power all things considered and I do need a xeon because I need all of those lanes
- 25:20could be amd but I'm just saying I need a server grade processor so I get all of these lanes for all
- 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
- 25:33i have five mirrors that are too wide so I have mirrored v devs and I have five of them so I have
- 25:3910 14 terabyte drives in there and so I'm kind of losing half of my storage because I'm using mirrored
- 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
- 25:52i did it plus some performance reasons even though it's kind of expensive you know every time I need to
- 25:57add more storage you gotta buy two drives and I get half of that storage I decided that you know
- 26:02that's best for me for right now kind of committed to this because I don't have a really good way to
- 26:09move that data off to something else you know I don't have 40 terabytes somewhere where I can move
- 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
- 26:20little bit but there might be something in the future that could change to where I can do that so
- 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
- 26:32112 gigabyte Intel Optane drives and I have those mirrored and then a cache drive which I probably don't
- 26:41need but I put them in there anyways I have two of those as well no spare v devs and nothing for
- 26:47dedupe so it's you know a pretty standard installation you can see here you know mirror mirror mirror
- 26:55mirror and then two cache drives and then my log or my slog is also mirrored and I think I'm going to
- 27:03optimize this in the future and move my metadata off the main pool just so I can get some better
- 27:10performance when I open up folders that have you know hundreds of files I notice it kind of crawls
- 27:15but I do have folders that have hundreds of thousands of files inside of them so I think
- 27:20moving my metadata to a group of super fast drives that will help speed up some performance I don't
- 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
- 27:32applications go I only have one application running on here right now and that's Minio or Min IO and
- 27:38that's object storage and so if you think of things like S3 or Google Cloud storage GCS or whatever Azure
- 27:46has for storage it's really just S3 or object storage and this is the open source self-hosted
- 27:53version and so this is really handy because a lot of my backups or a lot of my services at least in
- 27:58Kubernetes or containers they always like to back up to object storage which is awesome I agree it should be
- 28:03object storage and so I want to host that myself and so I host it with Minio now Minio used to be on
- 28:10TrueNAS proper it wasn't an application and then they took it off and now it is an application which
- 28:15i think is the right way to go too I'm most likely going to move all of my home production services here
- 28:23and that's something I'll talk about a little bit later too but the gist of it is I want
- 28:29something a little bit more simple for my home production I want to make sure that when I hit a
- 28:34button for Home Assistant it's going to work I want to make sure that Plex is always up and running and
- 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
- 28:48everything possible to keep my nas up and it should be always running in my environment and so since my
- 28:53nas is always running I figure some of my home lab services in my home production should run here too
- 29:00and by home production I mean all of the services that I need and rely on and depend on and my home lab
- 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
- 29:12separate it if I'm running services and they're down and someone notices you know then I should
- 29:18consider that home production so I'm going to move all of them here another reason why I do it too is
- 29:23because well I get easy snapshots I get a lot of caching and performance that I get from my TrueNAS stuff
- 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
- 29:36server and now that they have Docker it just totally makes sense to put all of my containers running here
- 29:41and I'm pretty excited for it I really am now that we're past hypervisors and backups now it's time for
- 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
- 29:56UniFi Network can now manage CNAMEs and do DNS for you and there are other DNS systems out there but
- 30:04I'm super comfortable with PiHole it lets me easily create DNS records cname records and I can replicate
- 30:11those across all of my nodes with Gravity Sync now I know that there are better things out there but
- 30:18i like PiHole and it works really good gives me easy way to disable stuff gives me an easy way to
- 30:25see which domains are being used gives me an easy way to block domains I get ad lists I get a lot of
- 30:31stuff and it works really really good so I don't see a reason to change I kind of want to keep things
- 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
- 30:44complain and so the way that I have my DNS set up I have actually I have three DNS systems here at home
- 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
- 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
- 31:09primary DNS so it's 192.168.60.10 and then the vip that keepalived creates
- 31:18is my second DNS that I hand out in my DHCP scope and so this one is actually .22 so let me
- 31:26label this one two three so the reason I did this is because these two right here are actually virtual
- 31:36machines within my home lab well if that big server rack goes down or I reboot my hypervisors or whatever
- 31:44the thing tips over or gets disconnected normally that would mean I don't have DNS but number three
- 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
- 32:00will still be up but now the traffic will be routed to here so it gives me a super simple low power way
- 32:06to still serve out DNS if my whole entire server rack goes down which it happens you know I need to
- 32:11reboot stuff or accidentally unplug stuff so that's why I did that but then to make matters even more
- 32:18confusing what I ended up doing in my co-location is spinning up two more PiHole servers and think of this
- 32:26really like four and five so this is what I was saying I have five DNS servers but what I realized
- 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
- 32:44and here in my co-location what I ended up doing is running Gravity Sync and synchronizing everything over
- 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
- 33:01here then Gravity Sync will push these changes out to all of these machines so I had to do very little
- 33:09besides spin these up and set up Gravity Sync and just tell it hey number one is the source of truth
- 33:16so it's pretty awesome it shares lists shares DNS records shares c names so it works out really really
- 33:22good so this is why I have five DNS servers I think it worked out pretty good I mean you know this is
- 33:27like me hacking and homelabbing and trying to do a colo at the same time I think it turned out pretty
- 33:32good I do wish that PiHole had first class support for this maybe in version two but to be able to
- 33:38run these you know in a cluster and be able to easily synchronize them would be great but in the meantime
- 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
- 33:50these always make my changes on one and those will replicate out so pretty fun it's been fun figuring
- 33:57out all this with PiHole it's pretty versatile as you can see for home security I'm using UniFi Protect
- 34:03huge fan of UniFi Protect it's such a great application and on top of that you know the cameras are
- 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
- 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
- 34:24has four drives so you can see that my storage capacity right now is going back 33 days it's
- 34:31pretty good I need to add another drive in here and I could probably get some more storage but 33 days for
- 34:36almost 10 cameras is pretty good you know and not only does it keep these recordings local but a lot of them
- 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
- 34:48a spool right now and not only does all of this stay local I also get AI features like object detection
- 34:54and facial recognition and stuff like that with these cameras so huge huge fan of protect it just keeps
- 35:01getting better now containers are a huge topic so I'm gonna break this up into two sections first we're gonna
- 35:07have containers or the engine that I use and run and then we'll have orchestration basically Kubernetes
- 35:13spoiler alert but with containers I actually made a big change this year and moved stuff back to Docker
- 35:21for a long time I was going all in with Kubernetes at home and since I was hosting things at home and since
- 35:28I was also hosting my public services at home it got pretty complicated pretty quick you know I always had
- 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
- 35:41the public facing service and not an internal service and I did a pretty good job at it but I realized it was
- 35:47just getting way too complicated now I manage a lot of clusters at work and I still manage all of my
- 35:53public services with Kubernetes those three clusters that I have and some of my home services
- 35:59but I decided that my home production now is going to be Docker along with less comPlexity there are
- 36:05actually less points of failure now too if you think about it with Kubernetes it could be one of any no
- 36:11those points of failure and so I ended up creating a virtual machine in Proxmox that has all of my
- 36:38containers running so this is my home production right now virtual machine running Docker on Proxmox
- 36:44that's going to change here in a little bit and even though I'm showing you Portainer I manage all of
- 36:50this with Docker Compose now I use Portainer every now and then just to see how things are doing or to
- 36:55look at the logs but for the most part I SSH into that machine and then manage them there so there you
- 37:03can see I have my AI stack we'll talk about that a little bit later my Home Assistant stack still
- 37:08going to talk about that home page which we talked about Plex which we're going to talk about too
- 37:14Portainer, Scrypted we'll talk about Tautulli, Traefik, and Watchtower so these are all stacks that
- 37:20are running on that virtual machine but soon as I mentioned earlier I'm going to be moving all of these
- 37:25containers over to TrueNAScale so since TrueNAScale has containers now and has Docker support and not
- 37:32Kubernetes I'm going to put all my containers there and I mentioned that earlier but I wanted to make it
- 37:38clear that I'll no longer have a vm running Docker on it I'm moving all of that to TrueNAScale and
- 37:43running that there so it's only one point of failure and that nas has pretty good uptime because if that
- 37:50nas is down there are lots of problems so lots of migrations still yet to come and for container
- 37:55orchestration I'm using Kubernetes how'd you guess but I am using Kubernetes I have three Kubernetes
- 38:02clusters we talked about a little bit earlier and I'm using Rancher to manage all of that so how does
- 38:07that work well I made a lot of changes to my Kubernetes clusters this year especially so my Rancher
- 38:14cluster is running RKE2 and it's upstream of everything else so if you think about it I installed
- 38:20RKE2 then I started running Rancher on there and then from there I provisioned more clusters downstream
- 38:28so I have my home cluster downstream and I have my public cluster downstream but this is really cool
- 38:34about Rancher is that I can manage all three of these clusters right from here and so I have a single
- 38:40pane of glass to manage all of my clusters if I wanted to do something like make a single node
- 38:47cluster on my store nader after I move everything out of there which I might do I easily could a cluster
- 38:53of one give it all rolls and then I manage it here from Rancher so pretty awesome now I will say that i
- 38:59use this ui basically for read only this is just my dashboard to inspect things really quick or to quickly
- 39:06kill a pod or anything like that but it's an easy way for me to see how my cluster is doing
- 39:11for mobile or from web without SSH-ing into those machines I use GitOps to manage the state of my
- 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
- 39:23cluster of one I probably would install Rancher on it just because I get so many features from it and I get
- 39:29so much visibility from it and it's so accessible through a website now I know a lot of people are going to
- 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
- 39:40out of installing it and managing clusters and now I'm managing three clusters pretty soon it'll be four
- 39:45clusters and so doing it this way or at least provisioning those clusters with Rancher and having
- 39:52them all report back to Rancher is awesome it's golden I love doing it and upgrades are super simple too
- 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
- 40:04manage new Kubernetes clusters and when I say manage I don't mean manage deployments I mean manage nodes
- 40:11add remove nodes things like that so in my home cluster are all of my home containers so it's some
- 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
- 40:24public is where all of my public services are running so these are things that are publicly available to
- 40:30really anyone and then obviously as I mentioned a few time I have my Rancher cluster which manages the
- 40:36state of all of the clusters and it's an easy way to create new clusters you know for example if I wanted
- 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
- 40:50custom is probably what I want I would choose my Kubernetes version RKE2 or K3S you know choose the one I want
- 40:58and then I would choose a unique name so I would call it test
- 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
- 41:10any Linux machine and they'll automatically join the cluster and give it the roles that you tell it so
- 41:16super easy to create a Kubernetes cluster once you have this running and the other kind of containers i
- 41:21now run are LXC containers so what are LXC containers well they're lightweight Linux containers that
- 41:28actually share the kernel with Linux so they're not totally isolated but you can think of them as simple
- 41:35lightweight virtual machines that's the way I like to think about them but it actually shares the kernel
- 41:40the kernel with the host that it's on so super awesome super fast so if you don't like Docker containers
- 41:46or cri containers where you're basically isolating an application LXC might be for you because you can
- 41:53create an LXC container install what you want and manage it almost exactly like a vm but with a fraction of the
- 41:59resources so I talked about this a little bit earlier and what they are but my HA Proxy Mongodb these are all
- 42:05containers right here that I'm running right on Proxmox so super cool if you want an easy way to
- 42:11create containers or virtual machines you check out Proxmox helper scripts I have a video on it super
- 42:16awesome if you're new to Proxmox it's great or even if you know everything about Proxmox it's still really
- 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
- 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
- 42:32that your git repo should be the source of truth and so what people like to do is create infrastructure
- 42:40as code so what they'll do is write code which is their infrastructure and they'll use a CI process
- 42:47to deploy that out to whatever the system is and so a good example of this is with Kubernetes so if i
- 42:53want to for example deploy home page right here in my home cluster this is how I do it I would commit this
- 43:00resource to my GitHub repo I would push it up and then there's a CI process that will deploy that and so
- 43:08what you end up doing is not really managing your cluster through a ui or through manual convention
- 43:15you do it all through git so really your git repo becomes the source of truth rather than the cluster
- 43:21itself and this is why I was saying earlier with Rancher I don't make any changes in the Rancher ui
- 43:27i make changes to yaml deploy that yaml push it up in a commit and then the process will take over which
- 43:35is Flux and apply those changes so Flux is what I use for GitOps it's pretty awesome there's also
- 43:41ArgoCD which is really awesome I just got into Flux really early and so I'm still here on Flux I do want
- 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
- 43:55my public cluster because there's less running there but really cool I do wish there was GitOps for
- 44:00Docker it's kind of seems like an oxymoron doing production stuff with Docker Compose but I wish there
- 44:06was a way to do GitOps with Docker Compose because I think that would you know satisfy both of my needs
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 45:35at least not in conventional ways I wait for a pull request from a bot that shows me not only the
- 45:42version but also some of the differences if there's differences in the chainsaw and then I get to decide
- 45:48whether I want to update it or not and I do that all from a mobile device or web page just saying yes
- 45:54approve and a couple minutes later you know I get the latest version of container so it's another reason why I love
- 45:59get us but I use Renovate to do that for my reverse proxy I'm still running Traefik now I think I have
- 46:06four instances of Traefik running so I have Traefik running on my Docker machine to serve all of my
- 46:12traffic over https along with certificates for all of my home and home production stuff then I think I have
- 46:20three or four instances of Traefik within Kubernetes and those are for different things like I have an
- 46:27internal version of Traefik running in Kubernetes to serve traffic you know to me over the vpn versus out
- 46:35publicly and then I have another instance of Traefik that's used for a reverse proxy to serve that traffic out
- 46:42publicly with certificates now that's a lot of information and if you don't know what a reverse
- 46:49proxy is at its core a reverse proxy is a proxy that takes requests and will send those requests based on
- 46:58their http headers to downstream services if you think about it you could have your reverse proxy in front of
- 47:06different services like TrueNAS or Proxmox or Rancher and so that's what's handling those requests and as
- 47:14they come in it will look at the header and see where it should be routed and then route it accordingly
- 47:20according to your configuration so you know it's a reverse proxy because if you think of a forward proxy
- 47:26you know everyone coming together and going through one thing well this is reverse it's everyone coming in
- 47:33and then going out to different things so I love Traefik I've been running it for a long time I run
- 47:38it in Docker now and three or four on Kubernetes it's great in the Docker version I use Traefik to get
- 47:44my certificates from let's encrypt using cloudflare let's encrypt and that works great for Docker in
- 47:52Kubernetes I'm using cert manager to manage my certificates and all that's really doing is saying hey
- 47:58Traefik isn't responsible for getting and storing my certificates cert manager is so cert manager will
- 48:05actually do that it will go out request new certificates pull them down put them as configuration
- 48:12within Kubernetes and then Traefik can use those since it's a shared resource within Kubernetes so in
- 48:19Docker I use Traefik to get and manage certificates in Kubernetes I use cert manager to do it but then
- 48:27they're still used by Traefik so a little bit of nuance there monitoring and logging and I wish I had
- 48:34a better story for this so last time I was saying yeah I want to do more monitoring logging don't we all
- 48:40and at that time I was using Uptime Kuma to monitor some of my services especially my internal services and
- 48:47now that my internal services are kind of all spread out I took down Uptime Kuma and I'm not actually
- 48:54monitoring anything internal I know that's bad I wait for someone to scream but for external
- 49:01services I monitor all of those with uptime robot so I don't need to worry about my public services being
- 49:07monitored I still want to monitor some of my internal services now I did stop using Uptime Kuma even though
- 49:13it's great had nothing to do with it itself although it does get slow sometimes I mainly stopped using it
- 49:19because it uses a sqlite database and that sqlite database required storage in Kubernetes which is
- 49:28kind of a nightmare and that storage would either get corrupted or that storage would disconnect from my
- 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
- 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
- 49:46again it's just that Kubernetes made it a little bit complicated and I think there's a version of uptime
- 49:52kuma now coming that uses MariaDB which I'm excited about because it means the state of your Uptime Kuma now
- 50:00lives in a database versus a sqlite database that's on disk so much better architecture coming in the
- 50:08future looking forward to that I did use Gatus for a little bit and it's a great monitoring system a
- 50:13little bit different than Uptime Kuma I think it has more of a developer lens on it but the nice thing
- 50:18about Gatus is that it's stateless so you manage all of the configuration and code with yaml and that will
- 50:24configure all of your uptime monitors that way so you're not doing it through a ui so pretty cool for
- 50:29Kubernetes because you can use a config map for the configuration and then it's totally stateless and
- 50:35then you can scale it and you don't need to worry about storage but since I moved a lot of my home
- 50:40prod services out of my home Kubernetes cluster I didn't have a use for Gatus for monitoring internally
- 50:47anymore so anyways a lot to figure out there if you want something that's cool and different Gatus is
- 50:53the way to go I have a video too for data visualization I'm embarrassed to say I'm not using Grafana
- 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
- 51:04tools here at home too now I might set those up for my co-location because that's a little bit different
- 51:10that's running Kubernetes but for here at home I ended up finding out that Home Assistant is actually
- 51:17really good to monitor and visualize some of your services at home now I'm not talking about monitoring the
- 51:24temperature or humidity in your home lab I'm talking about monitoring things like Proxmox
- 51:30TrueNAS Docker you name it as a quick example I set up a quick dashboard with Plex with PiHole with
- 51:37TrueNAS and even some of the services that are running on TrueNAS and I can manage it all from here
- 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
- 51:49on Plex I definitely could or to see PiHole or quickly toggle it off to get around the PiHole
- 51:57blocking system and then toggle it back on when I'm done so there are lots of services that are already
- 52:03compatible with Home Assistant and a lot of these do charting too for instance I created a network
- 52:09dashboard and these are all of my network devices so my efg my access points my switches and you can
- 52:17see right here I created this little chart to see how many clients are connected to each one of these
- 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
- 52:30a lot you can do this is only kind of scratching the surface I think I might continue to use this
- 52:35uh really because it puts all of this data in Home Assistant which I'm already using and I have an app
- 52:42for it so pretty cool I'm going to see if I can make some pretty cool dashboards too I have a video
- 52:47on this covering all of this it's it's really cool if you want to use Home Assistant for something like
- 52:52that um it's definitely better than nothing is it as advanced as Grafana and loki no not at all and
- 52:59I'm looking for simplicity along with a good user interface and so Home Assistant gives me all of
- 53:05that so speaking of home automation all of my home automation is running on Home Assistant one of the
- 53:12biggest changes I made this year was moving it out of Kubernetes and into Docker and then this year
- 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
- 53:25remote control everything in my house I keep adding more and more things to Home Assistant and it seems
- 53:31like every day there are more and more services that are being added you can see a list of services that
- 53:37i have configured here and some of the entities that I have configured and then from here you can see
- 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
- 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
- 53:58or tell Siri to do stuff and the way that I do that is connect all the devices to Home Assistant first and
- 54:04then expose them to home kit with home kit bridge and so all of the non-certified devices I can get into here
- 54:11and expose them as certified devices so that gives us some more automation like with apple TVs or Siri and stuff like that
- 54:19uh but for the most part I try to get everything in Home Assistant first and I've been managing some of
- 54:23my more comPlex automations here so yeah last year it was only kind of being used for a few things now
- 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
- 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
- 54:44monitoring of some of my home lab services so really cool I love Home Assistant it just keeps getting
- 54:49better and better I talked a little bit earlier about home security and I just talked about home
- 54:55assistant and there's kind of something that's in between which I use which is Scrypted so Scrypted can
- 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
- 55:08most any camera to most any hub and what do I mean by that well I have my cameras provided by UniFi right
- 55:17UniFi Protect and they're not home kit certified which means they don't integrate with home kit at all so
- 55:24when someone presses the doorbell I don't get a notification on apple TV or on Siri or anything like that
- 55:30and so what Scrypted can do is connect all of your cameras to a hub of your choice now I know it can
- 55:35connect to home kit I think it can Google Home Alexa and a lot of these are supported and a lot of
- 55:41different camera systems are supported so anyways I use this to get those video feeds into there for
- 55:48other reasons but I use Scrypted to do it it's open source it's awesome Scrypted can also be used as an
- 55:54mvr too so really cool piece of open source software for a link page I use my link page still and it's
- 56:02Little Link and this is an open source project that I host on GitHub a lot of people have contributed to
- 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
- 56:13container that runs super small lightweight and it's all configurable with environment variables so you
- 56:20have to do very little pass in a couple environment variables and you get buttons that you can click
- 56:25on to go different places for a link shortener I still use Shlink now Shlink is open source
- 56:32self-hostable and I can create a whole bunch of urls and then shorten them with my custom domain
- 56:38you don't know what I'm talking about think bitly but self-hosted open source and hosted within my
- 56:45infrastructure you can create as many links as you want and send them wherever you want and you also
- 56:50get some counts and metrics about those links I've looked at a lot in this space and this is the most
- 56:56modern and I think the most well architected system that's out there uses Postgres on the database
- 57:01they've separated the api from the client like this is production ready and I use it in production and so
- 57:07most of my links that you see the l.technotim.live.docs will take you to my documentation page and so that's
- 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
- 57:20anymore change that boom it's done everywhere so it's great to run even if you need to manage just
- 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
- 57:31think it's really awesome especially for recording live TV and over the air TV and I've been doing that for
- 57:38for many many years going back to windows xp media center edition so I have a long history of recording
- 57:44over the air TV and I do it here too so that hd home run quad gives me four tuners or four separate
- 57:52channels if you will to record different channels within Plex and I can also stream up to four although i
- 57:58only use one the other cool thing about recording TV is that you can skip commercials it'll look for
- 58:04commercials and you can either cut them out or skip them I usually mark them as skip which makes watching
- 58:10the things I want to see that much better because they don't have commercials and then this also saves
- 58:15me from getting subscriptions to other services like Hulu or Peacock this used to be running on a
- 58:20bluetooth virtual machine then I moved it to Docker then it was running on windows now it's back on Docker
- 58:27on a virtual machine but soon I'm going to move it over to my nas along with everything else for power
- 58:33management I'm still using NUT Server now I use NUT Server to manage three of my ups so I have a Tripp
- 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
- 58:48in there too and this is this device here now it's really nice because it's hard to see this data
- 58:54otherwise and the other nice thing about NUT Server is that you can coordinate shutdowns
- 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
- 59:05and I disabled that feature of NUT Server but it's there if you need it say for instance you want to
- 59:10shut down a machine safely when there's only 10% battery left you can totally do that but NUT Server is
- 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
- 59:23than NUT Server and there kind of is there's this self-hosted service you could run called Peanut
- 59:29and what it's doing is something I like which is giving a modern facelift to NUT Server itself and we
- 59:36could see my different devices that I was just seeing in NUT Server you can switch between them and it will
- 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
- 59:52and I hope in the future that some of this data gets persisted maybe to a database or something like that
- 59:57so we can see all of this data over time because it's only good for right now like I said unless you
- 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
- 1:00:10NUT Server content management systems I think last year I had three so I was running Wordpress I was running Ghost blog
- 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
- 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
- 1:00:33redundant with what I'm doing now on my documentation so I shut that down and I was actually glad to shut
- 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
- 1:00:45Discord server for a while but then they released version two and there was no upgrade path and I
- 1:00:51think we all just kind of stopped using it so since it wasn't getting any use with our Discord server I
- 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
- 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
- 1:01:10site generators go I'm running two still so I'm running Jekyll and I'm running Hugo now they're
- 1:01:16kind of the same they're both older tools but the idea behind a static site generator is that you write
- 1:01:23markdown and then it will generate mark up for you so for instance with my documentation site all I need
- 1:01:31to do is write these articles in markdown save them and then when it generates the markup you get nice
- 1:01:38looking articles like this and they're great if you're not a designer or not really good at creating
- 1:01:43uis because you can just focus on the content that you're writing and then the markdown generator the
- 1:01:49markup generator will make it look nice for you and also I like managing even my documents as code so I write
- 1:01:57this as code it runs CI CD against it it transpiles or generates the markup for me and then it puts it
- 1:02:05in a container and then it puts it out in the public web actually in my Kubernetes cluster and then it's
- 1:02:11out in the public web and then I do some stuff with globflare tell it to flush the cache but
- 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
- 1:02:23speaking of CI and CD I'm actually using two solutions right now so CI is continuous integration
- 1:02:32and CD is continuous delivery so what does that mean really they're just concepts if you think about it
- 1:02:38continuous integration basically says like hey we're gonna continuously integrate what you're working on
- 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
- 1:02:51on your own branch at some point you want to merge that branch into the main branch and that's when
- 1:02:57your continuous integration would run and so you might run tests you might build containers you might
- 1:03:02do anything you want to do but that's the continuous integration piece and then on the delivery side a lot
- 1:03:09of people think of it like deployment it can be deployment but on that side you're delivering some
- 1:03:14value now that could be an updated website some features it could be dropping off you know a zip
- 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
- 1:03:27what you deliver and so really it's just automating that entire process of building testing and delivering
- 1:03:34some content or delivering software to someone else so I use two solutions for that I use GitHub and GitLab
- 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
- 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
- 1:03:57i have runners that will pick up that job and run the CI tasks and so those runners are hosted in my
- 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
- 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
- 1:04:19Kubernetes cluster in the co-location and then I also have GitHub runners for GitHub actions GitHub does it a
- 1:04:25little bit different but have things called GitHub actions that run pipelines for you and so I created
- 1:04:32runners that run here that actually run those actions and it sounds kind of complicated now I did that
- 1:04:39specifically because I have a K3S playbook that helps you bootstrap and create a Kubernetes cluster
- 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
- 1:04:54against this repo and for a while I was testing all of this on my own personal Kubernetes cluster this
- 1:05:02one two three four five here that I mentioned earlier and this is where I would pull down their
- 1:05:07branch run their Ansible playbook and see if it passed and then merge in the PR if it did that got
- 1:05:14really tedious really fast as you can imagine especially with more contributors so what I ended up doing was
- 1:05:20creating my own GitHub action runners three of them and this will run the CI for those pull requests so if
- 1:05:27someone makes a change to the K3S cluster Ansible playbook that I have this GitHub action runner will
- 1:05:33pick it up it will actually create the full Kubernetes cluster all automated all in CI and run tests against
- 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
- 1:05:48and so that's something that took a long time and it took a lot of help from a lot of people
- 1:05:53but it makes testing and accepting pull requests really easy because if it doesn't pass CI then
- 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
- 1:06:06GitLab and GitHub and then there's everything else like custom code I write to manage bots on Twitch, Twitter, and
- 1:06:13Discord I'm running Longhorn on two Kubernetes cluster for my Kubernetes storage I'm running netboot xyz on my network
- 1:06:22so that my clients can boot to network and install operating systems and that didn't fit into a category
- 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
- 1:06:34this has been another awesome year in self-hosting and I made a lot of changes going into 2025
- 1:06:40and now throughout 2025 I'm going to make some of the biggest changes yet be sure you're subscribed so
- 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.