Introduction to the key applications involved in building a home data center
This article was last updated 287 days ago. The information within may have evolved or changed; if anything is outdated or broken, please feel free to leave a message in the comments section.
Article Abstract
Centered around home data center deployment, it is necessary to integrate various applications such as blogs, image hosting, cloud drives, and media libraries. The core solution is based on Docker containerized deployment, combined with Nginx reverse proxy, Redis cache, and MariaDB database to build the infrastructure. By self-hosting Chevereto image hosting, Nextcloud cloud drive, and Emby media library, low-cost alternatives to commercial services are achieved. Portainer is used to manage containers, Uptime-Kuma to monitor application health status, and Tailscale virtual networking along with SafeLine WAF to secure remote operations and maintenance. In practice, open-source and free tools are prioritized to control costs while meeting functional requirements, forming a complete technical system covering personal site operations, data storage, and security protection.
Qwen3-14B · 2026-06-18

Building a home data center involves numerous applications. Taking my home environment as an example, this article will sort out the applications that need to be used for your reference.

Personal blog

The release of my home data center applications is a multi-site network centered around my personal blog. For building my personal blog, I chose WordPress. WordPress currently has the highest market share among CMS platforms, supports rich plugin extensions, and has many online tutorials, making it suitable for beginners. This article is published through WordPress.

See article:Docker Series: Using Docker to Set Up a Blog Slave Site Based on WordPress and Implement Regular Backups of Master-Slave Site Configurations。

web server

Many applications on GitHub are provided as source code and need to be published relying on a web server. For the web server solution, I chose Nginx (whether you deploy Nginx via Docker, compile and install it manually, or use the method provided by a Linux panel depends on your personal preference). The main reason for my choice is that I already use Nginx for reverse proxy and am used to it. In addition, Nginx supports extended functions such as Layer 4 reverse proxy and load balancing, and can also be used as K8s Ingress, etc. Who knows if I will need it in the future, but having support is always good.

See article:Docker Series: Single-container Nginx, Single-container PHP (one version) Multi-site Sharing、Linux Panel Series: Deploying V-Sign via Source Code Based on Baota PanelandDocker Series: Using Docker to Build a Graphical Nginx Based on nginxWebUI。

php

Depending on application requirements, Docker can be used to provide different versions of php-fpm.

See article:Docker Series: Single-container Nginx, Single-container PHP (one version) Multi-site Sharing。

Cache

Redis is used. This mainly depends on the requirements of the applications. Currently, it seems that many application deployments rely on Redis for acceleration (WordPress, Nextcloud, Cryptgeon, OnlyOffice, JumpServer, etc.).

Image Hosting

There are actually many choices for image hosting. There are many providers offering image hosting services online, and even the COS of various cloud providers can be used as image hosting. However, for me, with home broadband that has dual-stack IPv4 and IPv6 public IP addresses, self-hosting image hosting is the best way to leverage advantages and save money, so I chose the free version of the open-source image hosting: Chevereto. I haven't tried other image hosting services yet; currently, the free version of Chevereto is enough for me.

See article:Docker Series: Using Docker to Build Your Own Image Hosting Service Based on Chevereto。


Note: A major principle of building my home data center is minimum cost control: under the premise of meeting requirements, if I can avoid paying, I absolutely won't pay; if I am forced to pay (ICP filing, CDN to solve port 443 issues, etc.), I will pay the absolute minimum and not a penny more.

Therefore, the major premise for my choice of applications is either completely free, or although there is a paid version (whether it ranks first or last overall), the free version's features can meet my needs. So overall, my choices may not be the best, but they can meet my needs within the zero-cost range. Therefore, for wealthy friends with high requirements, you cannot fully refer to my solution. In the end, mine is just a budget solution.


Burn after reading

Because some sent files or information have specific security requirements, it is necessary to define the expiration time or the number of allowed accesses (accessing only once is "burn after reading"). There are quite a few choices for this requirement, but some complex ones also require a database. I don't have such complex requirements, so I finally chose the simple Cryptgeon. Its content can only be saved in memory and is lost upon restart. It does not support authentication, does not require a database, and only needs Redis. Its features support setting the expiration time and access count of the access link, and it also supports uploading small files. In short, it is simple—simple to set up and simple in functionality.

image.png

For detailed deployment, refer to my other article:Docker Series: Using Docker to Build Your Own Burn-After-Reading Application Based on cryptgeon。

Personal cloud drive

There is actually not much choice for a personal cloud drive, so I went straight to Nextcloud. Seafile also has a community edition, but to be honest, the community edition is not in the same league as Nextcloud. I started with the Seafile community edition (I haven't used the enterprise edition, so no comment), but only after using Nextcloud did I realize that a cloud drive is not just a cloud drive. Leaving aside various plugins, it provides online document editing in cooperation with OnlyOffice, supporting various formats. See article:Docker Series: Building Your Own Personal Cloud Drive Based on Nextcloud Using Docker (Catching Up on Homework)和Docker Series: Deploying OnlyOffice Container for Nextcloud

image.png

Turning Nextcloud into a music player through plugins;
image.png

Providing full-text content search functionality together with Elasticsearch... and so on. Clients for various platforms are also very complete. That's why I say there is really not much choice for a personal cloud drive. However, a key issue in setting up a personal cloud drive is bandwidth. If you frequently transfer large files, the limited bandwidth of a cloud host will definitely not be enough, so it is best to have home broadband with a public IP address and high upstream bandwidth.

Visual Docker management

Speaking of visual management tools for Docker, there is Docker Desktop for Mac on macOS, Docker Desktop for Win on Windows, and Portainer and Docker UI available for Linux. I use Portainer. Compared to Docker Desktop, Portainer can achieve more and more detailed functions (such as directly modifying environmental parameters in the corresponding container on the web interface and then regenerating the container). For details, see article:Docker Series: Building a Graphical Docker Management Interface Based on Portainer。

image.png

In addition, some Linux panels also come with a simple graphical Docker management interface, such as the Baota Linux Panel.
image.png

Apple push notification service

Since I am basically fully in the Apple ecosystem, the most perfectly adapted message push service is bark-server. The self-hosted bark-server can run in the home data center or on a cloud server. By installing the Bark client on iOS, iPadOS, and macOS, you can receive real-time message pushes, which is very convenient.

See article:Docker Series: Building a Message Push Server Based on Bark Server

Application health check

My application health checks mainly rely on Uptime-Kuma, deployed in two locations: the Uptime at home is used to detect applications deployed on Tencent Lightweight Cloud Servers and the foreign access domain names corresponding to my personal blog, which is accelerated through Cloudflare; the Uptime on the Tencent Cloud server is used to detect the origin site of the home data center and the health of applications deployed on Tencent CDN.

See article:Docker Series: Building a Real-time Application Health Monitoring and Alerting System Based on Uptime and Bark。

Website traffic monitoring

For the traffic monitoring part, I use Umami. The functional part is shown in the figure below:

image.png

image.png

image.png

image.png

It doesn't have many features, but it is compact and efficient, which is already quite good for a personal site. For specific setup, refer to the article:Docker Series: Building a Website Traffic Monitoring System Based on Umami。

Databases

The deployment of many applications requires database support. Since MySQL was acquired by Oracle, the open-source MariaDB has become the strongest alternative to MySQL (Debian 11's default software repository has already replaced MySQL with MariaDB. When I was setting up the TrinityCore 3.3.5 version World of Warcraft server, MariaDB had compatibility issues with the 22061 server at that time, which really messed me up, and in the end, I had to force-install MySQL to solve it). Therefore, I also use MariaDB (deployed via Docker) and adopt a single-database multi-application deployment method. Because of this, when the built application requires database support, I will not use docker-compose for deployment (unless there is no other way). For the setup of the MariaDB database, refer to the article:Docker Series: Using Docker to Set Up a Blog Slave Site Based on WordPress and Implement Regular Backups of Master-Slave Site Configurations。
In addition, a PostgreSQL database needs to be set up as a supplement, as some applications use this database. For the setup of the PostgreSQL database, refer to the article:Docker Series: Building a PeerTube-Based Private Video Sharing Platform (Part 1)
。

Long URL to short URL tool

Actually, converting long links to short links is not necessary; it works just fine without it. It's just that sometimes when I need to reference links on my blog or share links with others, seeing that long string of gibberish-like links looks very uncool, so in the end, I set one up myself. There are quite a few such tools, and after comparison, I finally chose Shlink.

See article:Docker Series: Setting up a Shlink-based Long-to-Short Link Tool。

Object Storage Service (COS)

Actually, I originally wanted to use Tencent Cloud's COS directly, and to be honest, it's not that expensive. But looking at the pricing structure, and thinking that if there is a lot of video playback in the future, it would still cost quite a bit of money, I finally decided to build my own.

There wasn't much room for choice here, so I adopted the open-source MinIO. Its features are relatively simple and the sharing method is quite basic, but it basically meets my requirements.

See article:Docker Series: Building a Private COS Platform Based on MinIO /technology/docker632/。

Personal media library

With hundreds of terabytes of resources, how to manage and publish them is an unavoidable issue for me. Without a good solution, not only is it inconvenient for daily viewing, but it's even difficult for me to count the number of resources (movies, TV shows, cartoons, etc.). The best solutions of this kind are Emby and Plex, and I ultimately chose Emby (Jellyfin is the open-source version of Emby; if you don't want to spend money, this is your only choice).

See article:Emby Series: Why I Eventually Chose Emby Over Plex。

Linux panel

I also used 1Panel for a while, but in the end, I still chose the aaPanel Linux panel.

See article:Linux Panel Series: Introduction to Baota Panel。

Virtual networking

There are many choices for virtual networking, including various paid options, but those are definitely not my choice. Currently, the best virtual networking technology is based on WireGuard. You can directly use WireGuard to build the server-side yourself, but that configuration is relatively tedious and requires some basic Linux knowledge. I recommend another WireGuard-based approach: Tailscale, which is an open-source client and closed-source server solution. Its biggest advantage is that it completes the tedious WireGuard server setup process for you; all you need to do is register and log in to each client. Furthermore, Tailscale offers numerous features, including DNS resolution and security (seamless integration with NextDNS), file transfer (the most efficient way to share and transfer files between Tailscale clients, unrestricted by the network), node sharing between different Tailscale accounts, etc. It also supports multiple platforms (Windows, Linux, macOS) and has dedicated NAS clients (Synology and QNAP).

Virtual networking is a very important component of a home data center solution. Whether it is setting up an origin server on home broadband without a public IP, remote operations and maintenance, or using home "magic" on cloud hosts (see article:Tips and Tricks Series: Powerful Local Proxy Tool: proxychains), or sharing home resources with other friends, none of it can do without the support of virtual networking technology.

As for the disadvantages, there is no official relay server in China, but you can set one up yourself. See article:Debian Series: Building a Tailscale DERP Server (Relay Server)。

WAF

All applications in a home data center that need to be published externally require basic security protection. Since applications are basically published via HTTP(S), a WAF (Web Application Firewall) is indispensable. There isn't much room for choice among free WAFs, but I didn't expect there to be a dark horse: the Community Edition of Chaitin SafeLine.

image.png

image.png

image.png

image.png

To be fair, it's already very impressive for a free version to be made like this. Previously, in order to find a free version with a GUI, I searched all over GitHub and eventually found httpwaf. However, I found that httpwaf only allows adding one site by default, and to support multiple sites, I was forced to dig into the underlying configuration to modify it myself. Now with the Chaitin SafeLine Community Edition, I can finally breathe a sigh of relief.

The only slight limitation is that the Community Edition can only be deployed as a reverse proxy, but this has no impact on me.

Load balancing

In my home data center solution, load balancing is not a mandatory component. After all, under normal circumstances, people wouldn't deploy multiple instances of a single application. However, because I have two environments, I still added this functional component of load balancing. Generally speaking, HAProxy and Nginx are both good choices, but for an OCD sufferer like me, not having a good GUI is simply unacceptable. After searching through open-source load balancers, I finally found the Community Edition of Zevenet:

image.png

Although the Community Edition only supports LSLB (Local Service Load Balancing), it is enough for me. However, I have to complain that although the language options support Chinese, the translation is really hard to describe, and I think it's better to just use the English version directly.

So I found nginxWebUI again, which is much more lightweight and simple:

image.png

image.png

Then set it in the reverse proxy menu:
image.png

Which one to choose specifically depends on your preference.

For building load balancing using nginxWebUI, see the article:Docker Series: Using Docker to Build a Graphical Nginx Based on nginxWebUI。

Remote O&M

There are two major categories of methods to choose from for remote operations and maintenance.

One is through a bastion host. Currently, there are quite a few open-source bastion host solutions. After looking around, JumpServer can be used for a comprehensive and large-scale setup, but it is geared towards enterprise environments, and many features are unnecessary for personal use; a lightweight and simple one is Next Terminal, which is more suitable for personal use (see article:docker series: Building an open-source bastion host based on next-terminal). The advantage of this method is that there are no requirements for the client; as long as you can log into the bastion host through the network, even an internet cafe computer will do. Actually, for individual users, the simplest way to implement a bastion host is to find an always-online intranet device (a Windows system on a VM is best), pre-configure SSH access for all devices on it using an SSH client software, then bookmark all the web login URLs of the devices in a browser, and finally just enable remote desktop access for this Windows device. This can be considered the simplest prototype of a bastion host~.

The second is a dedicated client that supports virtual networking (see:Home Data Center Series: The Application of Virtual Networking Technology) and has been pre-configured, such as mobile phones, tablets, laptops, etc. At this time, a professional SSH client software (such as Termius) and a browser can achieve direct access to all devices within the virtual network from anywhere (I am currently trying to perform remote O&M centered around an iPad mini 6, with a folding keyboard, so I don't need to bring a MacBook when going out, which is indeed a great tool for showing off).

Mail server

The mail server is built using Poste, which supports webmail, sending and receiving emails using mail clients, and Docker deployment. It has low resource consumption and is functionally suitable for personal use (see article:Docker Series: Building a Mail Server Based on poste.io))。

The above are the key applications involved in my current process of building a home data center, and I will add more at any time in the future according to my needs.

However, I later found that building my own mail server was completely thankless, so I switched to using the email routing feature provided by Cloudflare. If it's just for receiving emails, it is countless times easier than self-hosting a mail server, see article:Home Data Center Series: Using Cloudflare to Create an Email Alias with Your Own Domain Suffix。

DNS server

The DNS server is implemented through BIND on Webmin. Actually, installing BIND directly is also fine, but due to my obsession with GUIs, I chose to implement it through Webmin, though it works the same way (see article:Docker Series: Building a DNS Server Based on Bind9)。

In addition, if it is only used as an intranet DNS forwarder, AdGuard Home is more suitable, and it also comes with features like ad filtering (see article:Docker Series: Using Docker to build your own ad-free, pollution-free DNS server supporting DoH (DoT) based on AdGuard Home)。

Reverse proxy

As the unified and sole entry point for publishing home data center applications externally, the reverse proxy is very important. There are also many ways to implement it: Nginx on various panels, such as aaPanel, 1Panel, and NPM, etc. I use the aaPanel Linux panel to implement the reverse proxy, but other methods like NPM or nginxWebUI can also be used. For details, please refer to the article:Linux Panel Series: Configuring Reverse Proxy and Publishing Using Non-443 Ports和Docker Series: Building Your Own Reverse Proxy Based on NPM Using DockerandDocker Series: Using Docker to Build a Graphical Nginx Based on nginxWebUI。

Video sharing platform

If you want to host videos on major platforms like Bilibili, Douyin, Youku, or even YouTube, it costs money, and there are also content censorship issues. Wouldn't it be wonderful to build a YouTube-like video platform of your own, and then have your blog reference videos from your own video platform? This is PeerTube. For the specific setup process, see:Docker Series: Building a PeerTube-Based Private Video Sharing Platform (Part 1)。

Lightweight file sharing platform

If you just want to easily share ordinary, not-too-large files, object storage seems relatively inefficient and inconvenient. In this case, you can use Pingvin Share. In addition to being easy to set up and having a simple file storage structure, its embedded database also reduces the hassle of initialization. Most importantly, a single link can share an entire directory, and you can update the files in the directory at any time without regenerating the sharing link. Its “reverse sharing” feature allows others to upload files through a link, which can work wonders in some situations. For the specific setup and usage effects, see:Docker Series: Using Docker to Deploy a Lightweight File Sharing Platform Based on pingvin-share。

One-stop SSL certificate management

As the number of SSL certificates I use and their deployment locations increase, how to reduce management and maintenance costs becomes an issue: multiple accelerated domain names on Tencent Cloud's CDN use uploaded Let's Encrypt certificates, while multiple sites are deployed on the aaPanel of both my home server and Tencent Cloud's Lightweight Cloud Server, also using Let's Encrypt certificates (and multiple main domains). Through the one-stop solution OHTTPS, the automatic renewal and one-stop management of SSL certificates deployed across multiple sites and locations can be successfully resolved. For the specific tutorial, please refer to:Home Data Center Series: One-Stop SSL Certificate Management Tool OHTTPS Tutorial。

Centralized O&M platform

Although uptime-kuma can achieve simple application health checks and external probe-style failure notifications, in many cases, we need a centralized platform to uniformly observe the real-time resource consumption of all hosts and applications, as well as the health status of some applications that cannot be checked through external probing methods (such as applications on 127.0.0.1). Therefore, we need a centralized operation and maintenance interface, and it must support the agent-server method for deployment. wgcloud happens to meet our requirements.

For specific construction and use, see:Home Data Center Series: Deploying Your Own O&M Monitoring System via wgcloud (Part 1): Deployment Guide和Home Data Center Series: Deploying Your Own O&M Monitoring System via wgcloud (Part 2): Functionality。

View Related Categories · 3 Matches
📌 Content Structure Prompt:
This content is part of the following knowledge map, where you can view the complete content path: Blog Knowledge Map。
📎 Related Articles
Share this article
The blog content is original, please indicate the source when reposting! The RSS address of the blog is:https://blog.tangwudi.com/feed, welcome to subscribe; if needed, you can join theTelegram Groupto discuss questions together.
No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗ
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
Kaomoji
Emoji
Little Dinosaur
Flower!
Previous
Next
       

👋 Welcome to “Wudi's Personal Blog”

Here, long-term exploration is mainly carried out around the following directions:

🧱 Personal Digital Infrastructure and Blog System Construction
☁️ Cloudflare and Network Architecture Practice
🧠 AI and Knowledge System Exploration
🛡️ Network Security and Access Optimization
🎵 Music and Sound Cognition
👁️ Cognitive Perspectives and Worldviews