Technologies Powering This Site
I categorize the technology that powers this site into three groups:
- Content Work Flow
- Web Server
- Hosting Infrastructure
- Text Editor
- Google Cloud Storage
- 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.
- Traefik (future)
- 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
- Docker Containers
- Docker Swarm
- Google Compute Engine
- 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.