This Infrastructure

Why make a personal website and stick it on some random shared web hosting environment or a Digital Ocean server when I can just as easily be extremely complicated and show off some infrastructure design?

This website (and several others that I also host) are hosted as part of a Kubernetes of four servers across four different geographically diverse hosting providers. The entire stack that these applications run on is custom-written, from the container images to the infrastructure terraform code and puppet control repository.

For hosting, this application exists at:

  • A VM running on my self-hosted Proxmox hypervisor in Michigan.
  • A VM running on a datacenter-colocated Proxmox hypervisor in Kansas City.
  • A Digital Ocean droplet in NYC.
  • An AWS EC2 instance in Ohio.

Container images are built automatically on every commit by Gitlab's CI pipeline, and are also automatically updated nightly with Alpine package updates

It uses Terraform to define, deploy, and provision the underlying server architecture for both AWS and Digital Ocean. This includes:

  • Two CentOS 7 Kubernetes hosts (of the 4 listed above)
  • An AWS Elastic Load Balancer
  • A full AWS VPC setup.
  • A full Digital Ocean VPC setup.

It uses Puppet to handle server and service setup and configuration management, including:

  • Installation of all required packages.
  • Configuration of all required services (OpenSSH, Docker, Kubernetes, etc)

This is absolutely overkill for a simple personal website that gets a few hits a week, and isn't something I'd recommend unless you're serious about uptime, high availability, and require substantial capacity to serve an appropriate number of simultaneous hits.

All of that being said, this whole thing is costing me less than $25 a month, which is far less than some "robust" shared hosting plans...let alone something that is fault tolerant and spanning datacenters owned by multiple providers over a thousand miles apart.

Regardless of the cost and regardless of the overkill, I've done this to show off just some of the things that i'm experienced with and highlight some of the things that I truly enjoy doing within the DevOps and Infrastructure Architecture world.

Repositories

All of the code used the build and deploy the infrastructure that this server lives on is open source, minus of course the Puppet and Terraform secret values (AWS api keys, Puppet encrypted secrets, etc).

I'm currently still cleaning up some of the repositories to be committed, so once they're uploaded to Gitlab the links will appear below.

Right now you can find the Docker Compose and container build code at my Gitlab webcluster group.