· 技术备忘录 · 9 min read
Docker部署速查手册:我常用的10个自托管服务
密码管理、文件同步、监控告警、自动化工作流...10个开箱即用的Docker Compose配置,复制粘贴就能跑。VPS利用率从10%到90%,只需要这一篇。
你买了一台 VPS,搭了个博客,然后 90% 的资源都在闲着?
别浪费了。一台 1核2G 的小机器,就能跑 10+ 个自托管服务。 密码管理、文件同步、监控告警、自动化工作流——全给你安排上。
这篇是我的 Docker 部署速查手册。所有配置都是我实际在用的,复制粘贴就能跑。
前置准备
在开始之前,确保你的 VPS 上已经装好了:
- Docker
- Docker Compose
- 一个域名(可选,但强烈推荐)
- Nginx Proxy Manager 或 Traefik(做反向代理和 SSL)
我习惯用以下目录结构:
/opt/docker/
├── vaultwarden/
│ └── docker-compose.yml
├── uptime-kuma/
│ └── docker-compose.yml
├── n8n/
│ └── docker-compose.yml
└── ...每个服务一个目录,数据都挂载在 ./data 下,备份方便。
1. Vaultwarden — 自建密码管理器
用途:替代 1Password / Bitwarden 付费版 内存占用:约 100MB 推荐指数:⭐⭐⭐⭐⭐
# vaultwarden/docker-compose.yml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
ports:
- "8080:80"
volumes:
- ./data:/data
environment:
- SIGNUPS_ALLOWED=false # 自己注册完后关掉
- WEBSOCKET_ENABLED=true # 启用实时同步
- ADMIN_TOKEN=your_admin_token_here # 管理后台token访问:http://your-ip:8080 相关阅读:《密码管理的”斩杀线”:为什么我自建 Vaultwarden》
小贴士:注册完自己的账号后,把 SIGNUPS_ALLOWED 设为 false,防止路人蹭你的库。
2. Uptime Kuma — 服务监控
用途:监控你的网站、服务器、端口是否在线 内存占用:约 80MB 推荐指数:⭐⭐⭐⭐⭐
# uptime-kuma/docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./data:/app/data
- /var/run/docker.sock:/var/run/docker.sock # 可选,监控Docker容器访问:http://your-ip:3001 相关阅读:《Uptime Kuma 监控部署指南》
能监控什么:
- HTTP/HTTPS 网站
- TCP 端口
- Ping(ICMP)
- DNS 解析
- Docker 容器状态
- 数据库连接
通知方式:Telegram、邮件、Discord、Slack、Webhook… 几十种集成。
3. n8n — 自动化工作流
用途:替代 Zapier / Make 内存占用:约 200MB 推荐指数:⭐⭐⭐⭐⭐
# n8n/docker-compose.yml
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: always
ports:
- "5678:5678"
volumes:
- ./data:/home/node/.n8n
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PROTOCOL=https
- GENERIC_TIMEZONE=Asia/Shanghai访问:http://your-ip:5678 相关阅读:《自动化的代价:为什么我抛弃 Zapier 选择了自建 n8n》
常用工作流:
- RSS → AI 摘要 → Telegram 频道
- 表单提交 → 自动发邮件 → 写入 Notion
- 价格监控 → 降价提醒 → 发通知
4. Nextcloud — 私有云盘
用途:替代百度网盘 / Google Drive 内存占用:约 300MB 推荐指数:⭐⭐⭐⭐
# nextcloud/docker-compose.yml
services:
nextcloud:
image: nextcloud:latest
container_name: nextcloud
restart: always
ports:
- "8081:80"
volumes:
- ./data:/var/www/html
- ./data/apps:/var/www/html/custom_apps
- ./data/config:/var/www/html/config
- ./data/data:/var/www/html/data
environment:
- PHP_MEMORY_LIMIT=512M
- PHP_UPLOAD_LIMIT=10G
- TZ=Asia/Shanghai
db:
image: mariadb:latest
container_name: nextcloud-db
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=your_root_password
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=your_db_password访问:http://your-ip:8081
小贴士:
- 建议用 MariaDB,不要用 SQLite(性能差)
- 大文件上传记得改 PHP 上传限制
- 配合 OnlyOffice 可以实现在线编辑文档
5. Portainer — Docker 可视化管理
用途:图形化管理 Docker 容器 内存占用:约 50MB 推荐指数:⭐⭐⭐⭐⭐
# portainer/docker-compose.yml
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9000:9000"
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data访问:http://your-ip:9000
能做什么:
- 可视化查看所有容器状态
- 一键启动/停止/重启/删除容器
- 查看日志、进入终端
- 管理镜像、卷、网络
- 部署 Stack(Docker Compose)
对于不熟悉命令行的人,Portainer 是 Docker 的最佳入门工具。
6. AdGuard Home — 全网广告拦截
用途:替代 Pi-hole,全网去广告 内存占用:约 80MB 推荐指数:⭐⭐⭐⭐
# adguard-home/docker-compose.yml
services:
adguard-home:
image: adguard/adguardhome:latest
container_name: adguard-home
restart: always
ports:
- "53:53/tcp"
- "53:53/udp"
- "3000:3000/tcp"
- "8082:80/tcp"
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf访问:http://your-ip:3000(首次配置) DNS 端口:53(UDP/TCP)
用法:
- 把你的路由器 DNS 改成这台 VPS 的 IP
- 家里所有设备自动去广告
- 还能屏蔽追踪器、恶意网站
- 看统计数据,知道谁在访问什么
7. Miniflux — RSS 阅读器
用途:替代 Feedly / Inoreader 内存占用:约 50MB 推荐指数:⭐⭐⭐⭐
# miniflux/docker-compose.yml
services:
miniflux:
image: miniflux/miniflux:latest
container_name: miniflux
restart: always
ports:
- "8083:8080"
depends_on:
- db
environment:
- DATABASE_URL=postgres://miniflux:your_password@db/miniflux?sslmode=disable
- RUN_MIGRATIONS=1
- CREATE_ADMIN=1
- ADMIN_USERNAME=admin
- ADMIN_PASSWORD=your_admin_password
- POLLING_FREQUENCY=30
db:
image: postgres:15-alpine
container_name: miniflux-db
restart: always
volumes:
- ./db:/var/lib/postgresql/data
environment:
- POSTGRES_USER=miniflux
- POSTGRES_PASSWORD=your_password
- POSTGRES_DB=miniflux访问:http://your-ip:8083 相关阅读:《RSS 极简主义:Miniflux 与我的信息节食》
优点:
- 极简,没有花里胡哨的功能
- 支持 Fever API,可以用 Reeder 等客户端
- 支持集成 Wallabag、Notion、Pocket
- 能自动抓取全文(不用点原文跳转)
8. Wallabag — 稍后阅读
用途:替代 Pocket / Instapaper 内存占用:约 100MB 推荐指数:⭐⭐⭐
# wallabag/docker-compose.yml
services:
wallabag:
image: wallabag/wallabag:latest
container_name: wallabag
restart: always
ports:
- "8084:80"
volumes:
- ./data:/var/www/wallabag/data
- ./images:/var/www/wallabag/web/assets/images
environment:
- SYMFONY__ENV__DOMAIN_NAME=https://wallabag.yourdomain.com
- SYMFONY__ENV__FOSUSER_REGISTRATION=false访问:http://your-ip:8084
用法:
- 看到好文章,点一下 Wallabag 浏览器扩展
- 文章自动保存,去掉广告和干扰元素
- 有空的时候慢慢读
- 支持导出为 ePub、Mobi、PDF
9. Gitea — 私有 Git 仓库
用途:替代 GitHub 私有仓库 内存占用:约 100MB 推荐指数:⭐⭐⭐⭐
# gitea/docker-compose.yml
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: always
ports:
- "3000:3000"
- "2222:22"
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3访问:http://your-ip:3000 SSH 端口:2222
小贴士:
- 个人用 SQLite 足够,不用单独跑 MySQL
- 记得开两步验证
- 配合 Drone CI 可以做持续集成
10. Duplicati — 自动备份
用途:备份你的 Docker 数据到云端 内存占用:约 80MB 推荐指数:⭐⭐⭐⭐⭐
# duplicati/docker-compose.yml
services:
duplicati:
image: duplicati/duplicati:latest
container_name: duplicati
restart: always
ports:
- "8200:8200"
volumes:
- ./config:/config
- /opt/docker:/source:ro # 要备份的源目录
- /tmp/restore:/restore # 恢复时用的目录
environment:
- TZ=Asia/Shanghai
- DUPLICATI_PASS=your_admin_password访问:http://your-ip:8200
支持的备份目标:
- Backblaze B2
- S3 兼容存储(R2、阿里云 OSS 等)
- Google Drive
- WebDAV
- SFTP
- 本地文件夹
备份策略建议:
- 每天自动备份一次
- 保留 30 天的备份
- 备份加密(AES-256)
- 定期测试恢复
一键部署脚本
如果你想一次把这些都装上,可以用这个脚本:
#!/bin/bash
# 安装 Docker
curl -fsSL https://get.docker.com | sh
systemctl enable docker
# 创建基础目录
mkdir -p /opt/docker/{vaultwarden,uptime-kuma,n8n,portainer,duplicati}
# 启动 Portainer(先装这个,后面可视化管理)
cd /opt/docker/portainer
cat > docker-compose.yml << 'EOF'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data
EOF
docker compose up -d
echo "Portainer 已启动:http://$(curl -s ifconfig.me):9000"
echo "接下来可以在 Portainer 里部署其他服务"资源占用汇总
| 服务 | 内存占用 | 端口 | 推荐指数 |
|---|---|---|---|
| Portainer | ~50MB | 9000 | ⭐⭐⭐⭐⭐ |
| Vaultwarden | ~100MB | 8080 | ⭐⭐⭐⭐⭐ |
| Uptime Kuma | ~80MB | 3001 | ⭐⭐⭐⭐⭐ |
| n8n | ~200MB | 5678 | ⭐⭐⭐⭐⭐ |
| Duplicati | ~80MB | 8200 | ⭐⭐⭐⭐⭐ |
| Miniflux | ~50MB | 8083 | ⭐⭐⭐⭐ |
| AdGuard Home | ~80MB | 3000/53 | ⭐⭐⭐⭐ |
| Gitea | ~100MB | 3000 | ⭐⭐⭐⭐ |
| Nextcloud | ~300MB | 8081 | ⭐⭐⭐⭐ |
| Wallabag | ~100MB | 8084 | ⭐⭐⭐ |
| 合计 | ~1140MB |
1核2G 的 VPS 完全跑的下。 甚至还有富余。
安全提醒
自托管很爽,但安全第一:
- 一定要开 HTTPS:用 Nginx Proxy Manager 或 Traefik 自动申请 Let’s Encrypt 证书
- 改默认端口:别用 8080、3000 这种默认端口,容易被扫
- 开防火墙:只开放必要的端口,其他全关掉
- 定期备份:用 Duplicati 自动备份到云端
- 关注安全更新:用 Watchtower 自动更新镜像
一句话总结
Docker 让 VPS 的利用率从 10% 升到 90%。
一台 $20/年的小 VPS,能跑 10+ 个自托管服务。 省下的 SaaS 订阅费,一年就是几百美元。
但记住:自托管的成本不是服务器钱,是你的时间。 选你真正需要的,别为了”折腾”而折腾。
把这篇收藏起来,下次部署新服务直接抄作业。