zuke の使い方を簡単な例を通じて説明するためのドキュメント
- ローカルに minio (S3 互換のオブジェクトストレージ) を立てて、そこにバックアップを取ります
- バックアップ対象のデータは、mock として生成します
- zuke 本体は、GitHub Pages に deploy されているものを使います
- Host Machine の Requirements として、以下が必要です
- Docker and Docker Compose
- jq
- awscli (
aws
コマンド)
- また、Linux (Ubuntu) での動作確認しかしていません (恐らく macOS でも動くと思います)
./compose.minio.yml を使って、ローカルに minio を立てます
docker compose -f compose.minio.yml up -d
これで、http://localhost:9000
にアクセスすると、minio の Web UI が表示されます
Username と Password は、上の compose file に設定されており、Default は、
- Username:
zuke-admin-user
- Password:
zuke-admin-password
です。Create Bucket
から、Bucket を作っていきましょう。
適当な Bucket 名 (この例では zuke-test-bucket
) をつけ、作成します。
次に、アクセスキーを生成します。左側のバーから、Access Keys
を選択し、Create Access Key
ボタンで、生成します。
生成された Access Key
と Secret Key
は、後ほど使うため、メモしてください。(もしくは、json file として download する。)
バックアップ対象のデータ の mock を生成します。./tests/generate_test_data.sh を使います。
この script は、./tests/test_data
以下に dd
を使って適当な mock file を生成します。
# dbcls/backup-system の GitHub repo. を clone してくる
$ ls
aws_env.md Dockerfile policy_config.md tests
backup_policy.md Dockerfile-dev quickstart.md tsconfig.json
compose.dev.yml LICENSE README.md tsconfig.node.json
compose.minio.yml package.json release.sh vite.config.ts
compose.yml package-lock.json src
$ cd tests
$ bash ./generate_test_data.sh
Created directory: /home/suecharo/sandbox/backup-system/tests/test_data/var
Created directory: /home/suecharo/sandbox/backup-system/tests/test_data/var/data
Created directory: /home/suecharo/sandbox/backup-system/tests/test_data/var/data/config
...
$ tree ./test_data
./test_data
└── var
├── data
│ ├── config
│ │ ├── config1.json
│ │ ├── config2.json
│ │ └── config3.json
...
https://dbcls.github.io/backup-system/ に zuke が deploy されているため、それを使います。
基本的に、上から順に実行します。
まず、zuke - 1. File List の読み込み
として、get_file_list.sh
を、先程の test_data
dir 近くに download し、実行します。
$ curl -O https://dbcls.github.io/backup-system/get_file_list.sh
$ ls
generate_test_data.sh get_file_list.sh README.md test_data
$ bash ./get_file_list.sh ./test_data > file_list.jsonl
$ head file_list.jsonl
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data", "size": 154003, "type": "directory"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var", "size": 149907, "type": "directory"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data", "size": 129427, "type": "directory"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/database.db", "size": 4096, "type": "file"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/logs", "size": 48128, "type": "directory"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/logs/logfile2.log", "size": 1024, "type": "file"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/logs/logfile3.log", "size": 1024, "type": "file"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/logs/logfile4.log", "size": 1024, "type": "file"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/logs/logfile5.log", "size": 1024, "type": "file"}
{"path": "/home/suecharo/sandbox/backup-system/tests/test_data/var/data/logs/logfile7.log", "size": 1024, "type": "file"}
生成された、file_list.jsonl
を zuke に読み込ませます。
次に、zuke - 2. Backup Policy の設定
として、適当な policy を設定します。
最後に、zuke - 3. Server での設定
として、最初に立てた minio の bucket の情報を入力し、script がまとまった zip file を download します。
zip file の中にある、backup.sh
を実行します。
$ ls | grep zuke
zuke-scripts-240819-125849.zip
$ unzip zuke-scripts-240819-125849.zip
Archive: zuke-scripts-240819-125849.zip
extracting: backup.sh
extracting: backup_files.json
extracting: policy_configs.json
extracting: s3_config.json
$ cd zuke-scripts-240819-125849
$ ls ./
backup.sh policy_configs.json
backup_files.json s3_config.json
$ bash ./backup.sh --policy daily
$ bash ./backup.sh --policy daily
[2024-08-19 13:03:34] Start daily backup
upload: sandbox/backup-system/tests/test_data/var/data/config/config1.json to s3://zuke-test-bucket/home/suecharo/sandbox/backup-system/tests/test_data/var/data/config/config1.json
upload: sandbox/backup-system/tests/test_data/var/data/config/config2.json to s3://zuke-test-bucket/home/suecharo/sandbox/backup-system/tests/test_data/var/data/config/config2.json
upload: sandbox/backup-system/tests/test_data/var/data/config/config3.json to s3://zuke-test-bucket/home/suecharo/sandbox/backup-system/tests/test_data/var/data/config/config3.json
...
minio の console に戻り、bucket の中身を確認すると、directory 構造を保ったまま、daily として設定した file 群が backup されています。
なので、bash ./backup.sh --policy <daily|weekly|monthly>
などの command を crontab などに適切に設定し、実行する。