This next topic is all about servers. A lot of software today is provided from servers, over the internet to your phone, your TV or your laptop/personal computer. Instead of running the software locally on your PC, software can be run on a server and provided over the internet. Examples of local software include things like old versions of Microsoft office, which required you to have a disk to install it, and all the heavy lifting was done on your PC. Modern software like Google docs now runs on a computer in one of Google’s data centers, and all you need to use it is a simple web browser. All the heavy lifting is done by Google on their servers. Almost all of the software that is interesting for a home lab or self hosting runs on this more modern client/server technology. Virtually any service you get from the cloud works the same way: Google docks, Microsoft OneDrive, Apple iCloud, Google Calendar, and so on.
There are basically three ways to run a server:
1. A single computer that runs one operating system (Windows, Linux, etc.)
2. Carve up a computer (virtually) into multiple virtual servers, using virtualization software like VMware or Proxmox. Each virtual server has its own operating system but shares the computer’s hardware resources.
3. Further carve up a computer using containers to run software. In this each container is a self contained, lightweight unit, and can run directly without the need for virtualization software. It allows us to run many more applications on the same hardware.
Virtualization of servers and containers are mostly about reducing waste and new ways of squeezing more computing power out of existing hardware. Containers also make software more portable between different types of hardware. A large majority of the web and most cloud applications now run on containers.
In my home lab, I actually run all three kinds of servers. My firewall/router running pfSense and my two NAS boxes running different flavors of Linux are all dedicated, physical servers. They are not virtualized at all. I also run three different Proxmox hosts as my virtualization platforms. I also use a virtual machine (VM) running on Proxmox to host my container platform, Docker. Other common container platforms include Podman, Kubernetes, Rancher, Amazon Elastic Container Service and a few others.
If you want to dive into virtualization (which I highly recommend) there is a great video from Network Chuck to get you started
Containers basically come in two flavors, LXD/LXC containers and Docker containers. They are basically competing technology types that differ slightly in their design. I use both types of containers. LXD/LXC containers will only run on certain Linux distributions. Fortunately, the Type 1 hypervisor I use (Proxmox) currently favors LXC containers, and as a result I can run LXC containers directly on Proxmox. Docker containers can run on any Linux OS, so for these I have a Debian 12 VM running that hosts all my docker containers. Working with containers has many advantages, but in my experience it is also a lot more of a learning curve than using a virtual machine. If you want to know more about Docker containers (really these are the most prominent/popular containers right now), then check out the video below.
Finally, I will say that if you want to dive deep on docker there are a number of new concepts you need to learn. Using docker is nothing like using a virtual machine. Containers are ephemeral. That means any persistent data needs to be handled separately. Likewise, because they are ephemeral, if you want to do an upgrade to a newer software version, you literally destroy the current container, and spin up a newer one. And containers can be spun up using code, specifically something called YAML. Below are some links from prominent YouTube content creators that I really find helpful. I visit their sites quite a bit.
Here are some links:
- Docker compose
- Docker networking
- Docker volumes-Christian Lempa
- Kubernetes-Christian Lempa
- Portainer-Christian Lempa
- Virtualize vs containerize -Techno Tim
- How to update Portainer -Techno Tim
One last comment. You don’t have to fill a room up with servers to run a home lab. I do it because I like tinkering with the hardware. But pretty much everything I describe on this blog can be completed using servers, storage, firewalls, etc. in the cloud. Whether you use AWS, Azure, GCP, or one of the more budget oriented cloud solutions like Akamai, Backblaze, or Digital Ocean, you can set up a complete home lab in the cloud. By far the best resource I have found for all things Linux is Jay La Croix at Learn Linux TV. Below is one of his videos on setting up a server in Linode (now known as Akamai). Jay has complete courses on his blog and YouTube channel that will teach you everything you need to know about Linux, Servers, and virtualization among other topics. I also highly recommend his Proxmox series.
Anyway, I hope you found this blog post useful. As always, I love talking about this stuff, so reach out if you have questions.