{"id":15191895,"url":"https://github.com/riotkit-org/br-backup-maker","last_synced_at":"2025-10-02T06:32:30.690Z","repository":{"id":38356160,"uuid":"449444535","full_name":"riotkit-org/br-backup-maker","owner":"riotkit-org","description":"Lightweight, single-binary Backup Repository client. Part of E2E Backup Architecture designed by RiotKit","archived":true,"fork":false,"pushed_at":"2024-05-10T19:42:53.000Z","size":607,"stargazers_count":1,"open_issues_count":17,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-13T02:37:25.063Z","etag":null,"topics":["anarchism","backup","backup-maker","backup-repository","backups","cloud-native","devops","go","golang","k8s","k8s-backup","kubernetes","kubernetes-native","riotkit"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/riotkit-org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-18T20:55:24.000Z","updated_at":"2024-05-10T19:43:06.000Z","dependencies_parsed_at":"2024-09-23T18:30:47.132Z","dependency_job_id":"62b557b5-3e48-42ad-8247-e8f8a295696a","html_url":"https://github.com/riotkit-org/br-backup-maker","commit_stats":{"total_commits":240,"total_committers":4,"mean_commits":60.0,"dds":"0.47916666666666663","last_synced_commit":"749cb59540915a855f4b2c9070024cc308d00f55"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/riotkit-org/br-backup-maker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riotkit-org%2Fbr-backup-maker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riotkit-org%2Fbr-backup-maker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riotkit-org%2Fbr-backup-maker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riotkit-org%2Fbr-backup-maker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/riotkit-org","download_url":"https://codeload.github.com/riotkit-org/br-backup-maker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riotkit-org%2Fbr-backup-maker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277968828,"owners_count":25907418,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-02T02:00:08.890Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anarchism","backup","backup-maker","backup-repository","backups","cloud-native","devops","go","golang","k8s","k8s-backup","kubernetes","kubernetes-native","riotkit"],"created_at":"2024-09-27T21:02:31.142Z","updated_at":"2025-10-02T06:32:30.368Z","avatar_url":"https://github.com/riotkit-org.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Backup Maker\n============\n\n\u003e NOTICE: Sadly, we no longer have power to maintain Backup Repository ecosystem as it grew up pretty big and we are not a full-time employeed development team. Feel free to maintain a fork.\n\n[![Test](https://github.com/riotkit-org/br-backup-maker/actions/workflows/test.yaml/badge.svg?branch=main)](https://github.com/riotkit-org/br-backup-maker/actions/workflows/test.yaml)\n\nTiny backup client packed in a single binary. Interacts with a `Backup Repository` server to store files, uses GPG to secure your\nbackups even against the server administrator.\n\n**Features:**\n- Captures output from user-defined Backup/Restore commands\n- Automated, optional GPG support enables easy to use E2E encryption\n- Buffered upload of backup made on-the-fly requires no additional disk space to create backup\n- Small, single binary, can be injected into container or distributed as a lightweight container\n\n**Notice:** You need to have backup of your encryption private key. **Lost encryption key means your backups are unreadable!**\n\n# Usage\n\n## Getting backup-maker\n\nTake a look at releases tab and pick a version suitable for your platform. We support Unix-like platforms, there is no support for Windows.\n\nYou can use [eget](https://github.com/zyedidia/eget) as a 'package manager' to install `backup-maker`\n\n```bash\n# for pre-release\neget --pre-release riotkit-org/br-backup-maker --to /usr/local/bin/backup-maker\n\n# for latest stable release\neget riotkit-org/br-backup-maker --to /usr/local/bin/backup-maker\n```\n\n## Creating backup\n\n```bash\n# most of commandline switches can be replaced with environment variables, check the table in other section of documentation\nexport BM_AUTH_TOKEN=\"some-token\"; \\\nexport BM_COLLECTION_ID=\"111-222-333-444\"; \\\nexport BM_PASSPHRASE=\"riotkit\"; \\\nbackup-maker make --url https://example.org \\\n    -c \"tar -zcvf - ./\" \\\n    --key build/test/backup.key \\\n    --log-level info\n```\n\n## Restoring a backup\n\n```bash\n# commandline switches could be there also replaced with environment variables\nbackup-maker restore --url $$(cat .build/test/domain.txt) \\\n    -i $$(cat .build/test/collection-id.txt) \\\n    -t $$(cat .build/test/auth-token.txt) \\\n    -c \"cat - \u003e /tmp/test\" \\\n    --private-key .build/test/backup.key \\\n    --passphrase riotkit \\\n    --log-level debug\n```\n\n## Backup - How it works?\n\nThis list of steps includes only steps that are done inside `Backup Maker`, to understand whole flow\nplease take a look at `Backup Controller` documentation.\n\n**Note: GPG steps are optional**\n\n1. `gpg` keys are loaded\n2. Command specified in `--cmd` or in `-c` is executed\n3. Result of the command, it's stdout is transferred to the `gpg` process\n4. From `gpg` process the encoded data is buffered directly to the server\n5. Feedback is returned\n\n## Restore - How it works?\n\nIt is very similar as in backup operation.\n\n1. `gpg` keys are loaded\n2. Command specified in `--cmd` or in `-c` is executed\n3. `gpg` process is started\n4. Backup download is starting\n5. Backup is transmitted on the fly from server to `gpg` -\u003e our shell command\n6. Our shell `--cmd` / `-c` command is taking stdin and performing a restore action\n7. Feedback is returned\n\n## Automated procedures\n\nOur suggested approach is to maintain a community-driven repository of automation scripts templates\ntogether with a tool that generates Backup \u0026 Restore procedures. Those procedures could be easily understood and be customized by the user.\n\n### [Documentation for 'bmg' (Backup Maker procedure Generator)](./generate/README.md)\n\n## Hints\n\n- Skip `--private-key` and `--passphrase` to disable GPG\n- Use `debug` log level to see GPG output and more verbose output at all\n- Increase encryption/decryption performance by disabling armoring\n\n\n## Proposed usage\n\n### Scenario 1: Standalone binary running from crontab\n\nJust schedule a cronjob that would trigger `backup-maker make` with proper switches. Create a helper script to easily restore backup as a part\nof a disaster recovery plan.\n\n### Scenario 2: Dockerized applications, keep it inside application container\n\nPack `backup-maker` into docker image and trigger backups from internal or external crontab, jobber or other scheduler.\n\n### Scenario 3: Kubernetes usage with plain `kind: Crojob` resources\n\nUse [bmg](./generate/README.md) to generate Kubernetes resources that could be applied to cluster with `kubectl` or added to repository and applied by [FluxCD](https://fluxcd.io/) or [ArgoCD](https://argo-cd.readthedocs.io/en/stable/).\n\n### Scenario 4: Kubernetes usage with Argo Workflows or Tekton\n\nCreate a definition of an [Argo Workflow](https://argoproj.github.io/argo-workflows/) or [Tekton Pipeline](https://tekton.dev/) that will spawn a Kubernetes job with defined token, collection id, command, GPG key.\n\n### Scenario 5: Kubernetes usage with a dedicated controller - Backup Maker Controller **(RECOMMENDED FOR KUBERNETES)**\n\n[Use CRD's to configure Backup \u0026 Restore procedures in your cluster](https://github.com/riotkit-org/backup-maker-controller#how-it-works). Store CRD's in a git repository and use [ArgoCD](https://argo-cd.readthedocs.io/en/stable/) or [FluxCD](https://fluxcd.io/) for synchronization.\n\nEnvironment variables\n---------------------\n\nEnvironment variables are optional, if present will cover values of appropriate commandline switches.\n\n| Type    | Name                | Description                                                                               |\n|---------|---------------------|-------------------------------------------------------------------------------------------|\n| path    | BM_PUBLIC_KEY_PATH  | Path to the public key used for encryption                                                |\n| string  | BM_CMD              | Command used to encrypt or decrypt (depends on context)                                   |\n| string  | BM_PASSPHRASE       | Passphrase for the GPG key                                                                |\n| string  | BM_VERSION          | Version to restore (defaults to \"latest\"), e.g. v1                                        |\n| email   | BM_RECIPIENT        | E-mail address of GPG recipient key                                                       |\n| url     | BM_URL              | Backup Repository URL address e.g. https://example.org                                    |\n| uuidv4  | BM_COLLECTION_ID    | Existing collection ID                                                                    |\n| jwt     | BM_AUTH_TOKEN       | JSON Web Token generated in Backup Repository that allows to write to given collection id |\n| integer | BM_TIMEOUT          | Connection and read timeouts in seconds                                                   |\n| path    | BM_PRIVATE_KEY_PATH | GPG private key used to decrypt backup                                                    |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friotkit-org%2Fbr-backup-maker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Friotkit-org%2Fbr-backup-maker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friotkit-org%2Fbr-backup-maker/lists"}