{"id":30746271,"url":"https://github.com/lminlone/repliqate","last_synced_at":"2025-09-04T04:04:27.645Z","repository":{"id":311779776,"uuid":"1044264641","full_name":"lminlone/repliqate","owner":"lminlone","description":"A modular Docker container backup solution","archived":false,"fork":false,"pushed_at":"2025-09-04T01:10:05.000Z","size":37912,"stargazers_count":75,"open_issues_count":8,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-04T03:12:49.330Z","etag":null,"topics":["backup","devops","docker","foss","restic"],"latest_commit_sha":null,"homepage":"","language":"C#","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/lminlone.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,"zenodo":null}},"created_at":"2025-08-25T12:29:17.000Z","updated_at":"2025-09-04T01:16:52.000Z","dependencies_parsed_at":"2025-08-26T19:36:46.763Z","dependency_job_id":null,"html_url":"https://github.com/lminlone/repliqate","commit_stats":null,"previous_names":["lminlone/repliqate"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lminlone/repliqate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lminlone%2Frepliqate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lminlone%2Frepliqate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lminlone%2Frepliqate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lminlone%2Frepliqate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lminlone","download_url":"https://codeload.github.com/lminlone/repliqate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lminlone%2Frepliqate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273549251,"owners_count":25125257,"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-09-04T02:00:08.968Z","response_time":61,"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":["backup","devops","docker","foss","restic"],"created_at":"2025-09-04T04:01:48.870Z","updated_at":"2025-09-04T04:04:27.611Z","avatar_url":"https://github.com/lminlone.png","language":"C#","funding_links":[],"categories":["docker"],"sub_categories":[],"readme":"﻿\u003cp align=\"center\"\u003e\n    \u003cimg src=\"Docs/heading.png\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/lminlone/repliqate\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/v/release/lminlone/repliqate?include_prereleases\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://hub.docker.com/r/lminlone/repliqate\"\u003e\n        \u003cimg src=\"https://img.shields.io/docker/pulls/lminlone/repliqate\"\u003e\n    \u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/docker/image-size/lminlone/repliqate\"\u003e\n\u003c/p\u003e\n\nRepliqate is a modular backup solution designed for Docker environments. It safely handles containerized workloads by stopping and restarting containers during backup operations, ensuring data consistency.\n\nCurrently, Repliqate integrates with Restic as its backup engine, with planned support for additional providers in the future.\n\n# Features\n\n- **Label-based configuration**: Configure backup rules using Docker container **and volume** labels, keeping configuration alongside the resources it protects.\n- **Self-hostable**: Deployable as a Docker container for integration into existing infrastructure.\n- **Container-safe**: Automatically stops and restarts containers around backup operations.\n- **Versioned backups**: Maintains version history of backups with configurable retention policies, allowing recovery from multiple points in time.\n- **Intuitive scheduling**: Simple, human-readable schedule configuration with convenient shortcuts like `@daily 3am` or `@weekly 4am Mon`, while still supporting traditional cron expressions for advanced use cases.\n\n\n# Running Repliqate\n## Prerequisites\n\n- Docker Engine 24.0 or later\n- Access to container runtime socket\n- Storage location for backup data\n\n## shell\n```shell\ndocker run -d \\\n  --name repliqate \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  -v /path/to/backups:/var/repliqate \\\n  -v /var/lib/docker/volumes:/var/lib/docker/volumes \\\n  lminlone/repliqate\n```\n\n## Docker Compose\n```yml\nservices:\n  repliqate:\n    image: lminlone/repliqate\n    container_name: repliqate\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock\n      - /path/to/backups:/var/repliqate\n      - /var/lib/docker/volumes:/var/lib/docker/volumes\n```\n\nOr, if you wish to backup to an NFS:\n```yml\nservices:\n  repliqate:\n    image: lminlone/repliqate\n    container_name: repliqate\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock\n      - backups:/var/repliqate\n      - /var/lib/docker/volumes:/var/lib/docker/volumes\n\nvolumes:\n  backups:\n    driver: local\n    driver_opts:\n      type: nfs\n      o: addr=your-nas-hostname-or-ip,nolock,soft,rw\n      device: :/volume/backups\n```\n\n## Options, Volumes \u0026 Environment Variables\n### Volumes\n- `/var/run/docker.sock`: Required so Repliqate can read labels and control containers.\n- `/app/repliqate`: Storage for metadata and backup files.\n- `/var/lib/docker/volume`: Repliqate needs direct access to the volume data to be able to back it up. It's possible to give individual access to each volume directly to repliqate without exposing all your volumes: eg `/var/lib/docker/volume/my_volume_name:/var/lib/docker/volume/my_volume_name`. You'd need to do this per volume if this is the case. \n\n### Environment Variable(s)\n| Variable           | Description                                                                                                           | Required | Default                |\n|--------------------|-----------------------------------------------------------------------------------------------------------------------|----------|------------------------|\n| `BACKUP_ROOT_PATH` | The directory in which the backups are placed.                                                                        | No       | `/var/repliqate`       |\n| `DOCKER_SOCK_PATH` | The Docker URI. Defaults to `/var/run/docker.sock`. Can contain `tcp://` connections if required but not recommended. | No       | `/var/run/docker.sock` |\n| `TZ`               | Sets the timezone of the container                                                                                    | No       | `UTC`                  |\n\n# Backup Configuration\nRepliqate uses Docker labels for configuration. This keeps backup policies close to the containers and volumes they apply to, eliminating the need for separate configuration files.\n\n## Container Labels\n| Label                    | Description                                                                                                                            | Default  | Example                                              |\n|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------|----------|------------------------------------------------------|\n| `repliqate.enabled`      | Enables backup for the container                                                                                                       | `false`  | `true`                                               |\n| `repliqate.engine`       | Backup engine selection                                                                                                                | `restic` | `restic`                                             |\n| `repliqate.schedule`     | Backup schedule (cron format)                                                                                                          | `none`   | `@daily 3am` (see [Scheduling](#scheduling) section) |\n| `repliqate.backup_id`    | Unique backup identifier for the container.\u003cbr/\u003e\u003cbr/\u003e**NOTE**: Ensure this is fully unique across all containers on the docker server. | `none`   | `prod-db-01`                                         |\n| `repliqate.retention`    | Amount of backups to keep. (Currently WIP)                                                                                             | `10`     | `3`                                                  |\n\n## Volume Labels\n| Label                | Description                                   | Default   |\n|----------------------|-----------------------------------------------|-----------|\n| `repliqate.exclude`  | Exclude this volume from container backups.   | `false`   |\n\n## Examples\nExample 1 (Simple)\n```shell\ndocker run -d \\\n  --label repliqate.enabled=true \\\n  --label repliqate.engine=restic \\\n  --label repliqate.schedule=\"@daily 3am\" \\\n  --label repliqate.backup_id=my_app_01 \\\n  --name my_app \\\n  my_image:latest\n```\n\nExample 2 (A bit more complex)\n```yml\nservices:\n  app:\n    image: my-app:latest\n    volumes:\n      - data:/my-app/data\n      - uploads:/my-app/uploads\n    labels:\n      repliqate.enabled: 'true'\n      repliqate.schedule: \"@daily 10:34\"\n      repliqate.engine: restic\n      repliqate.backup_id: my_app\n\nvolumes:\n  data:\n    labels:\n      repliqate.exclude: 'true' # Exclude from being backed up\n  uploads:\n```\n\n# Scheduling\nRepliqate provides flexible scheduling options using a (half-custom) syntax while maintaining compatibility with \"standard\" cron expressions.\n\n## Shorthand Syntax\n### Frequency Options\n- `@daily \u003ctime\u003e` - Run once per day.\n- `@weekly \u003ctime\u003e \u003cday of the week\u003e` - Run once per week on this specific day.\n- `@monthly \u003ctime\u003e \u003cday of the month\u003e` - Run once per month on this specific date.\n\n### Time Formats\nSupports both 12-hour and 24-hour time formats:\n- 12-hour: `3:00 PM`, `3PM`, `3:00pm`\n- 24-hour: `15:00`\n\n### Examples\n- `@monthly 9am 15`: Run on the 15th of every month at 9am.\n- `@weekly 4am Mon`: Run weekly on Mondays at 4am.\n- `@daily 23:59`: Run every day at 11:59pm.\n\n## Advanced Scheduling\nFor more complex scheduling needs, Repliqate also accepts [Quartz cron expressions](http://www.cronmaker.com)\n\n### Examples\n- `0 0 19 1/1 * ? *`: Run every hour (not recommended) starting at 7pm.\n- `0 0 2 ? * MON-FRI *`: Run every weekday at 2am.\n\n# Roadmap\n- ☐ Support for additional backup engines (e.g., rclone, fully native solution, postgres DB dump, etc).\n- ☐ Modular plugins to allow custom backup engines.\n- ☐ Restoration options.\n- ☐ Frontend UI for advanced configurations and restoration.\n- ☐ Enhanced monitoring and logging options (such as for Grafana Loki or Graylog)\n\n# Contributing\nContributions are welcome. Please open an issue to discuss proposed changes before submitting a pull request.\n\n# License\nRepliqate is licensed under the MIT License. See [LICENSE](License.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flminlone%2Frepliqate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flminlone%2Frepliqate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flminlone%2Frepliqate/lists"}