Technologies Powering This Site

I categorize the technology that powers this site into three groups:

  • Content Work Flow
  • Web Server
  • Hosting Infrastructure

Content Flow

  1. Text Editor
  2. Git
  3. CircleCI
  4. Google Cloud Storage
  5. Docker update

The site you are reading is created by Jekyll, which is written in Ruby and produces static HTML sites.

I compose the content in text editors: emacs on Linux, Atom on Windows and MrHyde on Android. I store the site content in git, hosted on Bitbucket. Whenever I push to Bitbucket, it triggers CircleCI.

CircleCI runs Jekyll to (re)create the site and then archives the site into a tarball (.tar.gz). CircleCI then copies the tarball into Google Cloud Storage. Finally, CircleCI invokes a command via ssh to restart the web servers in the hosting environment.

Web Server

  1. Traefik (future)
  2. Nginx
  3. Docker Container

The site is served by Nginx. I plan to have it fronted by Traefik for HA, Load Balancing and SSL Offload, but I haven’t yet completed that particular project. Multiple instances of Nginx run in Docker Containers distrubted across a Docker Swarm.

When CircleCI issues the Docker Update command

sudo docker service update --force nelnet-org

Docker performs a rolling update to, in this case, simply restart each container. During the container initialization, it downloads the tarball from Google Cloud Storage and untars it in the Nginx server root before going on to start nginx. I took some effort to figure out how to run multiple commands inside a container

Hosting Infrastructure

  1. Docker Containers
  2. Docker Swarm
  3. Google Compute Engine
  4. Google Cloud Platform

The hosting environment consists of a scalable cluster of Google Compute Engine VM’s at the “hardware” level. A Docker Swarm runs on top of the VM’s. Nginx and Traefik containers (multiples of each) are managed by the swarm.

Lee Nelson

Long time Programmer, Systems Administrator and Network Engineer. Lifetime tinkerer.

nelsonov nelnet_org