自托管(Self-Hosting)不是什么新鲜事,但 2026 年的开源生态已经足够成熟,让你可以用一台 VPS 或 NAS,替代几乎所有的付费云服务。本文是一份可直接粘贴使用的 Docker Compose 配置清单,覆盖文件同步、照片备份、媒体流、密码管理、广告拦截、运维监控等场景。
一、为什么要自托管?
三句话讲清楚:
隐私:你的照片、文件、笔记、密码不再躺在 Google / Dropbox / Notion 的服务器上。数据 100% 在你自己的硬盘里。
成本:一套覆盖文件同步+媒体流+密码管理+广告拦截+PDF处理的完整自托管栈,硬件成本约为 $5-15/月(VPS)。同等功能的 SaaS 订阅加起来轻松超过 $50/月。
控制权:没有平台封号、没有突然涨价、没有"该服务已停止运营"。你决定什么时候升级、什么时候迁移、什么时候删数据。
二、硬件准备与基础环境
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 一键安装
# 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 version2.3 创建共享网络
所有容器通过统一的 Docker 网络互相通信:
docker network create homelab2.4 推荐目录结构
~/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 证书,零命令行操作。
# ~/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。
# ~/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 插件)全部集成。
# ~/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推荐插件(应用商店一键安装):
- Memories:媲美 Google Photos 的 AI 相册
- Talk:自托管 Zoom 替代方案
- Collectives:团队知识库
- Forms:Google Forms 替代品
Immich:Google Photos 的完美替代
Immich 2026 年 1 月发布了 v2.5.0(9万星里程碑),是目前最火的开源相册方案。支持手机自动备份、AI 人脸识别、地图视图、非破坏性编辑、释放手机空间、图片搜索。
# ~/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 示例:
UPLOAD_LOCATION=/mnt/storage/immich
DB_PASSWORD=<强密码>
IMMICH_VERSION=releaseImmich v2.5.0 亮点:非破坏性编辑(裁剪/旋转/镜像,随时恢复原图)、释放手机空间(已备份的自动清空本地)、Web 端数据库备份恢复、渐进式 JPEG 加载、移动端星级评分。
Syncthing:点对点同步(无需服务器)
与 Nextcloud/Immich 不同,Syncthing 是点对点协议——设备之间直接同步文件,不经过中心服务器。适合不需要"云端存储"、只要多台电脑/NAS之间保持文件一致的场景。
# ~/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: trueNextcloud vs Immich vs Syncthing 场景选型
| 场景 | 推荐 |
|---|---|
| 替代 Google Drive(文件+文档+日历+邮件) | Nextcloud |
| 替代 Google Photos(手机照片自动备份+AI相册) | Immich |
| 多设备文件夹单向/双向同步 | Syncthing |
| 公司/团队私有云盘 | Nextcloud |
| 摄影爱好者 RAW 管理 | Immich + PhotoPrism |
六、媒体与娱乐 — 替代 Netflix / Spotify / Plex
Jellyfin:完全免费的媒体服务器
Jellyfin 是 Plex/Emby 的开源替代,完全免费、零跟踪、无付费墙。支持硬件转码、自动刮削海报和字幕、多用户独立进度。
# ~/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:个人 Spotify
Navidrome 是一个轻量级音乐流媒体服务器,兼容 Subsonic API,支持几乎所有平台的客户端(iOS: play:Sub; Android: DSub / Symfonium; Web: 内置播放器)。
# ~/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、桌面客户端)。
# ~/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 工具。敏感文档零泄露风险。
# ~/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: truen8n:开源自动化(替代 Zapier)
可视化工作流自动化平台,400+ 集成。拖拽配置自动化流程——文件来了自动备份、GitHub 事件触发通知、表单数据同步到数据库。
# ~/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 等多渠道告警。还能生成公开状态页向用户展示服务健康度。
# ~/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: trueDockge:Docker Compose 可视化管理
Dockge 是 Uptime Kuma 作者的新作,专门为 Docker Compose 栈设计的管理面板。与 Portainer 不同,Dockge 专注于 Compose 文件编辑、启动/停止/更新、日志查看。
# ~/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: truePortainer(备选):容器全功能管理面板
如果你需要管理 Swarm 集群、镜像仓库、网络配置等更高级的 Docker 功能,Portainer 是更全面的选择。
# ~/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: trueDockge vs Portainer
| 维度 | Dockge | Portainer |
|---|---|---|
| 定位 | Compose 文件管理器 | 全功能 Docker 面板 |
| Compose 编辑 | 核心功能,内建编辑器 | 支持但不在首屏 |
| 集群管理 | ❌ | ✅ Swarm / K8s |
| 资源占用 | 极低 (~30MB) | 中等 (~100MB) |
| 推荐 | 个人/家庭 Compose 栈 | 团队/企业/多节点 |
九、安全加固
自托管意味着你要自己负责安全。以下是 6 条必须遵守的规则:
1. 不要直接暴露端口到公网
# ❌ 危险:直接暴露 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. 定期备份
# 备份所有数据卷
tar -czf homelab-backup-$(date +%Y%m%d).tar.gz ~/homelab/
# 推荐:3-2-1 备份策略
# 3 份副本 + 2 种存储介质 + 1 份异地5. 保持镜像更新
# 定期执行
cd ~/homelab
for d in */; do
cd "$d"
docker compose pull
docker compose up -d
cd ..
done可以使用 Watchtower 自动更新(但生产环境建议手动审阅更新日志后再操作)。
6. 设置资源限制
防止单个容器吃光所有内存:
services:
nextcloud:
# ...
deploy:
resources:
limits:
memory: 512M十、一键启动脚本
把所有服务启动整合到一个脚本:
#!/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 |
十三、常见坑与避雷
- 不要用 root 用户运行容器:使用
PUID=1000和PGID=1000映射为普通用户,防止权限混乱 - 数据卷必须持久化:所有
volumes挂载到宿主机绝对路径,不在容器内存储数据 - 不要裸 HTTP 暴露公网:Vaultwarden/Nextcloud 等涉及账号密码的服务,公网访问必须是 HTTPS
- Immich 不要用 latest 标签:Immich 更新频繁且有破坏性变更,建议固定版本或使用
release标签 - 数据库密码不要再改:选好强密码后就不要动了,否则所有关联服务都得重新配置
- 先装 NPM 再装其他:反向代理是整个栈的入口,第一个部署可以避免后续反复修改
总结
2026 年的自托管生态已经非常成熟。Awesome-Selfhosted 榜单收录了超过 2000 个开源项目,覆盖你能想到的几乎所有场景。本文推荐的 12 个工具是目前社区公认的最佳实践组合:
- 入口层:Nginx Proxy Manager(HTTPS + 反向代理)
- 安全层:AdGuard Home(DNS 广告拦截)
- 存储层:Nextcloud(文件)+ Immich(照片)+ Syncthing(同步)
- 媒体层:Jellyfin(视频)+ Navidrome(音乐)
- 工具层:Vaultwarden(密码)+ Stirling PDF(文档)+ n8n(自动化)
- 运维层:Uptime Kuma(监控)+ Dockge(管理)
如果你已经有一台 NAS 或 VPS 在跑 Docker,不妨今天就按这个列表挑一个最需要的服务部署试试。第一个容器跑起来之后,后面的就快多了。
