Introduction
This site is built with Flask and flask_flatpages, which enables webpages as markdown. The site is serverside rendered and uses minimal javascript. It runs inside a Docker container on an old office pc, shoved into a corner behind a door in my apartment in copenhagen.
It is made globally available with the help of the cheapest VPS i could find (Racknerd had an offer of 12 months for 12$. i'm not sure what i will do when that offer expires, maybe i will get a static IP from my ISP, but that costs more than 1$ a month). The DNS of this domain points to the IP of the VPS.
The VPS runs a single container Pangolin. It acts as a reserve proxy and VPN though Newt on the host. It also handles HTTPS with Let's Encrypt. The main url is pointed at this container. Subdomains point to other containers on the "server" in my apartment.
The subdomain git.rasmusbendtsen.dk, which is linked in varoius articles, points to a Gitea container also on the same "server", but proxyed by Pangolin.
The PC which hosts this site and about 30 other containers has an Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz processor, 2 * 8GB DDR4 2400 MH (it's 2x cause I had a broken laptop due to a "makrel i tomat" related accident, the sticks are not even the same manufacturer) and a 240 GB SSD.
Setup
Pangolin directs the base domain to the container running this Flask app. The repository and container registry for the app is located on a gitea instace. I write articles in markdown and push to Gitea. That triggers a Gitea-runenr (Same as Github Actions), which checkouts the new files, rebulds the Docker image and runs docker compose up -d
Placing the markdown files in a Docker volume would be better and easier, as it would require no rebuilding, mean no downtime and not require pushes and actions whenever i just mant to a new article
Compose file
The source code can be found here on Gitea