It's 2018, New Year, it's about time that I work on redesigning and redeveloping my personal website - properly. Normally, a personal website should be pretty simple, right? Yup! However, in my case, it was different - I consider my situation to be one of the few rare exceptions.

Before I go into detail about why I chose to create a dockerized microservice architecture for my personal website, let's go over my situation or goals and requirements that I wish to accomplish with my personal website!

Background, Goals, and Project Requirements

One of my life goals is to someday become a successful entrepreneur, and based on my research in the past, having a personal brand is the most flexible and one of the best ways to achieve that goal. Not only that, it is also important to have a proper web portfolio, especially when I want to get a job while doing my personal entrepreneurial activities on the side. After all, we're not all born rich or from families that have college degrees! This is where the challenge and project requirements begin...

Personal Website Requirements

Prior to my current website, I used to run my site off of an 80% finished Wordpress theme I created. I was not an expert when it comes to creating Wordpress themes, and not only that, I had very little free time to get the entire thing to work the way I wanted to. Also, I was on a tight budget so hiring someone to do it for me was out of the question!

To me, the Wordpress framework is great, but at the same time, felt very restrictive and not scalable enough to the point where I needed it to be. Not only that, I had a bad experience running into weird stability issues on a different Wordpress site I setup once for a side project - something to do with database communication issues.

Related: Why I Chose GhostJS Over Wordpress

Around the time, I was deeply in love with Node.js. I have tried PHP before a few years ago when trying to build the Goal Striver website - my startup. I've experimented with a few PHP frameworks - including trying to build one from scratch by myself! By the way, Laravel is an amazing PHP framework! You should check it out if you haven't already.

I didn't like PHP that much because if something went wrong, the entire website goes down with it. When it came to Node.js, that issue was basically non-existent to me.

But back to the main topic at hand on why I chose to create a dockerized microservice architecture for my personal website.

Why I Chose To Create A Dockerized Microservice Architecture For My Personal Website

Since you now have read my goals and requirements, I'm sure you now know why I chose to create a dockerized microservice architecture for my personal website and that it would make sense to do so!

First and foremost, let's just get this out of the way. Aside from my entrepreneurial passion, I'm a techie next. I love to learn new things, especially about tech. I saw this opportunity as a chance to challenge myself, learn some new skills along the way, and as an excuse for me to finally pick up Docker!

Also, when it comes to anything important, I like to make decisions based on the long term, not just a short term solution. After all, if you make your short term life easier, your future life will be dealing with the burden eventually!

Flexability and Scalability

Node.js made a huge impact to me as a Web Developer. It was thanks to Node.js that I was able to make significant progress towards most of my technical goals. Not only that, Node.js was widely supported, scalable, and flexible. Combined with Express.js, spinning up a REST API powered website is easy!

By dockerizing my personal website, it helps make my website more scalable. By avoiding a monolithic architecture, I'm able to focus and quickly deploy certain key features without worrying about annoying technical deployment issues that occur. Not only that, it also makes the transition from local development environments to production a lot more smoother - saving me time and energy.

eCommerce and Store Module

One of my future goals is to monetize my personal website with some personal branded merchandise and products. Having a store module is crucial. I also wanted the user experience to be somewhat smooth instead of having to redirect them to a 3rd party service which in turn increases my website's bounce rate. This feature is a work in progress, and I don't expect to have it up any time soon, so by going with a Dockerized microservice architecture, I can launch my website without the need of that feature!

Course Module

I enjoy making YouTube videos on teaching people how to program. One of my goals is to create courses in which I can monetize. I want to let my viewers be able to login and gain exclusive access to paid content. Again, a work in progress feature. Same reasons as before with the store module feature.

Reliability and Convenience

One of the main reasons why I chose to Dockerize my personal website is that I don't have to worry about taking down my website only to relaunch it with new features and find it not working anymore! Not only that, it's quick, easy, and reliable to get it up and running.

SEO - Search Engine Optimization

I'm sure you've heard of the phrase "if you build it, they will come." Well, I'm sorry to disappoint some of you, but just because you built it, doesn't mean that they will come. That's where marketing comes into play, and the technical side of SEO.

In the past, before I moved my website to DigitalOcean, I used to use Hostgator for my website. At the time, I had my static pages in the public folder, and my Wordpress blog as a subfolder called "blog."

SEO wise, it wasn't that great. Not only that, I wanted to avoid putting my blog module under a subdomain because link juice don't apply to your main domain if you have it linked to a subdomain! Hence, having a dockerized instance of GhostJS today was the best solution to my problem.

Conclusion

In conclusion, I went with a dockerized microservice architecture for my website not to satisfy my desire and inner-geek satisfaction of having used Docker, but because it was the perfect solution for my situation. I do admit that it may be overkill, and I could've just deployed the website separately without Docker and serve it behind a Nginx proxy (which by the way is running on one of my Docker containers), Docker just makes the process smoother. By going with a dockerized microservice architecture, it helps reduce my future time spent on dealing with technical issues, when I should be working on and building my personal brand to achieve my goals.