Website Infrastructure

Details:

The website's architecture may look weird, but it is something that came out of months of iterations. The whole thing had a singular goal, to keep costs to a minimum because I am a cheap 😄.

The whole system leverages as much as possible on GCP's free tier that does not expire, the only concession made while designing this, was the storage of containers within the Container Registry, amounting to a total cost of between SGD$0.08 to SGD$0.16 a month (ignoring domain name cost), while having a full CI/CD pipeline.

The private GitHub repo stores all the code for the different frontends of the different projects, currently some are in pure HTML, while others are in Vue.js.

Cloud Build will detect the update on the Main branch, and send an alert to the Flask Server, sending out a Telegram message. At the same time, it will start building the docker image, compiling the frontends that require compilation, and moving them to the proper folders.

Upon completion, it pushes the image to Container Registry, while sending an alert to the Flask Server. The Flask Server reboots itself and pulls the new code from the git repo, following that, it triggers docker-compose to pull the new images from Container Registry and restart itself. Upon completion, a health check is done and sent to me via Telegram.

Features:
Telegram - Sends me alerts, as well as allows me to restart the server
Certbot - Periodically refreshes SSL certs from Let's Encrypt, ensuring all websites are accessible through HTTPS
Cloudflare - DDOS/IP protection together with forced HTTPS
Cloud Functions - Allows hosting of various website's backends while essentially costing nothing
Wake-On-Lan - I use Google Assistant in my home, as such, the only way to trigger a Magic Packet to be sent to turn on my PC is to re-interpret IFTTT's REST request triggered by the Assistant to send a special packet. My home network will then reroute my PC and turn it on from a shutdown state.