Article language
Original language: Chinese
You are reading a machine-translated version from Chinese to English.
Building My Own Home Server: From Zero to One
一切始于对数字自主权的渴望。我厌倦了将个人数据托管在第三方平台上,无论是照片、文档还是媒体文件,还是本地大模型,亦或是效率工具,都希望能够完全掌控在自己手中。
缘起:为什么我要搭建个人服务器?
一切始于对数字自主权的渴望。我厌倦了将个人数据托管在第三方平台上,无论是照片、文档还是媒体文件,还是本地大模型,亦或是效率工具,都希望能够完全掌控在自己手中。同时,我也需要一个可靠的VPN解决方案,让家人能够安全地访问互联网。这些需求汇聚成一个明确的目标:构建属于自己的个人服务器。
第一步:基础架构搭建
选择硬件平台
最初,我在家中闲置的旧电脑上开始了这段旅程,搭载的是Intel 12100T平台,比起老的X79平台,不仅性能更强,功耗也大幅降低,真正实现了"低功耗计算"。在开启了C-state10,做了powertop的优化,以及BIOS的调教之后,在运行了大约10个左右的docker微服务之后,可以达到20W的待机能耗,几乎接近于一个N100的能耗。
目前我的服务器基础架构
- 配置: Intel 12100T + H610M-A D4主板 + 有线网络连接
- 内存: 32-64GB RAM
- 存储:
- 系统盘: Colorful CN600 512GB NVMe
- 媒体存储: Samsung SSD 850 465.8GB (挂载到
/mnt/media) - 备用存储: 杂牌SSD 223.6GB
网络配置优化
- 路由器: ASUS 路由器,设置端口转发和固定IP绑定
- 公网IP: 通过家庭宽带获取动态公网IP
- 域名管理: 使用 Cloudflare 管理
antxz.com域名 - 网络问题解决: 发现网卡仅运行在100Mbps而非1Gbps,需更换Cat5e/Cat6网线
初期VPN速度仅有2Mbps,通过以下措施提升至10Mbps:
- 将WiFi连接改为有线连接
- 更换为Cat5e以上网线,确保千兆连接
- 开启BBR拥塞控制算法
网络配置挑战
作为家庭服务器,最大的挑战是网络配置。家庭宽带通常只有动态IP,且80/443端口常被ISP封锁。不过幸运的是,我的ISP是Spectrum所以一般不会封锁或者频繁的改动公网IP,同时上传也不会因为检测到高流量而被限制传输。
并且通过Cloudflare DNS和SSL证书服务,我成功解决了可能的问题:
- 在Cloudflare注册域名antxz.com
- 配置A记录指向家庭公网IP
- 使用acme.sh脚本自动申请Let's Encrypt证书
需要注意的是,在我配置VPN服务的时候,我意识到必须使用灰云(DNS Only),因为需要把端口暴露给公网,而Web服务可以使用橙云(Proxied),这是经过多次调试得出的经验。
第二步:核心服务部署
VPN服务(x-ui + Xray):安全连接内网的基石
我选择了VLESS+Reality协议作为VPN解决方案,通过3x-ui面板进行管理。Reality协议的优势在于其强大的抗封锁能力,能够有效伪装成正常HTTPS流量。
配置过程中遇到了Cloudflare代理干扰的问题,最终确定子域必须直连,不能经过Cloudflare代理。
- 协议: VLESS + Reality
- SSL证书: 使用Let's Encrypt证书,通过acme.sh自动续期
- 性能优化: 开启BBR加速,针对跨国连接优化

反向代理(Nginx Proxy Manager)与SSL
我使用NPM也就是Nginx Proxy Manager作为统一入口,处理所有HTTPS请求,并转发到后端服务。通配符证书(*.antxz.com)简化了证书管理,实现了自动续期。
- 作用: 统一管理所有Web服务的域名和SSL证书
- 管理地址:
http://192.168.50.*:*(内网访问) - SSL配置: 使用Cloudflare通配符证书
*.antxz.com - 端口映射: 开放80/443端口,内部服务通过不同端口转发

文件管理(FileBrowser + Samba)
在文件管理上,我选择了两种处理方式,
第一种是直接使用Samba,把磁盘通过局域网映射到我的主要工作电脑上,这样我可以在windows系统下直接浏览上传或下载需要的文件
第二种我选择了FileBrowser,通过A记录二级域名在公网访问。FileBrowser提供了直观的文件管理界面,通过Nginx Proxy Manager反向代理,实现了安全的远程文件访问。配合Cloudflare的保护,即使在外也能安全地管理服务器文件。
- 功能: Web界面文件管理,支持上传下载
- 权限: 访问整个服务器文件系统
系统监控(Netdata + Uptime Kuma)
监控是必要的,我没有VPS,没有任何备用系统。这会导致我需要在最短时间内获取服务器的状态信息,所以我选择了这两项服务。当系统出现硬件或服务器宕机的异常时,会自动发送提醒邮件。
Netdata: 实时系统监控
Netdata提供了实时的系统监控,包括CPU、内存、磁盘、网络和功耗等全方位指标。通过Docker部署并配置反向代理,实现了安全的远程监控。
Uptime Kuma: 服务状态监控
主要负责服务域名的状态监控
主页聚合(Homepage)
主页聚合是为了方便自己进入不同的微服务。不过不对公网开放,只适用于内网。
- 功能: 统一入口,集成所有服务快捷链接
第三步:NAS与效率工具集成
媒体中心:私人影院(Jellyfin)
Jellyfin成为了我的媒体中心首选,它开源、功能强大且资源占用合理。配合qBittorrent下载器,形成了完整的媒体生态系统:
- 电影库:/mnt/media/movies
- 剧集库:/mnt/media/tvshows
- 音乐库:/mnt/media/music
- 音乐会库:/mnt/media/concert
- …
所有媒体文件挂载在三星SSD上,确保了流畅的播放体验。

照片备份:私人相册(Immich)
在深度对比了Immich和Nextcloud之后,我最终选择了Immich。Nextcloud虽然功能强大,但是在多年的发展中变的过于臃肿。我认为它想成为个人Host中的Google Drive,但是有很多功能我是不需要的,于是我选择了更定向的Immich。
Immich提供了远超Nextcloud Photos的照片管理体验,具备人脸识别、地图标记等高级功能。家庭的手机照片自动备份到服务器,再也不用担心丢失的问题。另外,Immich的地图标记功能非常有特色。
- 存储路径:
/mnt/media/photos - 功能: 手机照片自动备份、人脸识别、时间线浏览

笔记同步:Obsidian(CouchDB + LiveSync)
通过自建CouchDB服务器,我实现了Obsidian笔记的私有云同步,完全替代了官方的付费同步服务。所有笔记实时同步,且端对端加密,确保隐私安全。
- 数据库: CouchDB容器化部署
- 客户端: Obsidian插件实现端到端加密同步

文档管理:Paperless-NG
Paperless-NG成为了我的数字文档管理系统,自动OCR识别PDF文档,支持全文搜索和标签分类,极大地提高了文档管理效率。在配置中限定了检索语言,更改核心和线程数,极大的加快了文件的OCR处理和归档时间。
- 功能: PDF/文档管理,支持OCR识别和全文搜索
- 适用场景: 替代通用网盘,专注文档处理
技术架构与最佳实践
在磕磕碰碰地完成了服务器的配置后,终于在1周之后上线了。过程中,我积累了很多经验,踩过的坑多多少少有些典型。所以我想在最后整理归纳一些,实践中的问题与相应的处理方式。也算是前人种树,后人乘凉了。
Docker化部署
除系统级服务(x-ui、xray)外,所有应用均采用Docker容器化部署,确保了服务间的隔离性和系统的稳定性。
安全加固问题
虽然通过Cloudflare DNS和SSL可以在中间过滤大部分攻击,但毕竟是将内网暴露在互联网上,风险肯定是有的。所以下面是我想到的可以保护自己服务器的方法。
用户权限和路径相关
- 一定要权限最小化。在日常运维的时候,用普通用户 + sudo的当时授权特定的命令,并且禁用一些不必要的系统用户。
- 微服务的运行需要严谨
root,可以使用UID>1000的普通用户 - 所有管理界面均设置复杂路径,避免默认路径暴露
- 此举主要是降低被“自动化扫描”命中的概率。比如
cloud/nas/server/admin等词汇会更容易引起攻击者的注意。
- 此举主要是降低被“自动化扫描”命中的概率。比如
- 定期更新系统和应用,修补安全漏洞
- 使用强密码和复杂订阅路径
- 使用你的服务商的Tunnel服务,彻底关闭外网的端口。
- 这样哪怕端口被猜到,攻击者也无法直接连接你的服务器IP。
SSH相关
- 修改默认端口到不常用端口。
- 禁用Root登录,强制使用普通用户登录后再sudo
- 强制密匙认证,或者通过Cloudflare Tunnel建立双重认证
UFW相关
在微服务的架构中,防火墙全部遵循Default Deny。
- 默认规则的设置
ufw default deny incoming # 拒绝所有进入流量
ufw default allow outgoing # 允许所有流出流量(根据需要也可限制)- 微服务端口只开放API网关端口,比如
80,443,内部端口比如8080,9090都不应该对公网开放。
成果与感悟
如今,我的服务器已稳定运行多项服务。这个过程不仅让我掌握了服务器运维技能,更重要的是实现了数字生活的自主权。每一行配置、每一个服务的背后,都是对技术的理解和对需求的思考。这次的笔记也是为了能记录下自己的思考。
未来展望
虽然目前的架构已经满足大部分需求,但我仍在探索更多可能性:
- 添加游戏服务器,与朋友共享游戏乐趣。(比如Minecraft服务器)
- 优化媒体转码性能,提升4K视频体验。(使用Intel的QuickSync)
- 探索更多开源工具,丰富服务器功能
构建个人服务器不是终点,而是一个持续学习和优化的过程。在这个过程中,我不仅收获了技术能力,更获得了对Linux这个系统的深刻的理解。
注:本文基于实际部署经验整理,所有配置和服务均已验证可行。技术细节可能会随软件版本更新而变化,建议参考最新官方文档进行配置。

Please log in to post a comment.
Log in0 comments
Be the first to comment.