Why I over-engineered my tech blog?
date
Sep 6, 2024
slug
why-i-over-engineered-my-tech-blog
status
Published
tags
Technology
Experience
summary
I’ve always had a curiosity about servers and the intricacies of managing large-scale applications. But rather than just tinkering with throwaway dummy apps, I decided to put my skills to the test by deploying something real—my own tech blog. It’s been the perfect hands-on learning experience, with all the challenges and rewards that come from building something I actually care about. read more…
type
Post
Before diving into the technical side of things, let me walk you through the overall infrastructure behind my website. For deploying and managing my application, I rely on a combination of the following tools:
- Private VPS (Hetzner): This is the backbone of my setup. Having my own VPS means I have full control over the environment and configurations, and it gives me the flexibility to scale and tweak things as needed.
- Namecheap: I use Namecheap for domain registration. It’s affordable and straightforward, making it easier to manage DNS settings and other domain-related tasks.
- Docker: All my services run in Docker containers. Docker allows me to package my applications with their dependencies into isolated environments, ensuring that everything runs smoothly across different platforms.
- Portainer: Portainer provides a simple web interface to manage my Docker containers and stacks. It helps me monitor and control everything running on the VPS without needing to manually execute commands every time.
- Private Docker Registry: This is where I store and manage my Docker images. Having a private registry ensures that I can securely store all my custom-built images, avoiding the need to rely on public registries.
- Traefik: Traefik serves as my reverse proxy. It automatically routes incoming traffic to the correct containers, handles SSL termination, and ensures that my site is accessible without manually configuring things.
- Notion: In my setup, Notion acts as a database for the website. It holds all the details of the site, including my blog posts. This makes it easy for me to manage content, edit posts, and track everything in one place without needing a separate CMS.
- Next.js: For the frontend, I’m using Next.js. It provides server-side rendering and static site generation, which is perfect for making my site faster and improving SEO performance. Plus, it’s super flexible for developing a dynamic, user-friendly interface.
- GitHub Actions: For CI/CD, I rely on GitHub Actions. It automates building and deploying my code, making the whole process faster and less error-prone. Every time I push changes, GitHub Actions kicks in and ensures that everything gets updated on my server seamlessly.
- Google Drive: I use Google Drive to host all the images for my website and blog posts. Currently, Notion has some limitations around media uploads, particularly when it comes to cross-origin media access. Hosting images on Google Drive helps me get around that restriction and ensures my site loads smoothly.
You might wonder why I’ve chosen this seemingly complex setup for a simple blog. The truth is, I wanted to challenge myself and dive deeper into server management and application deployment while ensuring high availability. Instead of just building and deploying dummy apps, I figured why not create something useful that I could maintain long-term? This blog became the perfect project for that.
Along the way, I’ve learned a lot about building, deploying, and maintaining applications. It wasn’t all smooth sailing—I ran into plenty of issues, especially with Docker image builds and maintaining the stack through Portainer. But now, having those systems in place has made my life so much easier. I can keep my blog running efficiently with minimal manual effort and at a lower cost.
Stay tuned as I continue sharing my journey, tips, and lessons learned from the trenches of managing my own server.