From 41a586b97b552c35b178e5d7c7f4d5da5b11867b Mon Sep 17 00:00:00 2001 From: Joywayer Date: Tue, 7 Apr 2026 16:03:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20siyuan=20certd=20vaultward?= =?UTF-8?q?en?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 197 ++++++++++++++ base/.env.example | 4 + base/README.md | 72 ++++++ base/setup.sh | 395 +++++++++++++++++++++++++++++ certd/.env.example | 29 +++ certd/README.md | 282 ++++++++++++++++++++ certd/backup.sh | 68 +++++ certd/deploy.sh | 178 +++++++++++++ certd/docker-compose.yml | 29 +++ certd/nginx/certd.conf | 55 ++++ gitea/README.md | 158 ++++++++++-- gitea/deploy.sh | 10 +- gitea/docker-compose.yml | 2 +- siyuan/.env.example | 31 +++ siyuan/README.md | 277 ++++++++++++++++++++ siyuan/backup.sh | 70 +++++ siyuan/deploy.sh | 185 ++++++++++++++ siyuan/docker-compose.yml | 28 ++ siyuan/nginx/siyuan.conf | 70 +++++ vaultwarden/.env.example | 44 ++++ vaultwarden/README.md | 328 ++++++++++++++++++++++++ vaultwarden/backup.sh | 92 +++++++ vaultwarden/deploy.sh | 210 +++++++++++++++ vaultwarden/docker-compose.yml | 29 +++ vaultwarden/nginx/vaultwarden.conf | 78 ++++++ 25 files changed, 2894 insertions(+), 27 deletions(-) create mode 100644 README.md create mode 100644 base/.env.example create mode 100644 base/README.md create mode 100644 base/setup.sh create mode 100644 certd/.env.example create mode 100644 certd/README.md create mode 100644 certd/backup.sh create mode 100644 certd/deploy.sh create mode 100644 certd/docker-compose.yml create mode 100644 certd/nginx/certd.conf create mode 100644 siyuan/.env.example create mode 100644 siyuan/README.md create mode 100644 siyuan/backup.sh create mode 100644 siyuan/deploy.sh create mode 100644 siyuan/docker-compose.yml create mode 100644 siyuan/nginx/siyuan.conf create mode 100644 vaultwarden/.env.example create mode 100644 vaultwarden/README.md create mode 100644 vaultwarden/backup.sh create mode 100644 vaultwarden/deploy.sh create mode 100644 vaultwarden/docker-compose.yml create mode 100644 vaultwarden/nginx/vaultwarden.conf diff --git a/README.md b/README.md new file mode 100644 index 0000000..78613e5 --- /dev/null +++ b/README.md @@ -0,0 +1,197 @@ +# 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 | + +## 架构概览 + +``` + ┌─────────────┐ + │ Nginx │ ← 统一 HTTPS 入口 + │ (系统包) │ ← Let's Encrypt 证书 + └──────┬──────┘ + │ + ┌──────────────┼──────────────┬──────────────┐ + │ │ │ │ + ┌──────▼──────┐ ┌────▼─────┐ ┌──────▼──────┐ ┌────▼─────┐ + │ Gitea │ │ Certd │ │ Vaultwarden │ │ SiYuan │ + │ :3000(内部) │ │ :7001 │ │ :8080(内部) │ │ :6806 │ + │ + MySQL 8.4 │ │ │ │ │ │ │ + └─────────────┘ └──────────┘ └─────────────┘ └──────────┘ + 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 +``` + +## 快速开始 + +### 场景一:全新服务器部署所有服务 + +```bash +# 1. 上传所有文件到服务器 +scp -r base/ gitea/ certd/ vaultwarden/ siyuan/ root@:/opt/ + +# 2. 安装基础环境 +ssh root@ +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 +``` + +### 场景二:已有 Gitea 的服务器,追加部署 Certd + +```bash +# 上传新服务文件(base 是新增的公共依赖) +scp -r base/ certd/ root@:/opt/ + +ssh root@ + +# 安装 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@:/opt/ +ssh root@ +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`,修改配置后第二次正式部署。 diff --git a/base/.env.example b/base/.env.example new file mode 100644 index 0000000..d4a7ead --- /dev/null +++ b/base/.env.example @@ -0,0 +1,4 @@ +# ===== 基础环境配置 ===== + +# Docker 镜像加速(国内服务器推荐配置) +DOCKER_REGISTRY_MIRRORS=https://docker.1ms.run,https://docker.m.daocloud.io,https://dockerpull.org,https://docker.rainbond.cc,https://docker.udayun.com,https://hub.rat.dev diff --git a/base/README.md b/base/README.md new file mode 100644 index 0000000..424c765 --- /dev/null +++ b/base/README.md @@ -0,0 +1,72 @@ +# 服务器基础环境 + +公共基础设施脚本,提供以下功能: + +- **系统初始化**:安装常用工具、设置时区 +- **Docker 安装**:使用阿里云镜像源,配置国内加速 +- **Nginx 安装**:反向代理服务器,统一管理 HTTPS +- **Certbot 安装**:Let's Encrypt SSL 证书自动申请与续期 +- **防火墙配置**:开放 SSH / HTTP / HTTPS 端口 + +## 设计理念 + +- **幂等性**:每个安装步骤都会先检查是否已安装,避免重复操作 +- **可复用**:既可以独立运行,也可以被其他服务的部署脚本 `source` 调用 +- **国内优化**:Docker 使用阿里云 APT 源安装,镜像拉取使用国内加速 + +## 使用方式 + +### 方式一:独立运行(安装全部基础环境) + +```bash +# 上传到服务器 +scp -r base/ root@<服务器IP>:/opt/base + +# 登录服务器执行 +cd /opt/base +cp .env.example .env +# 编辑 .env 配置 Docker 镜像加速(可选) +bash setup.sh +``` + +### 方式二:被其他服务脚本调用 + +```bash +#!/usr/bin/env bash +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BASE_DIR="$(cd "$SCRIPT_DIR/../base" && pwd)" +source "$BASE_DIR/setup.sh" + +# 现在可以使用 base 提供的所有函数 +check_root +init_system +install_docker +install_nginx +# ... +``` + +## 提供的函数 + +| 函数 | 说明 | +|------|------| +| `check_root` | 检查是否 root 用户 | +| `init_system` | 系统初始化,安装基础工具 | +| `install_docker` | 安装 Docker + Compose V2 | +| `configure_docker_mirrors` | 配置 Docker 镜像加速 | +| `install_nginx` | 安装配置 Nginx | +| `install_certbot` | 安装 Certbot | +| `setup_firewall_base` | 开放 22/80/443 端口 | +| `firewall_allow_port [desc]` | 开放额外端口 | +| `setup_ssl_cert [name]` | 申请 SSL 证书 | +| `deploy_nginx_conf