数据库备份管理工具Velld

简介

什么是 Velld ?

Velld 是一个现代化的自托管数据库备份管理和自动化工具,提供简洁美观的网页界面,帮助用户实现数据库备份的计划、管理和监控,确保数据安全,简化灾难恢复流程。

主要特点

  • 支持多种数据库:包括 PostgreSQL 9.6+MySQL 5.7+ / MariaDB,以及 MongoDB 4.0+
  • 自动化备份:支持基于 cron 表达式的灵活定时任务。
  • 多数据库连接管理:可以统一管理多个不同数据库实例。
  • 备份比较工具:提供备份版本的差异对比和智能 diff 视图。
  • 备份监控与通知:实时备份状态监控,成功率统计,邮件和网页通知。
  • 安全可靠:备份凭据加密存储,支持压缩备份文件,支持 S3 兼容存储。
  • 恢复便捷:备份文件可下载,方便使用标准工具快速恢复数据库。
  • 用户体验友好:现代化 UI,支持暗黑模式和移动响应式设计。
  • 易于部署:可通过 Docker 快速部署,配置简单。

应用场景

  • 企业和个人用户需要定期对重要数据库进行自动化备份,保障数据安全和业务连续性。
  • 多数据库环境下统一管理数据库备份任务,提升运维效率。
  • 数据库开发和测试环境中,快速恢复和备份版本对比的需求
  • 希望通过自托管方式控制和掌控备份数据,避免依赖第三方服务。

Velld 通过其全面的功能和友好的用户界面,非常适合技术团队和个人运维人员进行数据库备份管理和自动化操作,特别是在对数据安全和自动化有较高要求的环境中

安装

在群晖上以 Docker 方式安装。

分为后端 API

和前端 Web 两个镜像

env.txt

env.txt 是环境变量设置文件,基于官方的 https://github.com/dendianugerah/velld/blob/main/.env.example 修改,为方便编辑,重命名为了 env.txt

下面是老苏的修改后的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Client
NEXT_PUBLIC_API_URL=http://192.168.0.197:8544

# Server
JWT_SECRET=352d70a69f8b99d91ce2658361abff57c74eba83685b772e1d11c15029e2c50e
ENCRYPTION_KEY=1dbe2bf1de238a137c1030f14eb1ff5736ecf02ee93d3040681b1e10f0d78f91

# Database (optional - defaults to /app/data/velld.db)
# DB_PATH=/app/data/velld.db

# Auth Credentials
ADMIN_USERNAME_CREDENTIAL=laosu
ADMIN_PASSWORD_CREDENTIAL=admin123
ALLOW_REGISTER=true // true or false

# Email Notifications (optional - configure via UI or environment variables)
# When set via env vars, these fields become read-only in the UI
# SMTP_HOST=smtp.gmail.com
# SMTP_PORT=587
# SMTP_USER=your-email@gmail.com
# SMTP_PASSWORD=your-app-password
# SMTP_FROM=noreply@yourdomain.com

下表是环境变量的简单说明,其中 192.168.0.197 为群晖主机的 IP

环境变量 描述
NEXT_PUBLIC_API_URL 服务端 APIURL,用于前端与服务端通信。
JWT_SECRET 用于 JWT 认证的密钥。
ENCRYPTION_KEY 数据加密所使用的密钥。
DB_PATH 数据库文件的路径(可选)。
ADMIN_USERNAME_CREDENTIAL 管理员用户名凭证。
ADMIN_PASSWORD_CREDENTIAL 管理员密码凭证。
ALLOW_REGISTER 是否允许用户注册(truefalse)。
SMTP_HOST SMTP 服务器主机名(可选,通过 UI 或环境变量配置)。
SMTP_PORT SMTP 服务器端口(可选,通过 UI 或环境变量配置)。
SMTP_USER SMTP 用户名(可选,通过 UI 或环境变量配置)。
SMTP_PASSWORD SMTP 密码(可选,通过 UI 或环境变量配置)。
SMTP_FROM 发件人邮箱地址(可选,通过 UI 或环境变量配置)。

docker-compose.yml

采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
services:
api:
image: ghcr.io/dendianugerah/velld/api:latest
container_name: velld-api
ports:
- "8544:8080"
env_file:
- env.txt
volumes:
- ./api_data:/app/data
- ./backup_data:/app/backups
restart: unless-stopped

web:
image: ghcr.io/dendianugerah/velld/web:latest
container_name: velld-web
ports:
- "8543:3000"
environment:
NEXT_PUBLIC_API_URL: ${NEXT_PUBLIC_API_URL}
ALLOW_REGISTER: ${ALLOW_REGISTER}
depends_on:
- api
restart: unless-stopped

然后通过 SSH 登录到您的群晖,执行下面的命令:

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 velld 和 子目录
mkdir -p /volume1/docker/velld/{api_data,backup_data}

# 进入 velld 目录
cd /volume1/docker/velld

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose --env-file env.txt up -d

运行

在浏览器中输入 http://群晖IP:8543 就能看到登录界面

使用 ADMIN_USERNAME_CREDENTIALADMIN_PASSWORD_CREDENTIAL 设置的值进行登录

登录成功后的主界面

进入 Connections –> New Connection

以下是老苏做的一些尝试,有失败也有成功,说明软件还有待进一步成熟

MariaDB 10(失败)

以本机的 MariaDB 为例

使用 Manual Input 方式

没有测试功能,直接保存即可,但可以看得到中间其实是做了测试的,否则会保存失败

运行 Nackup Now 备份会报错保存

1
2
3
Error

{"message":"backup failed for mysql database 'werss' on 192.168.0.197:3307 - /usr/bin/mysqldump: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb-dump' instead\nmysqldump: Got error: 2026: \"TLS/SSL error: SSL is required, but the server does not support it\" when trying to connect\n"}

错误原因:

  1. mysqldump 命令被废弃,需要改用 mariadb-dump
  2. 连接 MariaDB 数据库时出现 TLS/SSL 错误:服务器要求 SSL,但服务器不支持。

查了一下,可能需要在命令中添加参数 --ssl=0 或 --skip_ssl,跳过 SSL 连接要求,这样才不会出现 SSL 错误。

所以老苏尝试用了 Connection String,尝试增加了不使用 SSL 的参数 mysql://werss:123456@192.168.0.197:3307/werss?useSSL=false

但是看起来还是不行

MySQL 8(失败)

接下来尝试了另一个项目的 MySQL 8 数据库,这是 docker 安装的

同样连接是没问题的

但是备份就报错了,看起来错误的原因差不多

1
2
3
Error

{"message":"backup failed for mysql database 'clf' on 192.168.0.197:13306 - /usr/bin/mysqldump: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb-dump' instead\nmysqldump: Got error: 2026: \"TLS/SSL error: self-signed certificate in certificate chain\" when trying to connect\n"}

PostgreSQL

正好机器中的 bewCloudPostgreSQL 15 还没有删,为了能连接,把数据库的端口映射了出来

连接同样没问题

这次备份没有再出错

可以在 Histroy 中查到

所以可以用来做定时备份设置

采用图形化设置,还是很简单的

参考文档

dendianugerah/velld: a database backup management and automation tool
地址:https://github.com/dendianugerah/velld

Velld - Database Backup Management Tool
地址:https://velld.vercel.app/