Files
server-deploy/README.md

211 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Docker 服务部署集合
一套完整的自托管服务部署方案,适用于阿里云等国内服务器环境。
## 服务列表
| 服务 | 说明 | 端口 |
|------|------|------|
| [base/](base/) | 公共基础设施Docker + Nginx + Certbot + 防火墙) | — |
| [gitea/](gitea/) | Git 代码托管Gitea + MySQL 8.4 | 443, 2222 |
| [certd/](certd/) | SSL 证书自动化管理Certd | 443 |
| [vaultwarden/](vaultwarden/) | 密码管理器Vaultwarden / Bitwarden 兼容) | 443 |
| [siyuan/](siyuan/) | 知识管理笔记(思源笔记 SiYuan | 443 |
| [portainer/](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
```
## 快速开始
### 场景一:全新服务器部署所有服务
```bash
# 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. 部署 PortainerDocker 可视化管理)
cd /opt/portainer
bash deploy.sh
vi .env
bash deploy.sh
```
### 场景二:已有 Gitea 的服务器,追加部署 Certd
```bash
# 上传新服务文件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。
```bash
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 |
## 日常运维
### 查看各服务状态
```bash
# 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
```
### 备份所有服务
```bash
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 检查)。
```bash
# 查看所有证书
certbot certificates
# 手动测试续期
certbot renew --dry-run
```
## 注意事项
- **Gitea 的 deploy.sh 是自包含的**,不依赖 base/历史兼容。Certd、Vaultwarden 和 SiYuan 依赖 base/。
- 所有容器端口仅监听 `127.0.0.1`,通过 Nginx 反向代理对外提供 HTTPS 服务。
- `.env` 文件包含敏感信息,不要提交到公开仓库。
- 首次部署每个服务时需要运行两次 `deploy.sh`:第一次生成 `.env`,修改配置后第二次正式部署。