Multiple options exist today to create a blog. Still, if you want to have something self-hosted, and you don't like wordpress , the option wasn't too clear for me and neither for an ex-colleague of mine that the same day asked the same 😁


After a little bit of research, I ended with two options: Ghost and Writefreely.

Writefreely was my preferred option as it is written in one of my favorites programming languages: go . But didn't support images. Ghost on the other side is written in node.js and have plenty of support... So how to setup a ghost blog?

WARNING: Here becomes technical


First, the question of where to host it. Since a long time, I wanted to check Scaleway . Scaleway, as far as I remember, was one of the first cheap servers that support ssd discs. I like the way they work, so let's give it a try.

The signup was easy and creating a server was even easier. Once the server was created, I ssh and was able to start using ghost with one single command:

docker run -d --name blog-kalena -p 127.0.0.1:3001:2368 -v /blog-content:/var/lib/ghost/content -e url=http://blog.kalena.app ghost:2-alpine

🎉🎉🎉  Long life to the blog for only 3€/month.

Now to have a secure page, I needed to add support for https. After trying a couple of minutes I was not able through docker to configure the auto https of ghost. So after the time went out, I move to a different solution. I Install caddy and proxy the requests.

🐱‍👤🐱‍👤🐱‍👤 Now we have everything secure.

The last part was to automate all the process. In case something goes wrong, you don't want to repeat all of this. Luckily Scaleway have support for Terraform. Terraform is able to automate most of the infrastructure, want prevents me to do clicks in the Scaleway web.

Also, they have support for cloud-init. cloud-init is a standard that enables to initialize machines. So after copying and pasting a little bit, a fully automated setup was done.

We have blog

Thanks for reading. Was it too technical, not detailed enough? Send me your thoughts through twitter @guillermooo.