Architecture 2022-08-08

Technologies Supporting bmf-tech

Explore Docker, Golang, Vue.js, Nginx, Prometheus, and Grafana powering modern blogging infrastructure and monitoring systems.

Read in: ja
Technologies Supporting bmf-tech

Technologies Supporting bmf-tech

This post discusses the technology stack that supports this blog (bmf-tech.com).

Previous bmf-tech Configuration

First, let's look at the previous generation configuration of bmf-tech.

The application I was operating in the previous generation was the first self-made CMS called Rubel.

I don't remember how many years it was in operation, but I think it was around 3 to 5 years.

Before operating Rubel, I was running a blog with an original theme on Wordpress.

Wordpress (Original Theme 1) → Wordpress (Original Theme 2) → Rubel → and here we are now.

When I checked the domain age of bmf-tech.com, it was registered on November 2, 2015.

I forgot when I started operating the blog, but based on the domain age, it has been running for nearly 7 years.

Current bmf-tech Configuration

Now, let's discuss the current configuration of bmf-tech.

I have published sample code with the same configuration at gobel-example.

Design

There were several reasons I wanted to replace the system.

Based on these reasons, I roughly thought about the design policy for the new system.

Architecture Configuration

The architecture configuration built based on the design policy is as follows.

Screenshot 2022-11-22 22 53 31

Deployment

The deployment process is not particularly complex.

Source Code Management

The following diagram shows how source code management is structured based on the container configuration.

NOTE - Source code management

Application Design

This section discusses the applications for API, Client (user-side screen), and Admin (admin panel).

API

Client

Admin

DB Design

Basically, I inherited the DB design from Rubel, but I reviewed and redesigned some parts regarding logical and physical deletions. I also reviewed the data types and sizes of columns.

Migration Work

I wrote my own data migration tool to handle data migration.

migrate-rubel-to-gobel

Since there were no significant differences in DB design, I was able to implement the migration tool in about 2 to 3 days.

Regarding server migration, I didn't do much. I prepared the server environment for migration, obtained a verification domain for operation confirmation, and conducted various operational checks in the new server environment. I repeatedly created and destroyed to check for issues with IaC.

During the release process, the migration to the new environment was completed simply by switching the DNS.

I deleted the old environment after confirming that there were no issues with the new environment for about a month and completed the contract termination process.

Monitoring

Monitoring dashboards and alerts were created and configured using Grafana.

The monitoring dashboard is managed in JSON file format, allowing for provisioning, but alerts are set from the Grafana UI. (Alerts have not yet been supported for provisioning, cf. github.com - grafana/issues/36153 → This has been addressed, and provisioning is now supported.)

SLI/SLO

It feels futile to set this up with little traffic, but I want to set it up to observe whether I can maintain a certain level of availability stably, rather than focusing on traffic. However, it is still not addressed.

Load Testing

I am considering doing some load testing, so it's under consideration.

Summary of What I Created

Here’s a summary of what I created before releasing the new bmf-tech.

While creating the above, I wrote blog posts, gave lightning talks, and did various other things, so I spent quite a bit of time on the release of the new bmf-tech.

Future Prospects

I have occasionally paused development, strayed off course, and considered switching to Wordpress or another existing system several times, but I have successfully reached a manageable operational state.

There are various issues I want to address and things I want to do, so I plan to tackle them as a hobby on the side.

I want to refine not just what to create, but how to create it and how to operate it, so I plan to invest in this through the blog system.

The reason I operate my self-made blog is strongly tied to learning. It has provided me with many learning opportunities, and I feel I can continue to learn even more in the future.

For the time being, I believe I can continue to operate the current system, so I plan to take my time with it.

Tags: Docker Docker Compose VPS Golang Vue.js Prometheus Promtail Loki Grafana Nginx
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ Support

If you enjoy this blog, consider supporting it. Every bit helps keep it running!


Related Articles