I haven't had a personal webpage for a long time. Lately I've had a few topics in mind I've wanted to write about, so I decided to give blogging a try.
Because I enjoy doing it myself and having control, I decided to self-host my webpage. From the start I decided i didn't want anything to do with PHP and CMS's written in PHP. After researching the multitude of options, I decided to build on Django CMS. Although a bit enerprise-y, it has an active community and design emphasizing pluggability and extensibility.
Onto the hosting alternatives. I don't expect high traffic, so I figured out I need a single virtual machine and will install everything there. I decided to go with Amazon Lightsail, although it has some shortcomings like still no support for IPv6. Oh well. On the other hand I can handle most of my backup needs directly with the snapshot feature, and have managed databases and load balancers at my grasp later if things gets heavy.
Almost there. Just package nginx, django and mysql to my liking, get some sweet free TLS certificates from Let's Encrypt, and ship it, right? Turns out instead of spinning this thing up in one afternoon like I originally thought, I ended up spending countless hours searching Stack Overflow, patching, repatching, twisting, tweaking and pinching. Some of the lessons learned:
- Nginx is needed to serve files for Let's Encrypt. TLS certificates from Let's Encrypt are needed to start Nginx if you use naive static configs. Bootstrapping is needed.
- Using MySQL 8.0 server with the older MySQL client libraries shipped in the default Python image leads to some strange error messages. I ended up disabling the problematic authentication plugin as I thought it was no big deal.
- Documentation of Django CMS and its blog extension isn't always as complete as a newbie like me would want to. Well designed code is a good substitute for well written documentation in this case.
But, as you can see, I'm finally there. Some features
like blog comments (blog comments by disqus since 2020-01-01) and whatnot are still missing. The frontend is very simplistic, mostly because I'm not a frontend kind of guy, but partly because I like it that way. And most importantly what is required is posting regularly. Let's hope I can keep that up!
The source code for the website is in GitHub.