65 lines
5.2 KiB
Markdown
65 lines
5.2 KiB
Markdown
---
|
|
title: "Setting up this Blog"
|
|
date: 2022-10-20T18:56:43+02:00
|
|
draft: false
|
|
---
|
|
# About
|
|
This blogpost will outline the motivations and technology used to create and host the tech-stack that hosts this blog. It is not that exciting in terms of tech and rather simple in setup.
|
|
|
|
The setup of this blog uses the following tech:
|
|
* Hugo, generating the HTML output of this blog
|
|
* AWS, used to host this blog
|
|
* Terraform, to provision and manages resources in the above mentioned AWS
|
|
|
|
# Basics
|
|
## The Why
|
|
Why would I need a blog? I've been doing great without for the better part of the past few decades, so why need one now? And there are a few simple reasons for this:
|
|
|
|
* While I sometimes speak my mind [on the Fediverse](https://mastodon.nl/@ligthert), this is generally (with Mastodon, Pleroma, Misskey, etc) a short-form medium and it doesn't offer the ability to post blogs in a well formatted document. ( I know there is [WriteFreely](https://writefreely.org/), but I will address this later in this post. ) So I am in need of something that offers a way to write longer posts, in a more structured, and with better formatting is something I desire.
|
|
* Sharing is Caring. I hope that one day I write down enough discoveries that it may help people solving an issue they have issues with. A blog (especially on tech) is an excellent way to do this.
|
|
* I need a challenge. And this is the truth. From time to time I need to challenge myself. This can be done either way by setting up a blog, or by down something that is worth a blogpost.
|
|
|
|
## Requirements
|
|
For this blog I have a few "simple" requirements.
|
|
|
|
* Ownership. I need to be the owner of the blog, I need to be able to do with it what I want. This means being able to host it wherever, do with it whatever, showing the things I want to to show. This excludes third parties that offer hosting a blog at a [freemium](https://en.wikipedia.org/wiki/Freemium), and kick you off when you have too much traffic, don't login often enough, or they don't like what you are posting.
|
|
* Easy. Writing a blogpost should be easy. I should be able to create a new file, start typing in some mark-up language and create a new blogpost. It shouldn't be that hard.
|
|
* Little to no maintenance. If you are already busy, then setting up something that requires even more time as an upkeep doesn't make sense. So I need something that I can deploy somewhere and it will be fine for the next couple of decades. I do not want to maintain a CMS, update software, manage databases. Just. Please no, I've already seen and done that enough of that already in my life.
|
|
|
|
|
|
## Solution
|
|
With my desire for ownership, something easy, low in maintenance I ended up with [Hugo](https://gohugo.io/). And it fulfills all my needs. Just install the binary, pick a theme, write a blogposts in [MarkDown](https://en.wikipedia.org/wiki/Markdown), generate the flat files for the website, upload it somewhere, and done! It is that easy. You need to be a techie to set this up and make it easy, but this isn't an issue for me. 😉 Once you have the flat files for a website, upload them to a webserver, and that takes care of the hosting. [Chuck this in version control](https://gitea.ligthert.net/Sacha/blog.ligthert.net), and you can track changes over time.
|
|
|
|
I could go the other route. Install something like [Typo3](https://typo3.org/), [Drupal](https://www.drupal.org/), [Wordpress](https://wordpress.com/), even code my own Python Flask container. Install a database server. And do this manually. But then I need to pay money for the upkeep of a VM on the Internet. Need time to update the software. And update the operation system of the VM. That is just extra effort I am not looking forward too, and not willing to commit myself to.
|
|
|
|
# Hugo
|
|
Using Hugo was rather simple:
|
|
1. Follow [the Quick start guide](https://gohugo.io/getting-started/quick-start/). Play around a bit to get familiar with it.
|
|
2. [Pick a nice theme](https://themes.gohugo.io/). I picked [m10c](https://themes.gohugo.io/themes/hugo-theme-m10c/) as a theme.
|
|
3. Wrote this blogposts.
|
|
4. Generate and upload the files.
|
|
|
|
# AWS
|
|
This part is based on an [blog post on the AWS blog about exactly what I need](https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/#Using_a_website_endpoint_as_the_origin.2C_with_anonymous_.28public.29_access_allowed), something highly available that hosts simple files. The steps for this are relatively simples and can be summarized with the following:
|
|
|
|
1. Create an S3 Bucket
|
|
2. Open up the S3 Bucket and turn it into a webserver
|
|
3. Setup a CloudFront distribution and point to the S3 bucket as a source
|
|
|
|
Easy peasy.
|
|
|
|
# Terraform
|
|
Terraform allows me to do essentially the above in AWS and create all the things automagically from the commandline. I've written [HCL](https://gitea.ligthert.net/Sacha/blog.ligthert.net/src/branch/trunk/terraform.tf) that allows me todo just that. I executed this from the commandline and it created what I needed in one go.
|
|
|
|
# Wrapping up
|
|
* There is a bunch of flat files that make a website.
|
|
* There is infrastructure in place that can hosts these files.
|
|
|
|
The only thing that needs to happen is actually uploading these files.
|
|
|
|
```
|
|
aws s3 sync public/ s3://blog.ligthert.net/ --delete
|
|
```
|
|
|
|
Easy!
|