Loading...

文章背景图

我的自建服务器架构全解析:从一台 VPS 到整套服务

2026-09-13
2
-
- 分钟
|

我的自建服务器架构全解析:从一台 VPS 到整套服务

这篇文章记录我当前这台自托管服务器的完整架构,既是给自己留档,也希望能给想上船「自建服务」的朋友一份参考。文中已隐去所有敏感信息(公网 IP、域名、密钥、密码等一律脱敏)。

一、硬件与系统

项目配置
虚拟化KVM 云主机(QEMU)
CPUIntel Xeon Platinum 8259CL,4 核
内存8 GiB
磁盘30 GB(系统盘)
系统Debian GNU/Linux 12 (bookworm)
内核6.1.x LTS

整体是一台标准的中小规格云主机,4 核 8G 的配置足以扛住下面这一整套容器化服务,还有富余跑几个小进程。

二、技术选型的核心思想

整台机器围绕 Docker + Compose 组织。原则只有一句:「一个容器只干一件事,所有状态都落到数据卷」。这样升级、迁移、备份都只需动容器,不动宿主。

  • 反向代理:Nginx Proxy Manager(NPM),统一入口、自动签发 SSL 证书。
  • 数据库:PostgreSQL(主打)+ MySQL(个别服务)。
  • 代码托管:Gitea,自建 Git 服务。
  • 对象/文件与文档:自建博客、代码仓库等。
  • AI 网关:new-api,统一聚合多家模型 API,供内部和外部调用。
  • 邮件:docker-mailserver,完整的收发信栈(Postfix + Dovecot + Rspamd + ClamAV)。
  • 游戏服务:MC 的 Paper 服务端 + 一个 Java 进程常驻。

三、网络与反向代理拓扑

公网流量只从 80 / 443 两个端口进入,由 NPM 统一接管,再按域名分发到各个容器:

                         ┌─→ blog.example.top   → Halo(博客)
  公网 ──▶ NPM (80/443) ──┼─→ git.example.top    → Gitea(Git 服务,SSH 走 2222)
                         └─→ ai.example.top     → new-api(AI 网关)
  • SSL 证书由 NPM 通过 Let's Encrypt 自动申请与续期,域名共若干个,全走 HTTPS。
  • Gitea 的 SSH 端口映射到宿主的 2222,避免和宿主自带的 22 冲突。
  • 邮件相关端口(25/465/587/993/995 等)单独暴露给 mailserver 容器,不经 NPM。

四、容器服务清单

服务镜像作用对外端口
nginx-proxy-managerjc21/nginx-proxy-manager反向代理 + 证书80/443(81 为管理界面)
halohalohub/halo:2博客系统8090
giteadocker.gitea.com/gitea代码托管8088(SSH 2222)
postgresqlpostgres:18-alpine主数据库5432
pgadmin4dpage/pgadmin4数据库管理界面8080
mailservermailserver/docker-mailserver邮件服务25/110/143/465/587/993/995/4190
new-apicalciumion/new-apiAI 模型网关3000
dpaneldpanel/dpanel:lite容器可视化管理8080

宿主层面还有几个非容器进程:frps(内网穿透服务端)、MC 服务(paper + Java,监听 25565 和 19132)、一个游戏 Mod 载入器(StardewModdingAPI,用 cpulimit 限流)。

五、数据与存储

  • 所有容器的持久化数据都挂在 Docker volume 或 bind mount 里,集中在 /var/lib/docker(当前约 3.5 GB)。
  • 系统盘整体已用约 68%,可用空间约 9 GB,属于「够用但需要关注」的水平。
  • 数据库跑在 Postgres 上,Halo、Gitea 等都能吃到它的稳定性;MySQL 作为少数服务(如某些怀旧项目)的补充。

六、安全与运维要点

  1. SSH 只留密钥认证,密码登录关闭,避免暴力破解。
  2. 公网暴露面最小化:非必要端口不对外,数据库、管理界面默认只对 NPM 内网开放。
  3. 证书全自动:NPM 负责申请与续期,减少人工维护成本。
  4. 邮件反垃圾:mailserver 自带 Rspamd(内容过滤)+ ClamAV(病毒扫描)。
  5. 资源治理:游戏类进程用 cpulimit 限流,避免单个进程拖垮整机。
  6. 备份:Postgres 靠 pg_dump,容器卷靠定时快照,双保险。

七、给想自建的人的建议

  1. 从 NPM 起步:先拿下反向代理 + SSL,这是所有自建服务的地基。
  2. 数据库优先 Postgres:生态好、扩展强,一个实例能服务多套应用。
  3. SSH 是命门:第一时间关密码、只留密钥,改掉默认端口可再加一道保险。
  4. 监控磁盘和内存:容器多了资源会悄悄吃紧,df -hfree -h 是日常亲爹。
  5. 一个容器一个职责:宁可多跑几个小容器,也别把一堆功能塞进一个容器。

本文为个人自建记录,所有 IP、域名、账号、密钥等均已脱敏处理。如果你也在折腾自托管,欢迎交流。

原创

我的自建服务器架构全解析:从一台 VPS 到整套服务

本文链接: 我的自建服务器架构全解析:从一台 VPS 到整套服务

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录