{"id":15439117,"url":"https://github.com/alecbcs/fly-restic","last_synced_at":"2026-03-18T16:49:24.124Z","repository":{"id":150058678,"uuid":"470297525","full_name":"alecbcs/fly-restic","owner":"alecbcs","description":"Backup Any Rclone Remote to Another Using Restic on Fly.io","archived":false,"fork":false,"pushed_at":"2022-04-07T15:49:20.000Z","size":22,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-18T16:05:52.275Z","etag":null,"topics":["fly","rclone","restic"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alecbcs.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-03-15T19:08:05.000Z","updated_at":"2024-10-14T07:52:51.000Z","dependencies_parsed_at":"2023-06-04T14:15:40.396Z","dependency_job_id":null,"html_url":"https://github.com/alecbcs/fly-restic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alecbcs/fly-restic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecbcs%2Ffly-restic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecbcs%2Ffly-restic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecbcs%2Ffly-restic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecbcs%2Ffly-restic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alecbcs","download_url":"https://codeload.github.com/alecbcs/fly-restic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecbcs%2Ffly-restic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29151605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T02:39:25.012Z","status":"ssl_error","status_checked_at":"2026-02-06T02:37:22.784Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fly","rclone","restic"],"created_at":"2024-10-01T19:02:41.941Z","updated_at":"2026-02-06T05:03:32.101Z","avatar_url":"https://github.com/alecbcs.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fly-restic\nBackup Any Rclone Remote to Another Using Restic on Fly.io Topics\n\n## Table of Contents\n\n- [Introduction](#introduction)\n- [Getting Started](#getting-started)\n  - [Deploying Fly-Restic](#deploying-fly-restic)\n    - [GitHub Workflow (Recommended)](#github-workflow-recommended)\n    - [Manual](#manual)\n\n## Introduction\n\nUse [Fly.io](https://fly.io) to periodically backup one Rclone provider to another using Restic.\n\n## Getting Started\n### Making an Account on Fly.io\nIf you haven't already, you'll need to sign up for Fly and install the `flyctl` application by heading over to [fly.io](https://fly.io/docs/hands-on/start/). After you've completed Step 3 you may come back to this guide. To see your `FLY_API_TOKEN` run the following command and save the output for later.\n\n```\nflyctl auth token\n```\n\n### Deploying Fly-Restic\n#### GitHub Workflow (Recommended)\n\n1. Fork this repository (click fork in the top right)\n2. Go to your new repository's settings \u003e\u003e secrets \u003e\u003e action's secrets\n3. Create new secrets for each of the following,\n   ```\n   FLY_API_TOKEN\n   FLY_ORG\n   FLY_APP_NAME\n   FLY_APP_REGION\n   CRON_SPEC\n   RESTIC_PASSWORD\n   RESTIC_PRUNE_ARGS\n   RCLONE_CONFIG\n   RCLONE_FROM\n   RCLONE_TO\n   ```\n   See below for examples of a `CRON_SPEC`, `RCLONE_CONFIG`, `RCLONE_FROM`, and `RCLONE_TO`.\n4. Now go to your repositories \"Actions\" tab. You should see one action, (re)deploy restic.\n5. Click on (re)deploy \u0026 enable the workflow for your fork.\n6. Now manually run your workflow by clicking \"Run Workflow\" on the right of the screen. Your workflow should now begin and automatically deploy your Restic app.\n\n#### Manual\n1. Clone this repository\n2. Run the following commands, replacing `{{ VALUE }}` with your specifc values.\n   ```\n   flyctl launch --name {{ YOUR-APP-NAME }}\n   rm fly.toml\n\n   cd restic\n\n   sed -i \"s\\%fly_app_name%\\{{ YOUR APP NAME }}\\g\" fly.toml\n   sed -i \"s\\%rclone_from%\\{{ RCLONE_FROM }}\\g\" fly.toml\n   sed -i \"s\\%rclone_to%\\{{ RCLONE_TO }}\\g\" fly.toml\n   sed -i \"s\\%restic_password%\\{{ RESTIC_PASSWORD }}\\g\" fly.toml\n   sed -i \"s\\%restic_prune_args%\\{{ RESTIC_PRUNE_ARGS }}\\g\" fly.toml\n   ```\n4. Copy your rclone.conf to this `restic/`.\n5. Create a file named `entry-cron` within `restic/` that defines the cron job to be run with rclone and restic. (See below for an example of a cron definition.)\n6. Run `flyctl deploy`\n\n### Examples\n#### `CRON_SPEC` or `restic/entry-cron` File.\n```\n0 */6 * * * restic -r rclone:$RCLONE_TO backup --verbose /data \u0026\u0026 \\\n            restic -r rclone:$RCLONE_TO check \u0026\u0026 \\\n            restic -r rclone:$RCLONE_TO forget --prune $RESTIC_PRUNE_ARGS\n```\nThis example creates a backup snapshot of the `RCLONE_TO` data, checks previous backup integrety, and prunes old backups every 6 hours.\n\n#### `RCLONE_CONFIG` or `rclone.conf` File.\n```\n[nextcloud]\ntype = webdav\nurl = https://instance.domain.tld/remote.php/dav/files/username/\nvendor = nextcloud\nuser = username\npass = rEdAcTeD\n\n[s3]\ntype = s3\nprovider = a-provider-or-other\naccess_key_id = rEdAcTeD\nsecret_access_key = rEdAcTeD\nendpoint = s3.region.provider.tld\n```\nThis example shows webdav and s3 providers for rclone. You can generate this file by running,\n```\nrclone config\n```\nThen copy the generated file from `$HOME/.config/rclone/rclone.conf` into `restic/rclone.conf`.\n\n#### `RCLONE_FROM`\n```\nnextcloud:/\n```\n\n#### `RCLONE_TO`\n```\ns3:bucket-name/\n```\n\n## License\n\nCopyright 2022 Alec Scott hi@alecbcs.com\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falecbcs%2Ffly-restic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falecbcs%2Ffly-restic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falecbcs%2Ffly-restic/lists"}