{"id":23003900,"url":"https://github.com/jkaninda/volume-backup","last_synced_at":"2025-04-02T14:25:24.289Z","repository":{"id":267737510,"uuid":"866044511","full_name":"jkaninda/volume-backup","owner":"jkaninda","description":"Docker volume data backup to local, AWS S3, FTP or SSH remote server storage","archived":false,"fork":false,"pushed_at":"2025-01-20T14:41:23.000Z","size":79,"stargazers_count":0,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-08T05:27:51.140Z","etag":null,"topics":["docker-backup","docker-volume-backup"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jkaninda.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":"2024-10-01T14:53:13.000Z","updated_at":"2024-12-12T05:25:37.000Z","dependencies_parsed_at":"2024-12-12T06:26:17.728Z","dependency_job_id":"9a2c9de1-e426-4c76-88b8-b994f219ccdc","html_url":"https://github.com/jkaninda/volume-backup","commit_stats":null,"previous_names":["jkaninda/volume-backup"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkaninda%2Fvolume-backup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkaninda%2Fvolume-backup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkaninda%2Fvolume-backup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkaninda%2Fvolume-backup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jkaninda","download_url":"https://codeload.github.com/jkaninda/volume-backup/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246830212,"owners_count":20840781,"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","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":["docker-backup","docker-volume-backup"],"created_at":"2024-12-15T07:16:12.064Z","updated_at":"2025-04-02T14:25:24.251Z","avatar_url":"https://github.com/jkaninda.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker Volume data backup\n\nDocker volume data backup to local, AWS S3, FTP or SSH remote server storage\n\n[![Build](https://github.com/jkaninda/volume-backup/actions/workflows/release.yml/badge.svg)](https://github.com/jkaninda/volume-backup/actions/workflows/release.yml)\n![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/jkaninda/volume-backup?style=flat-square)\n![Docker Pulls](https://img.shields.io/docker/pulls/jkaninda/volume-backup?style=flat-square)\n\nMounting paths:\n - /data: volume data\n - /backup: Backup destination for local storage backup\n\n## Storage:\n- Local\n- AWS S3 or any S3 Alternatives for Object Storage\n- FTP remote server\n- SSH remote server\n\n## Quickstart\n\n## Backup\n### Simple backup using Docker CLI\n\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n-v \"./backup:/backup\" \\\n jkaninda/volume-backup backup --cron-expression \"@every 20m\"\n```\n### Recurring backup\n\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n-v \"./backup:/backup\" \\\n jkaninda/volume-backup backup --cron-expression \"@every 15m\"\n```\n#### Backup a single file\n\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n-v \"./backup:/backup\" \\\njkaninda/volume-backup backup --file my-file-inside-container.json\n```\n### Backup using AWS S3 object storage\n\n```env\nAWS_ACCESS_KEY=\nAWS_SECRET_KEY=\nAWS_S3_BUCKET_NAME=\nAWS_S3_ENDPOINT=http://minio:9000\nAWS_DISABLE_SSL=false\nAWS_REGION=eu\nAWS_S3_PATH=/volume-backup\nBACKUP_PREFIX=backup\n```\n```shell\ndocker run --rm  --name volume-backup \\\n--env-file env \\\njkaninda/volume-backup backup --storage s3 --cron-expression \"@midnight\"\n```\n\n### Backup using SSH remote server storage\n\n```env\nSSH_HOST=192.168.1.44\nSSH_USER=toto\nSSH_PASSWORD=password\nSSH_IDENTIFY_FILE=/config/id_ed25519\nSSH_PORT=22\nREMOTE_PATH=/home/toto/backup\nBACKUP_PREFIX=backup\n```\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n--env-file env \\\njkaninda/volume-backup backup --storage ssh --cron-expression \"@midnight\"\n```\n\n### Backup using FTP remote server storage\n\n```env\nFTP_HOST=192.168.1.44\nFTP_USER=toto\nFTP_PASSWORD=password\nFTP_PORT=21\nREMOTE_PATH=/ftp/jonas/toto\nTZ=Europe/Paris\n```\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n--env-file env \\\njkaninda/volume-backup backup --storage ftp --cron-expression \"@midnight\"\n```\n## Restore a backup\n\n### Restore from AWS S3 object storage\n\n```env\nAWS_ACCESS_KEY=\nAWS_SECRET_KEY=\nAWS_S3_BUCKET_NAME=\nAWS_S3_ENDPOINT=http://192.168.1.30:9000\nAWS_DISABLE_SSL=false\nAWS_REGION=eu\nAWS_S3_PATH=/volume-backup\nBACKUP_PREFIX=backup\n```\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n--env-file env \\\njkaninda/volume-backup restore --storage s3 --file backup_20241001_112322.tar.gz\n```\n\n\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n--env-file env \\\njkaninda/volume-backup restore --storage s3 --file backup_20241001_112322.tar\n```\n## Encrypt backup\nTo encrypt and decrypt your backup, you need to set `GPG_PASSPHRASE` environment variable\n\n```shell\ndocker run --rm  --name volume-backup \\\n-v \"data:/data\" \\\n-v \"./backup:/backup\" \\\n-e \"GPG_PASSPHRASE=passphrase\" \\\n jkaninda/volume-backup backup --cron-expression \"@every 20m\"\n```\n\n## Backup notification\n\n### Telegram notification\n\n```env\nTG_TOKEN=Telegram token (`BOT-ID:BOT-TOKEN`)\nTG_CHAT_ID=\n```\n### Email notification\n\n```env\nMAIL_HOST=\nMAIL_PORT=587\nMAIL_USERNAME=\nMAIL_PASSWORD=!\nMAIL_FROM=Backup Jobs \u003cbackup@example.com\u003e\n#Multiple recipients separated by a comma\nMAIL_TO=me@example.com,team@example.com,manager@example.com\nMAIL_SKIP_TLS=false\n# Backup time format for notification \nTIME_FORMAT=2006-01-02 at 15:04:05\n#Backup reference, in case you want to identify every backup instance\nBACKUP_REFERENCE=docker/Paris cluster\n```\n\n\n---\n## Run in Scheduled mode\n\nThis image can be run as CronJob in Kubernetes for a regular backup which makes deployment on Kubernetes easy as Kubernetes has CronJob resources.\nFor Docker, you need to run it in scheduled mode by adding `--cron-expression  \"* * * * *\"` flag or by defining `BACKUP_CRON_EXPRESSION=0 1 * * *` environment variable.\n\n## Syntax of crontab (field description)\n\nThe syntax is:\n\n- 1: Minute (0-59)\n- 2: Hours (0-23)\n- 3: Day (0-31)\n- 4: Month (0-12 [12 == December])\n- 5: Day of the week(0-7 [7 or 0 == sunday])\n\nEasy to remember format:\n\n```conf\n* * * * * command to be executed\n```\n\n```conf\n- - - - -\n| | | | |\n| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)\n| | | ------- Month (1 - 12)\n| | --------- Day of month (1 - 31)\n| ----------- Hour (0 - 23)\n------------- Minute (0 - 59)\n```\n\n\u003e At every 30th minute\n\n```conf\n*/30 * * * *\n```\n\u003e “At minute 0.” every hour\n```conf\n0 * * * *\n```\n\n\u003e “At 01:00.” every day\n\n```conf\n0 1 * * *\n```\n## Predefined schedules\nYou may use one of several pre-defined schedules in place of a cron expression.\n\n| Entry                  | Description                                | Equivalent To |\n|------------------------|--------------------------------------------|---------------|\n| @yearly (or @annually) | Run once a year, midnight, Jan. 1st        | 0 0 1 1 *     |\n| @monthly               | Run once a month, midnight, first of month | 0 0 1 * *     |\n| @weekly                | Run once a week, midnight between Sat/Sun  | 0 0 * * 0     |\n| @daily (or @midnight)  | Run once a day, midnight                   | 0 0 * * *     |\n| @hourly                | Run once an hour, beginning of hour        | 0 * * * *     |\n\n### Intervals\nYou may also schedule backup task at fixed intervals, starting at the time it's added or cron is run. This is supported by formatting the cron spec like this:\n\n@every \u003cduration\u003e\nwhere \"duration\" is a string accepted by time.\n\nFor example, \"@every 1h30m10s\" would indicate a schedule that activates after 1 hour, 30 minutes, 10 seconds, and then every interval after that.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkaninda%2Fvolume-backup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjkaninda%2Fvolume-backup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkaninda%2Fvolume-backup/lists"}