Preface#
In an article two years ago titled "In 2022, Let's Talk About Why I'm Still Writing a Blog", I discussed the origins, intentions, and setup of my blogging journey.
More than two years have passed, the original intention remains, and I have continued writing, although I haven't achieved my goal of weekly updates, I have accumulated some writings.
Having experienced many events, I seem to have gradually shifted towards being a "weekly report blogger," with content and style that have changed significantly. There are fewer themes on technology and tool efficiency, and more sharing of life and thoughts; the drive to stay up all night updating four technical tutorials has diminished, but I have gained a sense of coherence after expressing emotions through writing; I still feel happy receiving thanks for blog setup and technical tutorials, but I cherish the emotional connection with those I have never met even more.
Weekly Report Blogger#
It might have been during a casual chat about the future development of xLog in a meeting when a colleague suddenly asked me what thoughts I had as a "weekly report blogger." I was taken aback; it was the first time I had heard that term. After checking my homepage, it was indeed true.
I had always considered myself a technical blogger or a tool efficiency blogger, but it seems that the content that has left the deepest impression on everyone is still the weekly reports, which is not bad.
I started writing weekly reports when "Homura" organized a weekly report supervision group. At that time, whether on Twitter or in the independent blogging community, I was still relatively unknown, and I hoped more people would come together for communication. I would throw my weekly report into the group every week, and we would motivate each other and show concern for each other's life situations, which was very enjoyable.
Later, everyone experienced many changes in life and work, and the last message in the group was in January 2023, but that was still a very happy time for me and the motivation for me to continue writing weekly reports, because I knew that even if I was only sharing the trivialities of life and some immature thoughts, there were still people seriously reading my words.
Once, I received a nudge from Randy, who said that it wasn't necessary to define it as a weekly report, as it often brings pressure and constraints. However, I actually rely on this output-driven input model; having the weekly report as a result-oriented goal gives me more motivation to make the most of the week.
Although I often redefine what a week is.
Independent Blogging#
Compared to beautifully arranged books and magazines, I enjoy visiting other people's blog sites more. The site names, theme colors, background music, and layouts present a more authentic and specific representation of a personalized existence. When reading blog posts, I often view it as a time-traveling conversation, imagining what the author's feelings were when they wrote those fragments of text. Sometimes, I even playfully imagine what kind of person they are and what they might be doing at that moment.
Independent blogging is actually a circle that is neither too big nor too small. Two years later, I feel that more and more people are starting to set up and write blogs, and there is more interesting and high-quality content.
Compared to other mature content platforms that are more convenient for fan accumulation and interaction, it is not just about independence in platform and writing form (I am also willing to refer to those who seriously share content on Mastodon or Misskey as independent bloggers), but also about the independence of thought, where good articles not only impart knowledge but also provoke thought.
I also talked with Randy about wanting to do something for independent blogging, to compile good articles read during this period into a publication and write prefaces to recommend them. The first issue has already been prepared, but due to our busy schedules and focusing more on the EpubKit product, it has not been published yet. This is something I hope to continue doing at some point in the future.
Blogging System#
Here are a few articles I wrote two years ago about setting up a blog:
- In 2022, Let's Talk About Why I'm Still Writing a Blog
- Free Personal Blog System Setup and Deployment Solution (Hugo + GitHub Pages + Cusdis)
- Hugo + GitHub Action, Set Up Your Blog's Automatic Publishing System
- Building a Free Personal Blog Data Statistics System from Scratch (Umami + Vercel + Heroku)
- Lightweight Open Source Free Blog Comment System Solution (Cusdis + Railway)
These mainly revolve around my use of Hugo, a static site generator (SSG), to set up my personal blog and some related services. I have also seen many people contact me through various means to say that they successfully set up their own blogs based on this series of tutorials, which makes me happy to have made a small contribution to this somewhat declining form of creation.
At the time of writing, I was very satisfied with my entire setup, but looking back after two years:
- Blog Body: Hugo itself hasn't changed, deployment solution: GitHub Pages + Cloudflare CDN -> Cloudflare Pages
- Comment System: Cusdis -> Remark42, deployment platform: Railway -> Vercel + Supabase -> fly.io
- Statistics System: Umami -> goatcounter, deployment platform: Vercel + Heroku -> Railway -> Netlify + Supabase -> fly.io
- Image Hosting System: GitHub + jsDelivr -> Alibaba Cloud OSS -> self-deployed Chevereto + PicGo on VPS -> Cloudflare R2 + WebP Cloud + PicGo
- Content Search: None -> Pagefind static search
There are many reasons for the changes; some are due to Heroku and Railway gradually canceling their free plans, some are due to open-source projects lacking updates and features, and some are simply because I wanted to experiment with lighter options.
I remember when I wrote this series of tutorials, I mainly felt that the solutions and tutorials available online were scattered and often outdated, so I wanted to provide a feasible one-stop solution for readers who wanted to set up a blog. After publishing, I received a lot of feedback, and some content was long overdue for updates, but I have only just started rewriting now, which is quite embarrassing.
The following text will introduce the current solutions, and I will add links after completing the updated series of articles.
Blog Body#
I use Hugo as a static site generator to set up my personal blog, and I have modified a relatively retro theme called "hugo-theme-den."
The general process can be referenced in the article "Hugo + GitHub Action, Set Up Your Blog's Automatic Publishing System" and the repository "GitHub - yu-blog."
I added some GitHub Actions automation to automatically update the About page daily, and since the website hosted on GitHub Pages was almost inaccessible from within the country, I migrated to Cloudflare Pages, which is free and has a much better experience. Other than that, there were almost no changes.
I actually considered switching frameworks; I was somewhat envious of Owen and PJ Wu using Zola, and I even thought about writing one myself like Jin Cheng Goidea or Innei.
However, after thinking it over, I realized that I have accumulated quite a few articles on my current site, and if I wanted to keep the original paths, it would inevitably require some effort. Plus, I really like the current theme, so if I have any ideas, I might as well customize and modify the theme directly. It's more important to spend less energy on platform tinkering and write more blog posts; otherwise, it feels a bit like buying a case but discarding the pearl, so I gave up on that idea.
Comment System#
From the birth of the blog until April or May of this year, I had been using Cusdis for three full years.
To this day, it is still a highly recommended solution: lightweight, easy to self-deploy, and with a simple and beautiful style. The setup tutorial can be found in "Lightweight Open Source Free Blog Comment System Solution (Cusdis + Railway)."
However, since Railway canceled its Free Plan in August last year, if you still want to use it completely for free, you can deploy the main project for free on Vercel/Netlify/Zeabur and deploy a free PostgreSQL database instance on Supabase, passing the link as an environment variable to the Cusdis service. The other processes are largely the same.
Recently, when I changed the database URI, Vercel kept reporting errors during deployment, and I indeed needed some new features, so I made the decision to migrate from Cusdis. After researching, I chose Remark42 as the final option from reorx in the article "Changing Blog Comment Systems."
In terms of configuration options, it is much richer than Cusdis. I currently have configured several common social account logins (GitHub, Twitter, Telegram, email), anonymous commenting, email subscription reply notifications, and also set up a TG bot for notifications. It is deployed on fly.io, using a single Go binary + a single database file, which is a very comfortable solution. I will update the tutorial link here after completing the blog post.
Data Statistics System#
I previously self-deployed an Umami (see the tutorial "Building a Free Personal Blog Data Statistics System from Scratch (Umami + Vercel + Heroku)"), but later, due to Heroku canceling its free plan, I ended up choosing to deploy using Netlify + Supabase for the PostgreSQL database instance. The other processes still apply.
However, on one hand, because I deployed it relatively early, there was a major version that could not be upgraded, so I have been stuck on an old version that I forked. On the other hand, I gradually felt that this service and database separation method would inevitably require frequent migrations due to platform rule changes, which felt too heavy. So I finally switched to goatcounter, which is also a single Go binary + SQLite database file deployed on fly.io, another very comfortable deployment solution. I will also update the tutorial link here after updating the blog post.
Additionally, I still use Google Console to analyze my visitor information and search weight.
This result is very informative. I found that an article comparing terminals, "Warp, iTerm2, or Alacritty? My Terminal Tinkering Notes," continuously brings visitors from search engines, as well as the series of articles about personal blogs and setups.
Image Hosting System#
Two years ago, I hadn't paid much attention to image hosting issues; I was directly placing images in the GitHub repository and using jsDelivr for CDN acceleration (which later became almost inaccessible from within the country). However, as the number of articles increased, friends around me often told me that my blog images were not loading. I thought I should consider the reading experience, so I researched various solutions.
I initially chose Alibaba Cloud OSS for image storage, uploading via PicGo. The solution was quite good, and there were no issues for the first few months until early 2023 when a few articles gained significant traffic, and I noticed the monthly bill rising, which made me feel poor.
So, I built a Chevereto image hosting service on a VPS with decent bandwidth, also using PicGo's plugin for uploads, and it worked steadily for a year and a half. However, I was somewhat careless about the stability of self-deployed services and the preciousness of data. A few days ago, the server suddenly crashed, and the kernel error made it impossible to restart. It was okay that the service was down, but I had no backup of the data from over a year and a half, and I couldn't export it.
I contacted technical support through a ticket, and they only replied to me twice a day—once asking me to restart and once suggesting I hire a network administrator to troubleshoot. I had to rely on myself, scouring various solutions online, and after a day of tinkering, I finally managed to resolve the issue. However, this lesson gave me a new understanding of the importance of data in services and the stability of self-deployment, so I dared not use the original solution anymore.
Finally, I adopted Cloudflare R2 object storage for storing images. The monthly 10GB free quota is more than enough, and the services and data security from a large company are guaranteed. To optimize user access, I also used a service called "WebP Cloud" to proxy the images on R2, further reducing image sizes at the proxy level. Although the speed for domestic users is certainly not as good as Alibaba Cloud OSS, under the conditions of not needing to file for record, stability, and being free, this is the best solution I could think of.
On the computer side, I can almost upload images and generate markdown links directly usable for the blog with PicGo client, and the configuration is smooth to use.
The image hosting setup tutorial can be found in this article:
Content Search#
Previously, my blog did not have a content search function. Since the articles were not many, and static blogs do not have a backend, it felt difficult to implement, so I never supported it. However, as I sometimes needed to refer to my previous articles and could only search through a pile of markdown files in VS Code, I felt it was quite necessary.
After researching, I used the project Pagefind, which is a search library based on static files. There is no need to introduce or host other backend services; I just need to build the index file for the entire blog in the CI every time I publish a blog, which conveniently supports search. The search effect for Chinese is relatively weak, but it is sufficient for basic needs and supports most mainstream blog frameworks.
This part can refer to the article "How to Add a Search Function to Zola Generated Static Websites via Pagefind." I am also working on writing a more detailed tutorial based on GitHub Actions, which will be updated here later.
Conclusion#
In 2024, I am still a person who loves writing. From earlier years of book reviews, film critiques, and technical tutorials to now writing about life, it seems that only by putting pen to paper can what I see and think become tangible reality. With the accumulation of hundreds of articles, my personal blog site has also become another vessel for me in this world—rooted in me yet independent of me. Sometimes it is a collection of memories that can be easily picked up, and sometimes it is a refuge for my spirit.
I also hope you can continue to discover interesting things in my blog, whether knowledge, inspiration, or a little resonance. Perhaps at some moment, you will also want to have your own blog site, leaving some traces of your thoughts in this world, taking root and sprouting. I hope this series of tutorials can provide some help.