自托管(Self-Hosting)不是什么新鲜事,但 2026 年的开源生态已经足够成熟,让你可以用一台 VPS 或 NAS,替代几乎所有的付费云服务。本文是一份可直接粘贴使用的 Docker Compose 配置清单,覆盖文件同步、照片备份、媒体流、密码管理、广告拦截、运维监控等场景。


一、为什么要自托管?

三句话讲清楚:

隐私:你的照片、文件、笔记、密码不再躺在 Google / Dropbox / Notion 的服务器上。数据 100% 在你自己的硬盘里。

成本:一套覆盖文件同步+媒体流+密码管理+广告拦截+PDF处理的完整自托管栈,硬件成本约为 $5-15/月(VPS)。同等功能的 SaaS 订阅加起来轻松超过 $50/月

控制权:没有平台封号、没有突然涨价、没有"该服务已停止运营"。你决定什么时候升级、什么时候迁移、什么时候删数据。

成本速算

SaaS 服务 月费
Google One (2TB) $9.99
Netflix Premium $22.99
1Password $2.99
Spotify $10.99
Zapier Pro $19.99
合计 $66.95/月

自托管替代方案:VPS (8GB RAM / 200GB SSD) $12-15/月,节省 75%+


二、硬件准备与基础环境

2.1 硬件选择

级别 配置 价格 适合
入门 树莓派 5 / 旧电脑 (4-8GB RAM) ¥0-500 5-8 个轻量服务
推荐 Intel N100 小主机 (16GB RAM + 1TB SSD) ¥800-1500 全部服务 + 媒体库
进阶 二手企业级服务器 / 多盘位 NAS ¥2000+ 大规模存储 + 高性能

2026 年最低门槛:一台 8GB 内存的 x86 设备 + 512GB SSD,就足够跑本文推荐的全部服务。

2.2 Docker 一键安装

BASH
# Ubuntu/Debian 一键安装
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
# 安装 Docker Compose 插件
sudo apt install docker-compose-plugin -y
# 验证
docker compose version

2.3 创建共享网络

所有容器通过统一的 Docker 网络互相通信:

BASH
docker network create homelab

2.4 推荐目录结构

PLAINTEXT
~/homelab/
├── adguard/
├── jellyfin/
├── immich/
├── nextcloud/
├── npm/              # Nginx Proxy Manager
├── vaultwarden/
├── uptime-kuma/
├── stirling-pdf/
├── n8n/
├── portainer/
└── syncthing/

三、反向代理与 SSL — 所有服务的入口

Nginx Proxy Manager(NPM)是自托管栈的核心基础设施。它为所有服务提供统一的 HTTPS 入口,自动申请和续期 Let’s Encrypt 证书,零命令行操作。

YAML
# ~/homelab/npm/docker-compose.yml
services:
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - "80:80"       # HTTP
      - "443:443"     # HTTPS
      - "81:81"       # 管理后台
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - homelab

networks:
  homelab:
    external: true

部署后访问 http://<IP>:81,默认账户 admin@example.com / 密码 changeme

NPM vs Traefik

维度 Nginx Proxy Manager Traefik
适合人群 新手 / 家庭用户 开发者 / 追求自动化
配置方式 Web UI 图形化 YAML 标签 / 自动发现
SSL 鼠标点击一键申请 Docker labels 自动配置
Docker 集成 手动添加域名和端口 自动发现 Docker 容器
学习曲线 中偏高
性能 Nginx 内核,非常稳定 Go 编写,云原生优先

推荐:新手用 NPM,容器多(30+)且需要自动发现用 Traefik。


四、网络与安全 — 广告拦截与 DNS 防护

AdGuard Home:全家去广告 DNS

将路由器 DNS 指向 AdGuard Home,所有设备(包括电视、手机、IoT)自动屏蔽广告和追踪器。支持自定义过滤规则、家长控制、DNS-over-HTTPS。

YAML
# ~/homelab/adguard/docker-compose.yml
services:
  adguardhome:
    image: adguard/adguardhome:latest
    restart: unless-stopped
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "3000:3000/tcp"     # 初始配置(一次性)
      - "8083:80/tcp"       # 管理后台
    volumes:
      - ./workdir:/opt/adguardhome/work
      - ./confdir:/opt/adguardhome/conf
    networks:
      - homelab

networks:
  homelab:
    external: true

首次配置:访问 http://<IP>:3000 完成向导,此后管理后台在端口 8083

Pi-hole(备选方案)

Pi-hole 更轻量、专注 DNS 级别的广告过滤,资源占用更低。如果你已经部署了 AdGuard Home,不需要同时安装 Pi-hole——两者的核心功能高度重叠。

维度 AdGuard Home Pi-hole
Web UI 现代化,实时日志 简洁,需插件增强统计
DNS-over-HTTPS 内置支持 需额外配置
家长控制 内置(安全搜索、时间限制) 需额外配置
资源占用 ~50MB RAM ~30MB RAM
推荐 功能更全,新手友好 极简主义,树莓派首选

五、存储与同步 — 替代 Google Drive / iCloud

Nextcloud:全能私有云

Nextcloud 是自托管生态的"瑞士军刀"——文件同步只是基本功,在线 Office 协同编辑、日历、通讯录、相册(Memories 插件)、RSS 阅读器、即时通讯(Talk 插件)全部集成。

YAML
# ~/homelab/nextcloud/docker-compose.yml
services:
  nextcloud-db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: <强密码>
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: <强密码>
    volumes:
      - ./db:/var/lib/mysql
    networks:
      - homelab

  nextcloud:
    image: nextcloud:30
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      MYSQL_HOST: nextcloud-db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: <强密码>
    volumes:
      - ./data:/var/www/html
      - /mnt/storage/nextcloud:/data   # 数据存储目录
    depends_on:
      - nextcloud-db
    networks:
      - homelab

networks:
  homelab:
    external: true

推荐插件(应用商店一键安装)

Immich:Google Photos 的完美替代

Immich 2026 年 1 月发布了 v2.5.0(9万星里程碑),是目前最火的开源相册方案。支持手机自动备份、AI 人脸识别、地图视图、非破坏性编辑、释放手机空间、图片搜索。

YAML
# ~/homelab/immich/docker-compose.yml
# 注:完整配置建议从官网获取最新版本
# https://immich.app/docs/install/docker-compose
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    restart: unless-stopped
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env
    ports:
      - "2283:2283"
    depends_on:
      - redis
      - database
    networks:
      - homelab

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:release
    restart: unless-stopped
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    networks:
      - homelab

  redis:
    image: redis:7
    restart: unless-stopped
    volumes:
      - ./redis:/data
    networks:
      - homelab

  database:
    image: tensorchord/pgvecto-rs:pg16-v0.4.0
    restart: unless-stopped
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: <强密码>
      POSTGRES_USER: postgres
      POSTGRES_DB: immich
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    networks:
      - homelab

volumes:
  model-cache:

networks:
  homelab:
    external: true

.env 示例

BASH
UPLOAD_LOCATION=/mnt/storage/immich
DB_PASSWORD=<强密码>
IMMICH_VERSION=release

Immich v2.5.0 亮点:非破坏性编辑(裁剪/旋转/镜像,随时恢复原图)、释放手机空间(已备份的自动清空本地)、Web 端数据库备份恢复、渐进式 JPEG 加载、移动端星级评分。

Syncthing:点对点同步(无需服务器)

与 Nextcloud/Immich 不同,Syncthing 是点对点协议——设备之间直接同步文件,不经过中心服务器。适合不需要"云端存储"、只要多台电脑/NAS之间保持文件一致的场景。

YAML
# ~/homelab/syncthing/docker-compose.yml
services:
  syncthing:
    image: syncthing/syncthing:latest
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    ports:
      - "8384:8384"         # Web UI
      - "22000:22000/tcp"   # TCP 文件传输
      - "22000:22000/udp"   # QUIC 文件传输
      - "21027:21027/udp"   # 本地发现
    volumes:
      - ./config:/var/syncthing/config
      - /mnt/storage/sync:/data
    networks:
      - homelab

networks:
  homelab:
    external: true

Nextcloud vs Immich vs Syncthing 场景选型

场景 推荐
替代 Google Drive(文件+文档+日历+邮件) Nextcloud
替代 Google Photos(手机照片自动备份+AI相册) Immich
多设备文件夹单向/双向同步 Syncthing
公司/团队私有云盘 Nextcloud
摄影爱好者 RAW 管理 Immich + PhotoPrism

六、媒体与娱乐 — 替代 Netflix / Spotify / Plex

Jellyfin:完全免费的媒体服务器

Jellyfin 是 Plex/Emby 的开源替代,完全免费、零跟踪、无付费墙。支持硬件转码、自动刮削海报和字幕、多用户独立进度。

YAML
# ~/homelab/jellyfin/docker-compose.yml
services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    restart: unless-stopped
    ports:
      - "8096:8096"
      - "8920:8920"           # HTTPS(可选)
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /mnt/media/movies:/media/movies:ro
      - /mnt/media/tv:/media/tv:ro
      - /mnt/media/music:/media/music:ro
    devices:
      - /dev/dri:/dev/dri     # Intel 核显硬件转码
    networks:
      - homelab

networks:
  homelab:
    external: true

性能提示:在管理后台「控制台 → 播放 → 转码」中开启 VAAPI 硬件加速。4K HEVC 转码时,CPU 占用从 300% 降到 15%。

Navidrome 是一个轻量级音乐流媒体服务器,兼容 Subsonic API,支持几乎所有平台的客户端(iOS: play:Sub; Android: DSub / Symfonium; Web: 内置播放器)。

YAML
# ~/homelab/navidrome/docker-compose.yml
services:
  navidrome:
    image: deluan/navidrome:latest
    restart: unless-stopped
    ports:
      - "4533:4533"
    environment:
      ND_SCANSCHEDULE: "1h"
      ND_LOGLEVEL: info
      ND_MUSICFOLDER: /music
      ND_ENABLETRANSCODINGCONFIG: "true"
      ND_TRANSCODINGCACHESIZE: "4000M"
    volumes:
      - ./data:/data
      - /mnt/media/music:/music:ro
    networks:
      - homelab

networks:
  homelab:
    external: true

媒体栈全家桶

如果你追求极致的自动化媒体库体验,可以搭配:

工具 功能 配合 Jellyfin
Sonarr 电视节目自动下载+重命名 自动导入
Radarr 电影自动下载+重命名 自动导入
Prowlarr 统一管理索引器(BT/Usenet) 给 Sonarr/Radarr 用
Bazarr 自动下载字幕 内嵌支持
Jellyseerr 用户请求+发现(类似 Overseerr) 请求→下载→Jellyfin

七、效率与生产工具

Vaultwarden:自托管密码管理器

Vaultwarden 是 Bitwarden 服务端的 Rust 重写版,资源占用仅为官方版的 1/10(约 15MB RAM),完全兼容所有 Bitwarden 客户端(浏览器扩展、手机 App、桌面客户端)。

YAML
# ~/homelab/vaultwarden/docker-compose.yml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    ports:
      - "8082:80"
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=false        # 初始注册后立即关闭
      - LOGIN_RATELIMIT_SECONDS=10   # 登录频率限制
      - TZ=Asia/Shanghai
    volumes:
      - ./data:/data
    networks:
      - homelab

networks:
  homelab:
    external: true

⚠️ 安全要点:Vaultwarden 必须通过 NPM 配置 HTTPS,否则浏览器扩展会拒绝连接。注册完账号后立即将 SIGNUPS_ALLOWED 设为 false

Stirling PDF:本地 PDF 全能工具箱

50+ PDF 操作全部在本地处理——合并、拆分、压缩、OCR、格式转换、加水印、签名……替代 Smallpdf / ILovePDF 等所有在线 PDF 工具。敏感文档零泄露风险

YAML
# ~/homelab/stirling-pdf/docker-compose.yml
services:
  stirling-pdf:
    image: frooodle/s-pdf:latest
    restart: unless-stopped
    ports:
      - "8085:8080"
    environment:
      - DOCKER_ENABLE_SECURITY=false
      - LANGS=zh_CN                   # 中文界面
      - SYSTEM_DEFAULTLOCALE=zh-CN
    volumes:
      - ./trainingData:/usr/share/tessdata   # OCR 中文语言包
      - ./config:/configs
    networks:
      - homelab

networks:
  homelab:
    external: true

n8n:开源自动化(替代 Zapier)

可视化工作流自动化平台,400+ 集成。拖拽配置自动化流程——文件来了自动备份、GitHub 事件触发通知、表单数据同步到数据库。

YAML
# ~/homelab/n8n/docker-compose.yml
services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.yourdomain.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.yourdomain.com
      - GENERIC_TIMEZONE=Asia/Shanghai
    volumes:
      - ./data:/home/node/.n8n
      - ./files:/files
    networks:
      - homelab

networks:
  homelab:
    external: true

八、监控与运维

Uptime Kuma:服务可用性监控

简洁漂亮的监控面板,支持 HTTP/TCP/DNS/Ping 检测,通过邮件、Telegram、飞书、Discord 等多渠道告警。还能生成公开状态页向用户展示服务健康度。

YAML
# ~/homelab/uptime-kuma/docker-compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - homelab

networks:
  homelab:
    external: true

Dockge:Docker Compose 可视化管理

Dockge 是 Uptime Kuma 作者的新作,专门为 Docker Compose 栈设计的管理面板。与 Portainer 不同,Dockge 专注于 Compose 文件编辑、启动/停止/更新、日志查看。

YAML
# ~/homelab/dockge/docker-compose.yml
services:
  dockge:
    image: louislam/dockge:latest
    restart: unless-stopped
    ports:
      - "5001:5001"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /home/$USER/homelab:/home/$USER/homelab  # 管理你的 compose 目录
    environment:
      - DOCKGE_STACKS_DIR=/home/$USER/homelab
    networks:
      - homelab

networks:
  homelab:
    external: true

Portainer(备选):容器全功能管理面板

如果你需要管理 Swarm 集群、镜像仓库、网络配置等更高级的 Docker 功能,Portainer 是更全面的选择。

YAML
# ~/homelab/portainer/docker-compose.yml
services:
  portainer:
    image: portainer/portainer-ce:latest
    restart: unless-stopped
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data
    networks:
      - homelab

networks:
  homelab:
    external: true

Dockge vs Portainer

维度 Dockge Portainer
定位 Compose 文件管理器 全功能 Docker 面板
Compose 编辑 核心功能,内建编辑器 支持但不在首屏
集群管理 ✅ Swarm / K8s
资源占用 极低 (~30MB) 中等 (~100MB)
推荐 个人/家庭 Compose 栈 团队/企业/多节点

九、安全加固

自托管意味着你要自己负责安全。以下是 6 条必须遵守的规则:

1. 不要直接暴露端口到公网

YAML
# ❌ 危险:直接暴露 8082 到所有网络接口
ports:
  - "8082:80"

# ✅ 安全:只暴露给 NPM(同一 Docker 网络)
# 不映射端口,只通过 NPM 反向代理访问
expose:
  - "80"

推荐方案:使用 Cloudflare Tunnel 或 Tailscale 做内网穿透,完全避免开放端口。

2. 所有 Web 服务强制 HTTPS

通过 NPM 为每个服务配置域名+SSL,Let’s Encrypt 证书自动续期。

3. 关闭公开注册

Vaultwarden: SIGNUPS_ALLOWED=false
Gitea: 管理后台关闭公开注册
Nextcloud: 关闭「允许用户自行注册」

4. 定期备份

BASH
# 备份所有数据卷
tar -czf homelab-backup-$(date +%Y%m%d).tar.gz ~/homelab/

# 推荐:3-2-1 备份策略
# 3 份副本 + 2 种存储介质 + 1 份异地

5. 保持镜像更新

BASH
# 定期执行
cd ~/homelab
for d in */; do
  cd "$d"
  docker compose pull
  docker compose up -d
  cd ..
done

可以使用 Watchtower 自动更新(但生产环境建议手动审阅更新日志后再操作)。

6. 设置资源限制

防止单个容器吃光所有内存:

YAML
services:
  nextcloud:
    # ...
    deploy:
      resources:
        limits:
          memory: 512M

十、一键启动脚本

把所有服务启动整合到一个脚本:

BASH
#!/bin/bash
# ~/homelab/start-all.sh

SERVICES=(
  npm adguard nextcloud immich jellyfin
  vaultwarden uptime-kuma stirling-pdf
  syncthing dockge navidrome n8n
)

for svc in "${SERVICES[@]}"; do
  if [ -f ~/homelab/$svc/docker-compose.yml ]; then
    echo "▶ Starting $svc..."
    docker compose -f ~/homelab/$svc/docker-compose.yml up -d
  fi
done

echo "✅ All services started."

十一、端口速查表

服务 端口 用途
Nginx Proxy Manager 81 反向代理管理后台
AdGuard Home 8083 DNS 广告拦截管理
Nextcloud 8080 私有云盘
Immich 2283 照片管理
Jellyfin 8096 媒体服务器
Navidrome 4533 音乐流媒体
Vaultwarden 8082 密码管理器
Stirling PDF 8085 PDF 工具箱
n8n 5678 自动化工作流
Uptime Kuma 3001 服务监控
Dockge 5001 Compose 管理器
Portainer 9000 容器管理面板
Syncthing 8384 文件同步

十二、按场景推荐起点

不知道从哪开始?按你的核心需求选择入口:

你的需求 优先部署
手机照片太多,不想充 iCloud Immich
文件多设备同步 Nextcloud 或 Syncthing
看电影追剧 Jellyfin
密码记不住 Vaultwarden
全家去广告 AdGuard Home
担心服务挂了不知道 Uptime Kuma
处理敏感 PDF 文件 Stirling PDF
「我全都要」 NPM → Immich → Jellyfin → Vaultwarden → AdGuard Home

十三、常见坑与避雷

  1. 不要用 root 用户运行容器:使用 PUID=1000PGID=1000 映射为普通用户,防止权限混乱
  2. 数据卷必须持久化:所有 volumes 挂载到宿主机绝对路径,不在容器内存储数据
  3. 不要裸 HTTP 暴露公网:Vaultwarden/Nextcloud 等涉及账号密码的服务,公网访问必须是 HTTPS
  4. Immich 不要用 latest 标签:Immich 更新频繁且有破坏性变更,建议固定版本或使用 release 标签
  5. 数据库密码不要再改:选好强密码后就不要动了,否则所有关联服务都得重新配置
  6. 先装 NPM 再装其他:反向代理是整个栈的入口,第一个部署可以避免后续反复修改

总结

2026 年的自托管生态已经非常成熟。Awesome-Selfhosted 榜单收录了超过 2000 个开源项目,覆盖你能想到的几乎所有场景。本文推荐的 12 个工具是目前社区公认的最佳实践组合

如果你已经有一台 NAS 或 VPS 在跑 Docker,不妨今天就按这个列表挑一个最需要的服务部署试试。第一个容器跑起来之后,后面的就快多了。

版权声明

作者: 易邦

链接: https://blog.e8k.net/posts/docker-selfhosted-tools-2026/

许可证: 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。