#backup #ssh #server #easy-to-use

bin+lib bacup

为服务器设计的一款易于使用的备份工具

13 个版本

0.1.13 2024年3月17日
0.1.10 2022年5月1日
0.1.7 2022年2月6日
0.1.5 2021年12月3日
0.1.4 2021年7月3日

#189命令行工具 中排名

Download history 13/week @ 2024-03-29 5/week @ 2024-04-05 1/week @ 2024-06-07 3/week @ 2024-06-28 63/week @ 2024-07-05

每月 66 次下载

Apache-2.0

115KB
2.5K SLoC

bacup

为服务器设计的一款易于使用的备份工具 - 使用 Rust 编写。


bacup 服务作为守护进程运行并执行远程上的 服务 备份。

bacup 的目标是使配置简单明了:一个文件,其中以非常简单的方式定义一切。

配置

3 步配置。

  1. 配置 远程。远程是一个云服务提供商、SSH 主机或 Git 服务器。
  2. 配置 服务。服务是一个知名软件(例如 PostgreSQL)及其自己的备份工具,或者是一个文件系统上的位置。
  3. 将服务(要备份什么)映射到远程(在哪里备份)。配置 备份

在配置备份时,when 字段接受以下格式的配置字符串

  • "daily $hh:$mm 例如 daily 15:30
  • weekly $day $hh:$mm 例如 weekly mon 12:23weekly monday 12:23。可以省略 weekly
  • monthly $day $hh:$mm 例如 monthly 1 00:30
  • cron。如果您确实需要使用它,请使用 crontab guru 来创建 cron 字符串。

注意:时间始终在 UTC 时区。

# remotes definitions
[aws]
    [aws.bucket_name]
    region = ""# "eu-west-3"
    access_key = ""
    secret_key = ""

# Not available yet!
#[gcloud]
#    [gcloud.bucket1]
#    service_account_path = ""

[ssh]
    [ssh.remote_host1]
    host = "" # example.com
    port = "" # 22
    username = "" # myname
    private_key = "" # ~/.ssh/id_rsa

[localhost]
    # Like copy-paste in local. The underlying infrastructure manages
    # the remote (if any) part. Below 2 examples
    [localhost.samba]
    path = "" # local path where samba is mounted

    [localhost.disk2]
    path = "" # local path where the second disk of the machine is mounted

[git]
    [git.remote_repo]
    host = "" #github.com
    port = "" #22
    username = "" #git
    private_key = "" # ~/.ssh/id_rsa
    repository = "" # "galeone/bacup"
    branch = "" # master

# what to backup. Service definition
[postgres]
    [postgres.service1]
    username = ""
    db_name = ""
    host = ""
    port = ""

[folders]
    [folders.service1]
    pattern = ""

[docker]
    [docker.service]
    container_name = "docker_postgres_1"
    command = "pg_dumpall -c -U postgres" # dump to stdout always

# mapping services to remote
[backup]
    # Compress the DB dump and upload it to aws
    # everyday at 01:00 UTC
    [backup.service1_db_compress]
    what = "postgres.service1"
    where = "aws.bucket_name"
    when = "daily 01:00"
    remote_path = "/service1/database/"
    compress = true
    keep_last = 7

    # Dump the DB and upload it to aws (no compression)
    # every first day of the month
    [backup.service1_db]
    what = "postgres.service1"
    where = "aws.bucket_name"
    when = "monthly 1 00:00"
    remote_path = "/service1/database/"
    compress = false

    # Archive the files of service 1 and upload them to
    # the ssh.remote_host1 in the remote ~/backups/service1 folder.
    # Every friday at 5:00
    [backup.service1_source_compress]
    what = "folders.service1"
    where = "ssh.remote_host1"
    when = "weekly friday 05:00"
    remote_path = "~/backups/service1"
    compress = true

    # Incrementally sync folders.service1 with the remote host
    # using rsync (authenticated trough ssh)
    # At 00:05 in August
    [backup.service1_source]
    what = "folders.service1"
    where = "ssh.remote_host1"
    when = "5 0 * 8 *"
    remote_path = "~/backups/service1_incremental/"
    compress = false # no compression = incremental sync

    # Compress the DB dump and copy it to the localhost "remote"
    # where, for example, samba is mounted
    # everyday at 01:00 UTC
    [backup.service1_db_on_samba]
    what = "postgres.service1"
    where = "localhost.samba"
    when = "daily 01:00"
    remote_path = "/path/inside/the/samba/location"
    compress = false

    [backup.service1_source_git]
    what = "folders.service1"
    where = "git.github"
    when = "daily 15:30"
    remote_path = "/" # the root of the repo
    compress = false

compression = true 时,文件/文件夹将使用 Gzip 进行压缩,并将文件存档(在所需的远程位置),格式为

YYYY-MM-DD-hh:mm-filename.gz # or .tar.gz if filename is an archive

安装 & 服务设置

cargo install bacup

然后,将 config.toml 文件放入 $HOME/.bacup/config.toml

有一个现成的 systemd 服务文件

sudo cp misc/systemd/[email protected] /usr/lib/systemd/system/

然后,可以通过通常的systemd方式启用/启动服务

sudo systemctl start bacup@$USER.service
sudo systemctl enable bacup@$USER.service

远程配置

配置远程很简单。每个远程都有不同的获取访问代码的方式,这里我们尝试分享一些有用的参考资料。

AWS

  • 访问密钥 & 密钥:[理解并获得您的AWS凭证:程序访问](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys)
  • 区域:区域是您的存储桶所在的区域。
  • 端点:(可选)客户端要使用的端点,即另一个兼容s3的服务。
  • force_path_style:(可选)强制此客户端为存储桶使用路径风格寻址,对于某些兼容s3的网关是必要的。

SSH

您需要在远程上有一个有效的ssh账户 - 只支持通过SSH密钥(无密码)进行认证。

对于增量备份,使用 rsync - 您需要在本地和远程上安装此工具。

Git

您需要在Git服务器上有一个有效的账户,以及一个仓库。仅支持SSH。

本地主机

虽然不是真正的远程,但您可以使用 bacup 从一个路径备份到另一个(带/不带压缩)。如果本地主机远程挂载在网络文件系统上,那就更好了 :)

依赖项

~34-47MB
~725K SLoC