The Plan

The plan is to create a homelab to practice with server hardware, virtualization, containerization and networking.

Hardware Projects

These projects involve hardware changes, server installation, building server racks, purchasing components,
and any other projects involving physical hardware and physical server infrastructure.

Purchasing the initial hardware.

Primary goals are to (1) use enterprise level hardware and (2) install the most recent version of VMWare Esxi Hypervisor as possible. After doing some research, it seemed that the Dell R720 had a solid balance of price point, power, compatibility, and documentation. So I picked one up on Amazon here. I also purchased a 4 post, 15U server rack, rails, and a rackmount surge protector. Some other components that I would like to add, but are outside of my price range at the moment, are a rackmount ethernet switch, a backup battery power supply, and a rackmounted PC case to put some old gaming hardware to use.

Here are some pictures of the Amazon listings and how it looks all mounted up in the server rack. See my virtualization projects below for the Hypervisor installation!

Virtualization Projects

The projects involve setting up virtualization, spinning up virtual machines, setting up containers,
working on virtual networking, and anything else related to virtual environments.

Exploring PhotonOS
(Aug 20, 2022)

The first distribution I loaded into a virtual machine was PhotonOS. It was super easy to install and start creating new users. I created a new sudo user with (replace user with desired username)

useradd user
usermod -aG sudo user
and then switched to the new user with
su - user
I can now use sudo to run code with root access.

Docker was really interesting to me as a tool where I can spin up mini virtual machines inside my virtual machines. It is basically a containerized VM that uses the host machine's kernel and resources instead of needing its own. I installed docker and got started on trying to self-host services with it. When you start a container with docker, you can choose to expose a port with a -p flag. Then you can use those ports to access your self-hosted services.

As a beginner to self-hosted services, I didn't want to expose a bunch of ports through my router firewall, so I started with Nginx. Nginx is a web server that can be configured to route traffic through one publicly exposed port to other ports on a local network, without exposing the ips and ports directly. If it's set up correctly, you should reach the welcome page shown above!

Create a new docker network with

sudo docker network create networkname
and then run a new docker container inside that network while exposing a port with
sudo docker run -itd --network networkname -p 80:80 --name containername nginx
This will create a new Nginx container running in detached mode that can be accessed through port 80. So far, I have been able to reach the Nginx web server, however, I haven't been sucessful configuring it to route to other services. My solution at this time is to use Nginx Proxy Manager. Then I can reverse engineer the solution to better understand the Nginx configuration files.

Nginx Proxy Manager provides a UI for directing traffic through your Nginx proxy. I was able to set it up with docker-compose (a plugin for building custom docker images) and connect pretty easily. As an extra layer of protection I decided to use Cloudflare to route public traffic to my network. Using Cloudflare Tunnels and a free domain name from freenom I can route to my Nginx Proxy Manager dashboard through the public internet by going to https://npm.mrjeffhoffman.tk.

I was pretty pleased that I was able to get this all set up and access my home network from the public internet. I can't wait to add services for myself and give access to my friends and family. I will add more updates here as I finish projects. First, I will set up a Don't Starve Together gaming server using docker and route UDP connections through Cloudflare and Nginx for me and friends to play together! Don't Starve Together has a very intersting server structure where two or more servers will need to be running concurrently and players are able to travel between them!

Check back later for more virtualization projects!

Installing vSphere Hypervisor ESXi 7
(Aug 12, 2022)

Initial boot of the server took me to a Windows 10 server manager OS. I downloaded the image of vSphere from my VMUG Advantage webstore on my personal PC. I have used BalenaEtcher to create bootable USB installs before so this is what I attempted to use to create the bootable USB, but it was displaying warnings about partition tables not existing and wouldn't boot from USB when I connected it to the server. I remembered a youtuber mention they used Rufus so I downloaded Rufus real quick and was able to create a bootable USB that worked to get the installation going.

After installation I removed the USB media, restarted the server, and it booted to vSphere! I set a static IP for the server, connected my desktop PC directly to the server with ethernet, and set a static IP for my desktop PC in the same gateway and subnet. I then opened a web browser and typed in "https://" and the static IP for the server and was able to login! That's all I had time for this evening, but I'm looking forward to getting started with VMs!

One thing I need to investigate is the partitions and hard drive setup on the server. I had two options to install the OS to and chose the smaller one, but, at first glance, it doesn't seem that I have access to the larger drive. My first instinct is that I will need to combine partitions or maybe there are some RAID settings I need to change so that all the storage is considered to be one drive.

Next, I will look at the server specs as reported by the OS and compare them to what was advertised. I want to make sure all the hardware is installed and working correctly and all resources are available.

My first virtualization project within VMWare will be to spin up some Linux VMs and install Docker on them. I will practice installing Docker on Ubuntu, centOS, Alpine, and Photon and take note of any differences.

Check back later for more virtualization projects!