|
1 | 1 | # Vaultwarden 备份工具 |
2 | 2 |
|
3 | | -这是一个用于自动备份 Vaultwarden 数据的工具。它能够备份数据库、配置文件、RSA 密钥、附件和发送文件等重要数据,并将其打包成加密的压缩文件。 |
| 3 | +这是一个用 Go 语言编写的、用于自动备份 [Vaultwarden](https://github.com/dani-garcia/vaultwarden) 数据的工具。它被设计为在 Docker 容器中运行,能够备份数据库、配置文件、RSA 密钥、附件和发送文件等重要数据,并将其打包成加密的压缩文件。 |
4 | 4 |
|
5 | 5 | ## 功能特点 |
6 | 6 |
|
7 | | -- 自动备份 Vaultwarden 的所有重要数据: |
8 | | - - SQLite 数据库 |
9 | | - - 配置文件(config.json 和 .env) |
10 | | - - RSA 密钥 |
11 | | - - 附件文件 |
12 | | - - 发送文件 |
13 | | -- 使用 AES-256-CBC 加密备份文件 |
14 | | -- 自动生成随机密码 |
15 | | -- 支持 Docker 部署 |
16 | | -- 支持定时备份(默认每 6 小时执行一次) |
| 7 | +- **全量备份**: 自动备份 Vaultwarden 的所有重要数据: |
| 8 | + - SQLite 数据库 (`db.sqlite3`) |
| 9 | + - 配置文件 (`config.json` 和 `.env`) |
| 10 | + - RSA 密钥 (`rsa_key.pem`, `rsa_key.pub.pem`) |
| 11 | + - 附件目录 (`attachments`) |
| 12 | + - 发送文件目录 (`sends`) |
| 13 | +- **安全加密**: 使用 **AES-256-GCM** 算法加密备份文件,这是一种经过身份验证的加密模式,可提供强大的安全保障。 |
| 14 | +- **容器化部署**: 通过 Docker 镜像提供,易于部署和管理。 |
| 15 | +- **定时任务**: 内置 `cron` 定时任务,默认为每 6 小时执行一次备份。 |
| 16 | +- **自动清理**: 支持设置备份保留天数,自动清理过期的备份文件。 |
| 17 | +- **并发执行**: 支持并发执行备份任务,提升备份效率。 |
17 | 18 |
|
18 | 19 | ## 使用方法 |
19 | 20 |
|
20 | 21 | ### Docker 部署 |
21 | 22 |
|
22 | | -1. 拉取镜像: |
| 23 | +1. **拉取镜像**: |
| 24 | + 从 Github Packages 拉取最新的 Docker 镜像。 |
23 | 25 |
|
24 | | -```bash |
25 | | -docker pull ghcr.io/xg4/vaultwarden-backup |
26 | | -``` |
| 26 | + ```bash |
| 27 | + docker pull ghcr.io/xg4/vaultwarden-backup:latest |
| 28 | + ``` |
27 | 29 |
|
28 | | -2. 运行容器: |
| 30 | +2. **运行容器**: |
| 31 | + 创建并运行 `vaultwarden-backup` 容器。请确保将 `/path/to/vaultwarden/data` 替换为你实际的 Vaultwarden 数据目录路径,并将 `/path/to/backups` 替换为你希望存放备份文件的目录。 |
29 | 32 |
|
30 | | -```bash |
31 | | -docker run -d \ |
32 | | - --name vaultwarden-backup \ |
33 | | - -v /path/to/vaultwarden/data:/data \ |
34 | | - -v /path/to/backup:/backups \ |
35 | | - -e ZIP_PASSWORD=your-password \ |
36 | | - -e RETENTION_DAYS=1 \ |
37 | | - --restart unless-stopped \ |
38 | | - ghcr.io/xg4/vaultwarden-backup |
39 | | -``` |
| 33 | + ```bash |
| 34 | + docker run -d \ |
| 35 | + --name vaultwarden-backup \ |
| 36 | + -v /path/to/vaultwarden/data:/data \ |
| 37 | + -v /path/to/backups:/backups \ |
| 38 | + -e ZIP_PASSWORD="your-strong-password" \ |
| 39 | + -e RETENTION_DAYS=30 \ |
| 40 | + --restart unless-stopped \ |
| 41 | + ghcr.io/xg4/vaultwarden-backup:latest |
| 42 | + ``` |
40 | 43 |
|
41 | 44 | ### 环境变量 |
42 | 45 |
|
43 | | -- `DATA_DIR`: Vaultwarden 数据目录路径(默认:`/data`) |
44 | | -- `BACKUP_DIR`: 备份文件存储路径(默认:`/backups/backup`) |
45 | | -- `ZIP_PASSWORD`: 备份文件加密密码(**必需**)。脚本在执行前会检查此环境变量是否设置,如果未设置则会报错并退出。 |
46 | | -- `RETENTION_DAYS`: 备份文件保留天数(默认:`30`)。脚本会清理超过此天数的旧备份文件。设置为 `0` 则不清理。 |
| 46 | +通过配置环境变量来自定义备份行为: |
47 | 47 |
|
48 | | -### 手动执行备份 |
| 48 | +- `DATA_DIR`: Vaultwarden 数据目录在容器内的路径 (默认: `/data`) |
| 49 | +- `BACKUP_DIR`: 备份文件的存储路径 (默认: `/backups`) |
| 50 | +- `ZIP_PASSWORD`: **(必需)** 用于加密备份文件的密码。**请务必设置一个强密码**。如果未设置,程序将报错并退出。 |
| 51 | +- `RETENTION_DAYS`: 备份文件保留天数 (默认: `30`)。脚本会清理超过此天数的旧备份文件。设置为 `0` 则禁用自动清理。 |
| 52 | +- `MAX_CONCURRENCY`: 执行备份任务时的最大并发数 (默认: `4`) |
49 | 53 |
|
50 | | -```bash |
51 | | -./backup.sh |
52 | | -``` |
| 54 | +## 手动执行 |
| 55 | + |
| 56 | +除了自动定时备份,你也可以手动在容器内执行备份或恢复命令。 |
53 | 57 |
|
54 | | -## 备份文件说明 |
| 58 | +### 手动备份 |
55 | 59 |
|
56 | | -备份文件将以 `backup_YYYYMMDD_HHMMSS.tar.gz` 的格式命名,并使用您在 `ZIP_PASSWORD` 环境变量中设置的密码通过 AES-256-CBC 加密。 |
| 60 | +```bash |
| 61 | +docker exec vaultwarden-backup vault-backup |
| 62 | +``` |
57 | 63 |
|
58 | | -### 还原备份 |
| 64 | +### 手动恢复 |
59 | 65 |
|
60 | | -您可以使用以下命令来还原备份文件: |
| 66 | +项目提供了 `restore` 命令用于解密并解压备份文件。 |
61 | 67 |
|
62 | 68 | ```bash |
63 | | -openssl enc -d -aes-256-cbc -salt -pbkdf2 -pass pass:your-password -in backup_YYYYMMDD_HHMMSS.tar.gz | tar xz -C . |
| 69 | +# 示例:将备份文件恢复到 /tmp/restore_test 目录 |
| 70 | +docker exec vaultwarden-backup restore \ |
| 71 | + /backups/backup_20250627_120000.tar.gz \ |
| 72 | + /tmp/restore_test \ |
| 73 | + your-strong-password |
64 | 74 | ``` |
65 | 75 |
|
66 | | -**注意:** |
| 76 | +## 备份文件 |
67 | 77 |
|
68 | | -- 将 `backup_YYYYMMDD_HHMMSS.tar.gz` 替换为您的实际备份文件名。 |
69 | | -- 将 `your-password` 替换为您的备份加密密码。 |
70 | | -- `-C .` 表示将文件解压到当前目录,您可以根据需要修改目标目录。 |
| 78 | +- 备份文件以 `backup_YYYYMMDD_HHMMSS.tar.gz` 的格式命名。 |
| 79 | +- 文件使用 `ZIP_PASSWORD` 环境变量中设置的密码通过 **AES-256-GCM** 加密。 |
71 | 80 |
|
72 | 81 | ## 依赖 |
73 | 82 |
|
74 | | -- sqlite3 |
75 | | -- tar |
76 | | -- openssl |
77 | | -- bash |
| 83 | +本工具在 Docker 容器中运行,运行时仅依赖于 `sqlite`,无需其他外部工具。 |
78 | 84 |
|
79 | 85 | ## 许可证 |
80 | 86 |
|
|
0 commit comments