The setup itself is not complicated. The official documentation makes it sound like it can be done in about the length of a song. In my case, it took around half an hour, probably because I am not exactly quick with this kind of thing.

I started with the installation method from the Typecho Docs site.

The basic requirements are worth checking carefully before getting into the actual configuration:
- PHP 7.2 or above. This is the main version requirement to follow.
- MySQL, PostgreSQL, or SQLite, with the corresponding PHP extension installed.
- CURL support. The
curlextension needs to be installed. mbstringoriconvsupport. This also needs to be available. In my case,iconvwas already there.
When setting it up on a NAS, one useful detail is that pdo_mysql also needs to be added.

After that, move on to configuring Typecho.

One part that can easily cause trouble is the database address. Sometimes localhost works, sometimes it does not. It may be better to fill in the NAS IP address plus the port number instead. For example, one setup used 192.168.68.23:3306 or 192.168.68.23:3307. I used port 3307 and it worked fine, while 3306 gave an error.
Once the database connection is sorted out, register and log in to the admin account.
I often wonder what to do if I forget the database password. But in practice, there are usually plenty of ways to deal with it when the problem actually comes up.
Compared with WordPress, the Typecho backend is much lighter and simpler, though it still has a bit of a WordPress feel. One difference is that there is no built-in plugin marketplace. There are many themes, but after trying to install and adjust some plugins, I found that quite a few of the better ones are paid.
The first real problem I ran into was embedding a Bilibili video. Copying the video URL directly into a post does not automatically create an embed.
I looked through quite a few references about adding Bilibili videos to Typecho articles and mounting Bilibili video content inside posts. I also tried two plugins from a Typecho plugin category page, but neither worked for this situation. That direction turned out to be wrong.

In the end, the solution was related to the iframe-style embedding mentioned earlier for Bilibili.

Using the embed code directly solved the problem.

The new issue is that the embedded video does not automatically enlarge or adapt the way I want, so that still needs more testing.