{"id":26167444,"url":"https://github.com/ethanc/arrchive","last_synced_at":"2026-04-11T13:34:22.344Z","repository":{"id":281801245,"uuid":"945239881","full_name":"EthanC/Arrchive","owner":"EthanC","description":"Backup *Arr stack databases to Google Drive.","archived":false,"fork":false,"pushed_at":"2025-03-11T07:55:10.000Z","size":74,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-11T08:27:33.469Z","etag":null,"topics":["auto","automatic","backup","bazarr","database","db","docker","drive","google","google-drive","prowlarr","python","radarr","script","sonarr","sqlite","zip"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EthanC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["https://cash.app/$EthanChrisp","https://venmo.com/u/Mxtive"]}},"created_at":"2025-03-09T01:04:45.000Z","updated_at":"2025-03-11T07:55:13.000Z","dependencies_parsed_at":"2025-03-11T08:38:22.779Z","dependency_job_id":null,"html_url":"https://github.com/EthanC/Arrchive","commit_stats":null,"previous_names":["ethanc/arrchive"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanC%2FArrchive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanC%2FArrchive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanC%2FArrchive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanC%2FArrchive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EthanC","download_url":"https://codeload.github.com/EthanC/Arrchive/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243079802,"owners_count":20233055,"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":["auto","automatic","backup","bazarr","database","db","docker","drive","google","google-drive","prowlarr","python","radarr","script","sonarr","sqlite","zip"],"created_at":"2025-03-11T17:36:49.420Z","updated_at":"2025-12-24T13:20:19.070Z","avatar_url":"https://github.com/EthanC.png","language":"Python","funding_links":["https://cash.app/$EthanChrisp","https://venmo.com/u/Mxtive"],"categories":[],"sub_categories":[],"readme":"# Arrchive\n\n![Python](https://img.shields.io/badge/Python-3-blue?logo=python\u0026logoColor=white)\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/ethanc/arrchive/ci.yaml)\n![Docker Pulls](https://img.shields.io/docker/pulls/ethanchrisp/arrchive)\n![Docker Image Size (tag)](https://img.shields.io/docker/image-size/ethanchrisp/arrchive)\n\nArrchive uploads mirrors of your \\*Arr app database backups to [Google Drive](https://drive.google.com/).\n\nIt's lightweight, runs in Docker, features a configurable retention limit, and optionally sends notifications via Discord.\n\n**Supported \\*Arr Apps:**\n\n-   [Radarr](https://github.com/Radarr/Radarr)\n-   [Sonarr](https://github.com/Sonarr/Sonarr)\n-   [Prowlarr](https://github.com/Prowlarr/Prowlarr)\n-   [Bazarr](https://github.com/morpheus65535/bazarr)\n-   [Profilarr](https://github.com/Dictionarry-Hub/Profilarr)\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://i.imgur.com/jmLZ8gY.png\" alt=\"An example of an Arrchive notification in Discord.\" draggable=\"false\"\u003e\n\u003c/p\u003e\n\n## Features\n\n-   Uploads compressed `.zip` backups from your \\*Arr apps to Google Drive.\n-   Automatically removes old backup mirrors based on your retention limit.\n-   Optional Discord integration for logs and backup notifications.\n-   Easy to deploy via Docker or run standalone with Python.\n\n## Getting Started\n\n### Quick Start: Docker Compose\n\n\u003e [!NOTE]\n\u003e Arrchive is designed to run on a schedule to periodically mirror backups. `cron` is recommended.\n\nHere's an example `compose.yaml` to get started. Run it with `docker compose up`.\n\n```yaml\nservices:\n  arrchive:\n    container_name: arrchive\n    image: ethanchrisp/arrchive:latest\n    environment:\n      LOG_LEVEL: INFO\n      LOG_DISCORD_WEBHOOK_URL: https://discord.com/api/webhooks/YYYYYYYY/YYYYYYYY\n      LOG_DISCORD_WEBHOOK_LEVEL: WARNING\n      DISCORD_WEBHOOK_URL: https://discord.com/api/webhooks/XXXXXXXX/XXXXXXXX\n      BAZARR_BACKUP_PATH: /container/path/to/bazarr/backups\n      PROFILARR_BACKUP_PATH: /container/path/to/profilarr/backups\n      PROWLARR_BACKUP_PATH: /container/path/to/prowlarr/backups\n      RADARR_BACKUP_PATH: /container/path/to/radarr/backups\n      SONARR_BACKUP_PATH: /container/path/to/sonarr/backups\n      GOOGLE_SERVICE_EMAIL: email@gserviceaccount.com\n      GOOGLE_SERVICE_CLIENT_ID: 000000000000000000000\n      GOOGLE_SERVICE_PRIVATE_KEY_ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n      GOOGLE_SERVICE_PRIVATE_KEY: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n      GOOGLE_DRIVE_FOLDER_ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n      BACKUP_RETAIN_LIMIT: 3\n    volumes:\n      - /local/path/to/bazarr/backups:/container/path/to/bazarr/backups:ro\n      - /local/path/to/profilarr/backups:/container/path/to/profilarr/backups:ro\n      - /local/path/to/prowlarr/backups:/container/path/to/prowlarr/backups:ro\n      - /local/path/to/radarr/backups:/container/path/to/radarr/backups:ro\n      - /local/path/to/sonarr/backups:/container/path/to/sonarr/backups:ro\n```\n\n### Standalone: Python\n\n\u003e [!NOTE]\n\u003e Python 3.13 or later required.\n\n1. Install dependencies.\n\n    ```bash\n    uv sync\n    ```\n\n2. Rename `.env.example` to `.env` and configure your environment.\n\n3. Run Arrchive\n\n    ```bash\n    uv run arrchive.py\n    ```\n\n### Google Drive (Required)\n\n1. Create a new Project in the [Google Cloud console](https://console.developers.google.com/iam-admin/projects).\n    - (Recommended) Project Name: `Arrchive`\n    - After creation, select the Project.\n2. Enable the [Google Drive API](https://console.cloud.google.com/apis/library/drive.googleapis.com) for the Arrchive project.\n3. Create a new [Service Account](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts/create?walkthrough_id=iam--create-service-account#step_index=1) for the Arrchive project.\n    - (Recommended) Servive Account Name: `Arrchive`\n    - (Recommended) Service Account Description: `https://github.com/EthanC/Arrchive`\n    - _Create and Continue_\n4. Grant the Arrchive Service Account access to the Arrchive project.\n    - (Recommended) Service Account Role: `Owner`\n    - _Continue_ -\u003e _Done_\n5. Obtain a Private Key for the [Service Account](https://console.cloud.google.com/projectselector/iam-admin/serviceaccounts).\n    - _Actions_ -\u003e _Manage Keys_ -\u003e _Add Key_ -\u003e _Create a new Key_ -\u003e _JSON_ -\u003e _Private Key saved to your Computer_\n6. Set the corresponding environment variables using the values in the JSON file.\n7. Open [Google Drive](https://drive.google.com/) and create a folder for \\*Arr application backups to be stored.\n    - (Recommended) Folder Name: `Arrchive`\n8. Share the backup folder to the Service Account email address with Editor permissions.\n9. Open the Arrchive folder and copy its ID from the page URL.\n    - Example: `https://drive.google.com/drive/folders/ARRCHIVE_FOLDER_ID`\n    - Set the `GOOGLE_DRIVE_FOLDER_ID` environment variable to this value.\n\n### Environment Variables\n\n| Variable                        | Description                                  | Required? |\n| ------------------------------- | -------------------------------------------- | --------- |\n| `LOG_LEVEL`                     | Loguru console log level.                    | No        |\n| `DISCORD_WEBHOOK_URL`           | Notifications for backup success/failure.    | No        |\n| `LOG_DISCORD_WEBHOOK_URL`       | For sending log events to Discord.           | No        |\n| `LOG_DISCORD_WEBHOOK_LEVEL`     | Minimum log level for Discord logs.          | No        |\n| `BAZARR_BACKUP_PATH`            | Local path to Bazarr backup `.zip` files.    | No        |\n| `PROFILARR_BACKUP_PATH`         | Local path to Profilarr backup `.zip` files. | No        |\n| `PROWLARR_BACKUP_PATH`          | Local path to Prowlarr backup `.zip` files.  | No        |\n| `RADARR_BACKUP_PATH`            | Local path to Radarr backup `.zip` files.    | No        |\n| `SONARR_BACKUP_PATH`            | Local path to Sonarr backup `.zip` files.    | No        |\n| `GOOGLE_SERVICE_EMAIL`          | Google Service Account Email Address.        | Yes       |\n| `GOOGLE_SERVICE_CLIENT_ID`      | Google Service Account Client ID.            | Yes       |\n| `GOOGLE_SERVICE_PRIVATE_KEY_ID` | Google Service Account Private Key ID.       | Yes       |\n| `GOOGLE_SERVICE_PRIVATE_KEY`    | Google Service Account Private key           | Yes       |\n| `GOOGLE_DRIVE_FOLDER_ID`        | Folder ID from Google Drive URL.             | Yes       |\n| `BACKUP_RETAIN_LIMIT`           | Maximum number of backups to keep per app.   | No        |\n\n## Thanks\n\n-   [Pirate icon](https://thenounproject.com/icon/pirate-3201839/) courtesy of [Adrien Coquet](https://thenounproject.com/creator/coquet_adrien/) via [Noun Project](https://thenounproject.com/icon/pirate-3201839/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethanc%2Farrchive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethanc%2Farrchive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethanc%2Farrchive/lists"}