6.4 KiB
6.4 KiB
Docker 服务部署集合
一套完整的自托管服务部署方案,适用于阿里云等国内服务器环境。
服务列表
| 服务 | 说明 | 端口 |
|---|---|---|
| base/ | 公共基础设施(Docker + Nginx + Certbot + 防火墙) | — |
| gitea/ | Git 代码托管(Gitea + MySQL 8.4) | 443, 2222 |
| certd/ | SSL 证书自动化管理(Certd) | 443 |
| vaultwarden/ | 密码管理器(Vaultwarden / Bitwarden 兼容) | 443 |
| siyuan/ | 知识管理笔记(思源笔记 SiYuan) | 443 |
| portainer/ | Docker 可视化管理(Portainer CE) | 443 |
架构概览
┌─────────────┐
│ Nginx │ ← 统一 HTTPS 入口
│ (系统包) │ ← Let's Encrypt 证书
└──────┬──────┘
│
┌──────────────┬───────┼───────┬──────────────┐
│ │ │ │ │
┌──────▼──────┐ ┌────▼────┐ ┌▼─────┐ ┌▼─────────┐ ┌─▼────────┐
│ Gitea │ │ Certd │ │SiYuan│ │Vaultwarden│ │Portainer │
│ :3000(内部) │ │ :7001 │ │:6806 │ │ :8080 │ │ :9000 │
│ + MySQL 8.4 │ │ │ │ │ │ │ │ │
└─────────────┘ └─────────┘ └──────┘ └───────────┘ └──────────┘
Docker Docker Docker Docker Docker
所有服务通过 Nginx 反向代理提供 HTTPS 访问,容器端口仅监听 127.0.0.1。
目录结构
docker/
├── README.md # 本文件
├── base/ # 公共基础设施
│ ├── setup.sh # 安装脚本(Docker/Nginx/Certbot/防火墙)
│ ├── .env.example # Docker 镜像加速配置
│ └── README.md
├── gitea/ # Gitea 代码托管
│ ├── docker-compose.yml # Gitea + MySQL 容器编排
│ ├── deploy.sh # 一键部署脚本(自包含)
│ ├── backup.sh # 备份脚本
│ ├── upgrade.sh # 升级脚本
│ ├── migrate.sh # 迁移脚本
│ ├── nginx/gitea.conf # Nginx 配置模板
│ └── README.md
├── certd/ # Certd 证书管理
│ ├── docker-compose.yml
│ ├── deploy.sh # 部署脚本(依赖 base/)
│ ├── backup.sh
│ ├── nginx/certd.conf
│ └── README.md
├── vaultwarden/ # Vaultwarden 密码管理
│ ├── docker-compose.yml
│ ├── deploy.sh # 部署脚本(依赖 base/)
│ ├── backup.sh
│ ├── nginx/vaultwarden.conf
│ └── README.md
├── siyuan/ # SiYuan 思源笔记
│ ├── docker-compose.yml
│ ├── deploy.sh # 部署脚本(依赖 base/)
│ ├── backup.sh
│ ├── nginx/siyuan.conf
│ └── README.md
└── portainer/ # Portainer CE Docker 管理
├── docker-compose.yml
├── deploy.sh # 部署脚本(依赖 base/)
├── backup.sh
├── nginx/portainer.conf
└── README.md
快速开始
场景一:全新服务器部署所有服务
# 1. 上传所有文件到服务器
scp -r base/ gitea/ certd/ vaultwarden/ siyuan/ portainer/ root@<IP>:/opt/
# 2. 安装基础环境
ssh root@<IP>
cd /opt/base
cp .env.example .env
bash setup.sh
# 3. 部署 Gitea
cd /opt/gitea
bash deploy.sh # 首次生成 .env,修改配置后再次运行
vi .env
bash deploy.sh
# 4. 部署 Certd
cd /opt/certd
bash deploy.sh
vi .env
bash deploy.sh
# 5. 部署 Vaultwarden
cd /opt/vaultwarden
bash deploy.sh
vi .env
bash deploy.sh
# 6. 部署 SiYuan
cd /opt/siyuan
bash deploy.sh
vi .env
bash deploy.sh
# 7. 部署 Portainer(Docker 可视化管理)
cd /opt/portainer
bash deploy.sh
vi .env
bash deploy.sh
场景二:已有 Gitea 的服务器,追加部署 Certd
# 上传新服务文件(base 是新增的公共依赖)
scp -r base/ certd/ root@<IP>:/opt/
ssh root@<IP>
# 安装 base(会检测已安装的组件并跳过)
cd /opt/base
cp .env.example .env
bash setup.sh
# 部署 Certd
cd /opt/certd
bash deploy.sh
vi .env
bash deploy.sh
场景三:只部署单个服务
每个服务的 deploy.sh 会自动调用 base/setup.sh 安装缺失的基础环境,无需手动运行 base。
scp -r base/ vaultwarden/ root@<IP>:/opt/
ssh root@<IP>
cd /opt/vaultwarden
bash deploy.sh
vi .env
bash deploy.sh
域名规划示例
| 服务 | 域名 | DNS 记录 |
|---|---|---|
| Gitea | git.example.com |
A → 服务器 IP |
| Certd | cert.example.com |
A → 服务器 IP |
| Vaultwarden | vault.example.com |
A → 服务器 IP |
| SiYuan | note.example.com |
A → 服务器 IP |
日常运维
查看各服务状态
# Gitea
cd /opt/gitea && docker compose ps
# Certd
cd /opt/certd && docker compose ps
# Vaultwarden
cd /opt/vaultwarden && docker compose ps
# SiYuan
cd /opt/siyuan && docker compose ps
备份所有服务
cd /opt/gitea && bash backup.sh
cd /opt/certd && bash backup.sh
cd /opt/vaultwarden && bash backup.sh
cd /opt/siyuan && bash backup.sh
SSL 证书续期
所有服务共享 Certbot,证书自动续期(每天 03:00 检查)。
# 查看所有证书
certbot certificates
# 手动测试续期
certbot renew --dry-run
注意事项
- Gitea 的 deploy.sh 是自包含的,不依赖 base/(历史兼容)。Certd、Vaultwarden 和 SiYuan 依赖 base/。
- 所有容器端口仅监听
127.0.0.1,通过 Nginx 反向代理对外提供 HTTPS 服务。 .env文件包含敏感信息,不要提交到公开仓库。- 首次部署每个服务时需要运行两次
deploy.sh:第一次生成.env,修改配置后第二次正式部署。