Docker 已经成为在 VPS 上部署开源项目的标准方式。相比传统 LNMP 环境配置,Docker 部署的优势在于环境隔离、一键迁移和版本锁定。2026 年的 Docker 生态更加成熟——Docker Compose V2 已完全取代 V1,根less 模式默认启用,Docker BuildKit 成为默认构建器。本文通过 4 个真实开源项目的完整部署实战,带你掌握从零搭建到上线的全流程。
开始之前,你需要一台安装了 Docker 和 Docker Compose 的 VPS。如果还没有,Vultr 提供一键 Docker 镜像。对比各建站方案的差异可参考 VPS 建站方案对比。
一、项目 1:部署 Vaultwarden(密码管理器)
Vaultwarden 是 Bitwarden 服务端的轻量级 Rust 重写版,资源占用极低(128MB 内存即可运行),是自托管密码管理器的最佳选择。
创建项目目录和 docker-compose.yml:
mkdir -p ~/vaultwarden && cd ~/vaultwarden
cat <<'EOF' > docker-compose.yml
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
ports:
- "8080:80"
volumes:
- ./data:/data
environment:
- SIGNUPS_ALLOWED=true
- DOMAIN=https://vw.yourdomain.com
EOF
启动服务: docker compose up -d
启动后访问 http://你的VPS_IP:8080 即可注册使用。生产环境建议在 Vaultwarden 前面加一层 Nginx 反向代理并配置 SSL 证书(使用 Certbot 或 Caddy 自动获取)。注册完第一个账号后,务必设置 SIGNUPS_ALLOWED=false 然后重启,防止他人注册。
二、项目 2:部署 Gitea(轻量 Git 服务)
Gitea 是 GitHub/GitLab 的轻量替代品,用 Go 编写,256MB 内存即可流畅运行个人或小团队的代码仓库。
docker-compose.yml:
mkdir -p ~/gitea && cd ~/gitea
cat <<'EOF' > docker-compose.yml
version: '3.8'
services:
server:
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__server__DOMAIN=git.yourdomain.com
- GITEA__server__SSH_DOMAIN=git.yourdomain.com
EOF
启动: docker compose up -d
Gitea 的安装向导在首次访问 Web 界面时自动弹出。数据库选择 SQLite3(个人使用足够),无需额外配置 MySQL。Gitea 支持导入 GitHub/GitLab 仓库,迁移非常方便。如果你的 VPS 需要更高的磁盘 I/O 性能来承载 Git 操作,DigitalOcean 的 NVMe SSD 方案在随机读写方面表现优秀。
三、项目 3:部署 NocoDB(开源 Airtable 替代)
NocoDB 可以将任何数据库(MySQL、PostgreSQL、SQLite)转换为智能电子表格界面,对非技术人员非常友好。
docker-compose.yml(含 PostgreSQL):
mkdir -p ~/nocodb && cd ~/nocodb
cat <<'EOF' > docker-compose.yml
version: '3.8'
services:
nocodb:
image: nocodb/nocodb:latest
container_name: nocodb
restart: always
ports:
- "8080:8080"
volumes:
- ./data:/usr/app/data
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: nocodb
POSTGRES_PASSWORD: your_secure_password
volumes:
- ./pgdata:/var/lib/postgresql/data
EOF
启动: docker compose up -d
首次访问会引导创建管理员账号。NocoDB 支持从 Excel/CSV 导入数据,也可以连接到现有的外部数据库。对于预算有限的团队,InterServer 提供不限流量的 VPS,适合部署多人协作工具。
四、项目 4:部署 Uptime Kuma(监控仪表盘)
Uptime Kuma 是一个开源的 uptime 监控工具,可以监控 HTTP(S)、TCP、Ping 等多种协议,支持 Telegram、邮件、Webhook 等多种告警方式。
docker-compose.yml:
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
cat <<'EOF' > docker-compose.yml
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./data:/app/data
EOF
启动: docker compose up -d
Uptime Kuma 的配置非常简单,启动后访问 3001 端口,创建管理员账号后即可添加监控项。支持设置 60 秒监控间隔,对小型 VPS 的资源消耗可以忽略不计。推荐与 VPS 安全加固清单 中的监控策略配合使用。
五、Docker 运维实用技巧
1. 限制容器资源使用 — 在 docker-compose.yml 中添加资源限制,防止单个容器占满 VPS:
services:
your-service:
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
2. 日志管理 — 限制容器日志文件大小:
services:
your-service:
logging:
options:
max-size: "10m"
max-file: "3"
3. 自动重启策略 — 设置 restart: always 确保容器在 VPS 重启后自动恢复。
4. 使用 watchtower 自动更新 — 部署 watchtower 容器,自动拉取并重建已更新的镜像:
docker run -d --name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
5. 备份与恢复 — Docker Compose 项目的数据通常存储在挂载卷中。备份整个项目目录(含 volumes 数据)即可完成备份,恢复时只需还原目录并重新 docker compose up -d。
六、VPS 选购建议(Docker 场景)
Docker 部署对 VPS 的硬件要求取决于同时运行的项目数量。以下是基于不同用量场景的推荐配置:
| 场景 | 推荐配置 | 推荐商家 | 月费参考 |
|---|---|---|---|
| 1-2 个小项目 | 1 核 / 1GB | Vultr | $6/月 |
| 3-5 个项目(个人用) | 2 核 / 2GB | DigitalOcean | $12/月 |
| 5+ 项目 / 团队使用 | 4 核 / 4GB | InterServer | $6/月(不限流量) |
常见问题(FAQ)
Q:我的 VPS 只有 512MB 内存,能跑 Docker 吗?
A:可以,但需要优化。使用 Alpine 基础镜像、限制每个容器的内存上限、关闭不必要的监控容器。512MB 内存可以稳定运行 1-2 个轻量服务(如 Vaultwarden + Nginx 反向代理)。
Q:Docker 部署和 LNMP 部署哪个安全?
A:Docker 的容器隔离提供了额外安全层——即使某个服务被攻破,攻击者也被限制在容器内。但 Docker 本身也需要安全加固(如不暴露 Docker socket、使用非 root 用户运行容器)。
Q:所有 Docker 项目都开一个端口,端口不够用怎么办?
A:使用 Nginx Proxy Manager 或 Traefik 作为反向代理网关,所有容器通过域名访问(80/443 端口),无需为每个项目分配独立端口。
Q:Docker 容器重启后数据会丢失吗?
A:只要数据存储在 volumes 或 bind mounts 中就不会丢失。container 内部的数据在重建后会丢失,所以务必把所有持久化数据放在挂载卷中。
Q:不同 VPS 之间迁移 Docker 项目方便吗?
A:非常方便。在旧 VPS 上停止容器(docker compose down),将整个项目目录打包(tar -czf project.tar.gz project_dir/),传输到新 VPS 解压后执行 docker compose up -d 即可。这是 Docker 相比传统安装方式的最大优势之一。
总结
Docker 让 VPS 上的开源项目部署变得标准化、可迁移、易维护。从密码管理到代码托管,从数据库可视化到服务监控,4 个实战项目覆盖了个人和团队最常用的自托管场景。掌握 Docker Compose 的基本编排方式后,部署新项目的时间可以从小时级缩短到分钟级。如果你还没有一台运行 Docker 的 VPS,Vultr 的 Docker 预安装镜像可以让你在 5 分钟内进入实战状态。
多折点