How I run my personal stuff
Some history
Ever since I was in high-school, I have been running all sorts of personal websites. Whether it was for school projects, tinkering, or even for some early-on entrepreneurial endeavors, I always found myself wanting to set-up websites for a variety of different interests.
Back then, we didn't have things such as docker, and I didn't really have much of an allowance, and so my go-to option was always a virtual host running c-panel. I was only around 14 at the time, but had lots of experience creating computer-based-media, this of-course all thanks to my dad working at an advertising agency and teaching me how to use quark, photoshop, freehand (yeah remember that) and many other graphic design programs at an early age.
It was therefore obvious that I would gravitate towards wysiwyg tools and instant-blogging software that were popular around the time when Apple first introduced their iLife software tools. This felt like the wild-west and everyone was using c-panel with basic ftp upload and download. It wasn't until high-school though, when I started learning about html (and Java).
During these years, I got really good at running Wordpress sites and MediaWiki installations since I was now learning how to program and php programs were so incredibly easy to hack and run. I would also write custom websites, which became a pain to update and run, as (which happens to almost everyone), you kind of get over maintaining your own software, especially when there isn't someone relying on it with some kind of up-time requirement.
What I decided on early on
Since I am quite creative in nature, I actually just wanted to put my content online, but for many years (and I mean ever since high-school), my go-to was Wordpress with many-MANY plugins to get it to operate in some kind of nominal way. The problem for me though was always images. Wordpress requires so many image plugins to be able to display images decently, that it almost became a bad joke, which would be bite me every time I wanted to post.
To make my content display nicely on retina screens, I needed tools such as short-pixel to resize images, extensions to generate @2x image sizes, custom code to get the right image sizes for my themes, tools to deal with compression of these large images. And the list goes on... Often these tools would process in a non-deterministic order, and the wrong retina versions would try to be created off of the already compressed short-pixel version.
But probably the worst aspect of Wordpress + themes, is the awful wysiwyg stuff which theme designers try to package and make you use, instead of just using the new built-in visual editor. These after-market wysiwyg element designers running inside/ontop/beside wordpress were so incredibly buggy, slow and badly integrated and are clearly developed with an engineering mindset, as apposed to a product mindset which should champion ease of use as the highest priority. I could go on, but this post would then be pages long of my terribl experience of using wordpress throughout the ages. Im sure there are many people using it successfully, but for my creative requirements and high-quality-standards, it just could not cut it.
Running wordpress was like a job I didn't want to have, and sucked the joy out of being a creative and wanting to share my work.
What I now run
Fast forward a few years, and I now have settled on a setup that is incredibly easy to run, maintain and update.
Ditch the virtual host, and run with a vm / droplet instead.
I now run a digital ocean droplet which actually costs me less than the virtual host I was using, and now I get a clean linux system with which to build the correct stack ontop of.
Use docker
I now have a single docker compose file that lists all my sites and software. Almost everything can be configured using environment variables, and the configuration is therefore declarative in code as apposed to imperative steps on c-panel.
Updates are easy as I can docker compose pull
in a single command and docker compose up -d
to apply the updates. Since I have volumes for all my data, the new containers are just recreated with the previous state merged in. These volumes are easy to backup, and likewise, also easy to export and transfer with scp.
NginX container, lets encrypt + certbot
This is a magical combination that lets me setup subdomains, https and automatic certificate renewal. The Nginx config also allows me to setup things such as oauth authentication in-front of various internal services.
Ghost CMS
Compared to Wordpress, this is like a breath of fresh air. While Wordpress is infinitely more customizable, Ghost CMS gets the basics right and makes it fun to create and publish content in a modern UI that is slick, fast, and operates almost identically to tools such as notion and dropbox paper.
MediaWiki with the Citizen theme
For anything wiki related, MediaWiki has always been my go-to, but it was always a pain to run and it looked dated. With docker however, and thanks to the Star Citizen wiki, Its now possible to run a modern wiki that that looks great (thanks to the Citizen theme) and runs easily thanks to docker. Its hard to recommend anything else given how easy to run and good it looks. While I cant share my own site, check out the official wiki here: https://starcitizen.tools/