为什么用宝塔 + Docker?
宝塔面板(BT Panel)是国内最流行的服务器管理面板,提供可视化的网站、数据库、FTP 管理。结合 Docker Compose,你可以:
- 一键部署:不用手动配置环境,
docker compose up -d搞定 - 隔离运行:每个服务独立容器,互不干扰
- 方便迁移:
docker-compose.yml+ 数据目录打包就能换服务器 - 统一管理:宝塔面板管理 Nginx 反代 + SSL,Docker 管理应用
本文汇总 8 个常用开源服务的 Docker Compose 部署方案,直接复制粘贴即可使用。
前置准备
安装宝塔面板
# CentOS
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install_6.0.sh
# Ubuntu/Debian
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
# 通用
wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install_6.0.sh
安装完成后记录面板地址、用户名、密码。
安装 Docker + Docker Compose
宝塔面板 → 软件商店 → 搜索「Docker 管理器」→ 安装。
或者手动安装:
# 安装 Docker
curl -fsSL https://get.docker.com | bash
systemctl enable docker && systemctl start docker
# 安装 Docker Compose(Docker 20.10+ 已内置 compose 插件)
# 验证
docker compose version
创建统一目录
mkdir -p /opt/docker-services
cd /opt/docker-services
后续所有服务的 docker-compose.yml 都放在这个目录下。
1. Nginx Proxy Manager — 反向代理管理
Docker 服务多了以后,Nginx 反代配置会很乱。Nginx Proxy Manager 提供可视化管理界面。
# /opt/docker-services/nginx-proxy-manager/docker-compose.yml
version: '3.8'
services:
npm:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "81:81" # 管理界面
volumes:
- ./npm/data:/data
- ./npm/letsencrypt:/etc/letsencrypt
cd /opt/docker-services/nginx-proxy-manager
docker compose up -d
访问 http://服务器IP:81,默认账号:
- 邮箱:
admin@example.com - 密码:
changeme
⚠️ 注意:如果宝塔已经占用了 80/443 端口,需要先在宝塔中停止 Nginx,或者改用其他端口。推荐方案:宝塔 Nginx 做主反代,把 Docker 服务的端口映射到内网(如 127.0.0.1:8080),宝塔 Nginx 反代到这些端口。
2. Uptime Kuma — 服务监控
美观的自托管监控工具,支持 HTTP/TCP/Ping/DNS 等多种监控方式。
# /opt/docker-services/uptime-kuma/docker-compose.yml
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./uptime-kuma/data:/app/data
cd /opt/docker-services/uptime-kuma
docker compose up -d
访问 http://服务器IP:3001,首次进入创建管理员账号。
推荐配置:
- 添加你所有的 Docker 服务为监控项
- 设置通知方式(支持 Telegram/微信/钉钉/邮件/Slack)
- 开启状态页面(可自定义域名,对外展示服务可用性)
3. Gitea — 轻量 Git 托管
比 GitLab 轻很多(内存占用 ~100MB vs ~2GB),个人和小团队首选。
# /opt/docker-services/gitea/docker-compose.yml
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
- GITEA__server__ROOT_URL=https://git.yourdomain.com
ports:
- "3000:3000" # Web UI
- "222:22" # SSH
volumes:
- ./gitea/data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
cd /opt/docker-services/gitea
docker compose up -d
访问 http://服务器IP:3000,首次进入是安装向导。数据库选 SQLite(个人用足够)。
宝塔反代配置:
- 宝塔 → 网站 → 添加站点 →
git.yourdomain.com - 申请 SSL 证书
- 配置文件添加反代:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
4. Vaultwarden — 密码管理器
Bitwarden 的轻量服务端实现,Rust 编写,内存占用 ~30MB。
# /opt/docker-services/vaultwarden/docker-compose.yml
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
restart: unless-stopped
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=false # 创建完账号后关闭注册
- WEBSOCKET_ENABLED=true
ports:
- "8080:80"
volumes:
- ./vaultwarden/data:/data
cd /opt/docker-services/vaultwarden
docker compose up -d
重要安全配置:
- 首次访问注册管理员账号
- 访问
https://vault.yourdomain.com/admin设置管理员密码 - 设置完成后将
SIGNUPS_ALLOWED改为false - 必须配置 HTTPS(密码管理器不允许 HTTP)
5. N8N — 工作流自动化
Zapier 的开源替代品,支持 300+ 应用集成,自托管无限制。
# /opt/docker-services/n8n/docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Asia/Shanghai
ports:
- "5678:5678"
volumes:
- ./n8n/data:/home/node/.n8n
cd /opt/docker-services/n8n
docker compose up -d
常用工作流示例:
- GitHub 新 Star → 发 Telegram 通知
- 定时抓取网页变化 → 发邮件
- 表单提交 → 自动写入 Notion/飞书表格
- RSS 更新 → 自动发推特/微博
6. Memos — 碎片化笔记
开源的 flomo 替代品,支持 Markdown、标签、API。
# /opt/docker-services/memos/docker-compose.yml
version: '3.8'
services:
memos:
image: neosmemo/memos:latest
restart: unless-stopped
ports:
- "5230:5230"
volumes:
- ./memos/data:/var/opt/memos
cd /opt/docker-services/memos
docker compose up -d
7. Stirling-PDF — 本地 PDF 工具箱
24KB 的 GitHub 项目,提供 50+ PDF 操作:合并/拆分/转换/压缩/OCR/水印/加密。
# /opt/docker-services/stirling-pdf/docker-compose.yml
version: '3.8'
services:
stirling-pdf:
image: stirlingtools/stirling-pdf:latest
restart: unless-stopped
ports:
- "8090:8080"
volumes:
- ./stirling-pdf/trainingData:/usr/share/tessdata
- ./stirling-pdf/extraConfigs:/configs
cd /opt/docker-services/stirling-pdf
docker compose up -d
访问 http://服务器IP:8090,所有 PDF 操作都在浏览器完成,文件不上传到任何第三方。
8. Portainer — 容器管理面板
Docker 容器多了以后,命令行管理很痛苦。Portainer 提供可视化管理界面。
# /opt/docker-services/portainer/docker-compose.yml
version: '3.8'
services:
portainer:
image: portainer/portainer-ce:latest
restart: unless-stopped
ports:
- "9000:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer/data:/data
cd /opt/docker-services/portainer
docker compose up -d
访问 https://服务器IP:9000(注意是 HTTPS),首次创建管理员账号。
统一编排方案(All-in-One)
如果你想一次性启动所有服务:
# /opt/docker-services/docker-compose.yml
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./uptime-kuma/data:/app/data
gitea:
image: gitea/gitea:latest
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
ports:
- "3000:3000"
- "222:22"
volumes:
- ./gitea/data:/data
vaultwarden:
image: vaultwarden/server:latest
restart: unless-stopped
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=false
ports:
- "8080:80"
volumes:
- ./vaultwarden/data:/data
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
environment:
- GENERIC_TIMEZONE=Asia/Shanghai
ports:
- "5678:5678"
volumes:
- ./n8n/data:/home/node/.n8n
memos:
image: neosmemo/memos:latest
restart: unless-stopped
ports:
- "5230:5230"
volumes:
- ./memos/data:/var/opt/memos
stirling-pdf:
image: stirlingtools/stirling-pdf:latest
restart: unless-stopped
ports:
- "8090:8080"
volumes:
- ./stirling-pdf/trainingData:/usr/share/tessdata
portainer:
image: portainer/portainer-ce:latest
restart: unless-stopped
ports:
- "9000:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer/data:/data
cd /opt/docker-services
docker compose up -d
运维速查
# 查看所有服务状态
docker compose ps
# 查看某个服务日志
docker compose logs -f gitea
# 重启某个服务
docker compose restart n8n
# 更新所有服务(先 pull 再 up)
docker compose pull && docker compose up -d
# 停止所有服务
docker compose down
# 清理无用镜像(释放磁盘)
docker image prune -f
# 查看磁盘占用
docker system df
备份策略
#!/bin/bash
# /opt/docker-services/backup.sh
BACKUP_DIR="/opt/backups/docker-services/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 备份所有数据目录
tar czf $BACKUP_DIR/data.tar.gz \
uptime-kuma/data \
gitea/data \
vaultwarden/data \
n8n/data \
memos/data \
portainer/data
# 保留最近 7 天
find /opt/backups/docker-services/ -maxdepth 1 -mtime +7 -exec rm -rf {} \;
echo "Backup completed: $BACKUP_DIR/data.tar.gz"
# 添加定时任务(每天凌晨 3 点备份)
echo "0 3 * * * /opt/docker-services/backup.sh" | crontab -
常见问题
Q:宝塔 Nginx 和 Docker Nginx 端口冲突怎么办? 不要让 Docker 服务直接占用 80/443。所有 Docker 服务映射到高位端口(3000/5678/8080 等),由宝塔 Nginx 统一反代。
Q:服务器内存不够怎么办? 2GB 内存的服务器跑 4-5 个服务没问题。如果内存紧张,优先保留核心服务(Gitea + Vaultwarden),其他按需启动。
Q:怎么让外部访问 HTTPS? 宝塔面板 → 网站 → 添加站点 → Let's Encrypt 申请免费 SSL 证书 → 开启强制 HTTPS。
Q:Docker 镜像拉取慢怎么办?
配置国内镜像源:/etc/docker/daemon.json 添加 {"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]}。
原文出处
- 宝塔面板官方文档
- Docker Compose 官方文档
- Jpom 宝塔部署指南
- 各服务官方文档:Gitea / N8N / Vaultwarden