{"id":40510176,"url":"https://github.com/hugoheml/services-backup","last_synced_at":"2026-01-20T20:02:42.152Z","repository":{"id":307379726,"uuid":"1029190764","full_name":"hugoheml/services-backup","owner":"hugoheml","description":"Backup your services in specific file storages systems","archived":false,"fork":false,"pushed_at":"2025-12-21T21:57:18.000Z","size":82,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-23T09:36:05.804Z","etag":null,"topics":["backup","backup-scripts","mysqldump","psql","psql-dump","pterodactyl","pterodactyl-backups","rsync"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hugoheml.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-30T16:52:42.000Z","updated_at":"2025-12-21T21:56:26.000Z","dependencies_parsed_at":"2025-09-28T16:13:48.969Z","dependency_job_id":null,"html_url":"https://github.com/hugoheml/services-backup","commit_stats":null,"previous_names":["hugoheml/services-backup"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/hugoheml/services-backup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugoheml%2Fservices-backup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugoheml%2Fservices-backup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugoheml%2Fservices-backup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugoheml%2Fservices-backup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hugoheml","download_url":"https://codeload.github.com/hugoheml/services-backup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hugoheml%2Fservices-backup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28612157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T18:56:40.769Z","status":"ssl_error","status_checked_at":"2026-01-20T18:54:26.653Z","response_time":117,"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":["backup","backup-scripts","mysqldump","psql","psql-dump","pterodactyl","pterodactyl-backups","rsync"],"created_at":"2026-01-20T20:01:06.107Z","updated_at":"2026-01-20T20:02:42.142Z","avatar_url":"https://github.com/hugoheml.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Services Backup\n\n![Work in Progress](https://img.shields.io/badge/status-WIP-orange.svg)\n\nThis project is currently a work in progress. Contributions are welcome! Feel free to open a Pull Request.\n\n## About\n\nServices Backup is a tool designed to automate the backup of various services. Currently, it supports the following sources:\n\n- [**Pterodactyl**](https://pterodactyl.io/): A game server management panel.\n- [**MySQL/MariaDB**](https://mysql.com/): Popular relational database management systems.\n- [**PostgreSQL**](https://www.postgresql.org/): A powerful open-source relational database.\n- [**Rsync**](https://en.wikipedia.org/wiki/Rsync): Mirror remote folders over SSH using rsync.\n- **Local Files**: Backup local files and folders with support for exclusion patterns.\n\nAnd the following storage classes:\n\n- **Local Storage**: Store backups directly on the local filesystem.\n- [**FTP**](https://en.wikipedia.org/wiki/File_Transfer_Protocol): A standard network protocol used to transfer files from one host to another over a TCP-based network.\n- [**SFTP**](https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol): SSH File Transfer Protocol, a secure file transfer protocol that runs over SSH, supporting password and SSH key authentication.\n\nThe application also supports alert notifications through:\n\n- [**Discord**](https://discord.com/): Real-time notifications via Discord webhooks for backup status and errors.\n\n## Deployment\n\nTo deploy the application, you can use the provided `docker-compose.yaml`. The entire deployment can be done directly from the docker-compose file.\n\n1.  Copy the content of the [`docker-compose.yaml`](docker-compose.yaml) file.\n2.  Modify the environment variables directly in the file to match your configuration.\n3.  Run the application using the following command:\n\n```bash\ndocker-compose up -d --build\n```\n\n## Development\n\nTo set up a local development environment, you can use the development docker-compose file which includes local FTP and MySQL servers for testing. The entire development environment can be deployed directly from the docker-compose:\n\n1.  Create a `.env` file based on [`.env.example`](.env.example) and fill in your configuration. For the local development environment, the default values should work.\n2.  Start the entire development environment (including local FTP, MySQL, and PostgreSQL servers):\n    ```bash\n    docker-compose -f docker-compose-dev.yaml up -d --build\n    ```\n\nThis will start:\n- A local FTP server for testing storage functionality\n- A local MySQL server with sample databases for testing backup functionality\n- A local PostgreSQL server with sample databases for testing backup functionality\n- A local rsync target exposed over SSH for testing rsync-based backups\n- The application in development mode with hot-reloading\n\nAlternatively, if you prefer to run the application locally while using containerized services:\n\n1.  Start only the local services:\n    ```bash\n  docker-compose -f docker-compose-dev.yaml up -d --build ftp mysql postgres\n    ```\n2.  Install the project dependencies:\n    ```bash\n    npm install\n    ```\n3.  Run the application in development mode:\n    ```bash\n    npm run dev\n    ```\n\n## Requirements\n\nFor MySQL/MariaDB and PostgreSQL backup functionality in non-Docker deployments, the system requires:\n- `mysqldump` utility (usually included with MySQL/MariaDB client packages)\n- `pg_dump` utility (usually included with PostgreSQL client packages)\n- `rsync` utility available in the runtime environment for rsync-based backups.\n\n*Note: Docker deployments already include this dependency in the container.*\n\n## Configuration\n\nHere is the list of environment variables you can configure:\n\n### General Settings\n\n| Variable                            | Description                                                                                                             | Default   |\n| ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | --------- |\n| `LOG_LEVEL`                         | Log level (error, warn, info, http, verbose, debug, silly).                                                             | `info`    |\n| `TMP_DIR`                           | Temporary directory to store backups before uploading.                                                                  | `/tmp`    |\n| `MAX_BACKUP_PER_ELEMENT`            | Maximum number of backups to keep per server/database.                                                                  | `5`       |\n| `MAX_BACKUP_RETENTION_DAYS`         | Maximum retention duration in days for backups.                                                                         | `30`      |\n| `PERIODIC_BACKUP_RETENTION_ENABLED` | Enable periodic backup retention to keep specific backups at defined intervals (`true` or `false`).                     | `false`   |\n| `PERIODIC_BACKUP_RETENTION`         | Comma-separated list of time intervals (in minutes) and amounts to keep. Format: `interval1:amount1,interval2:amount2`. | _(empty)_ |\n\n#### Periodic Backup Retention Examples\n\nThe `PERIODIC_BACKUP_RETENTION` setting allows you to define custom retention policies to keep specific backups at defined time intervals, even if they exceed the normal retention limits.\n\n**Format:** `interval_in_minutes:amount_to_keep`\n\n**Examples:**\n\n- **Keep 1 backup every hour for the last 4 hours:**\n  ```\n  PERIODIC_BACKUP_RETENTION=60:4\n  ```\n\n- **Keep 1 backup every day for the last 7 days:**\n  ```\n  PERIODIC_BACKUP_RETENTION=1440:7\n  ```\n\n- **Keep 1 backup every week for the last 4 weeks:**\n  ```\n  PERIODIC_BACKUP_RETENTION=10080:4\n  ```\n\n- **Complex retention policy (hourly, daily, weekly, monthly):**\n  ```\n  PERIODIC_BACKUP_RETENTION=60:24,1440:7,10080:4,43800:3\n  ```\n  This example keeps:\n  - 24 backups: one for each of the last 24 hour periods\n  - 7 backups: one for each of the last 7 day periods\n  - 4 backups: one for each of the last 4 week periods\n  - 3 backups: one for each of the last 3 month periods\n\n- **Long-term archival policy:**\n  ```\n  PERIODIC_BACKUP_RETENTION=525600:2,262800:4,43800:6,10080:8,1440:14\n  ```\n  This example keeps:\n  - 2 backups: one for each of the last 2 year periods\n  - 4 backups: one for each of the last 4 six-month periods\n  - 6 backups: one for each of the last 6 month periods\n  - 8 backups: one for each of the last 8 week periods\n  - 14 backups: one for each of the last 14 day periods\n\n**Note:** When `PERIODIC_BACKUP_RETENTION_ENABLED=true`, backups that match these retention criteria will be preserved even if they exceed the `MAX_BACKUP_PER_ELEMENT` or `MAX_BACKUP_RETENTION_DAYS` limits. The system will keep the most recent backup within each time period defined.\n\n### Pterodactyl Settings\n\n| Variable                     | Description                                                   | Default                     |\n| ---------------------------- | ------------------------------------------------------------- | --------------------------- |\n| `BACKUP_PTERODACTYL`         | Enable backup for Pterodactyl (`true` or `false`).            | `true`                      |\n| `PTERODACTYL_URL`            | The URL of your Pterodactyl panel.                            | `https://panel.example.com` |\n| `PTERODACTYL_API_KEY`        | Your Pterodactyl client API key.                              | `ptlc_XXXXXX`               |\n| `PTERODACTYL_FETCH_AS_ADMIN` | Fetch servers as an administrator (`true` or `false`).        | `true`                      |\n| `PTERODACTYL_FOLDER_PATH`    | Base path to store Pterodactyl backups on the remote storage. | `pterodactyl/servers`       |\n\n### MySQL/MariaDB Settings\n\n| Variable                 | Description                                                | Default                                           |\n| ------------------------ | ---------------------------------------------------------- | ------------------------------------------------- |\n| `BACKUP_MYSQL`           | Enable backup for MySQL/MariaDB (`true` or `false`).       | `true`                                            |\n| `MYSQL_HOST`             | Your MySQL/MariaDB server host.                            | `localhost`                                       |\n| `MYSQL_PORT`             | Your MySQL/MariaDB server port.                            | `3306`                                            |\n| `MYSQL_USER`             | The username for the MySQL/MariaDB connection.             | `myuser`                                          |\n| `MYSQL_PASSWORD`         | The password for the MySQL/MariaDB connection.             | `mypassword`                                      |\n| `MYSQL_POOL_SIZE`        | Connection pool size for MySQL/MariaDB.                    | `5`                                               |\n| `MYSQL_IGNORE_DATABASES` | Comma-separated list of databases to ignore during backup. | `information_schema,performance_schema,mysql,sys` |\n| `MYSQL_FOLDER_PATH`      | Base path to store MySQL backups on the remote storage.    | `mysql`                                           |\n| `MYSQL_SSL_ENABLED`      | Enable SSL for MySQL connection (`true` or `false`).       | `false`                                           |\n\n### PostgreSQL Settings\n\n| Variable                           | Description                                                   | Default               |\n| ---------------------------------- | ------------------------------------------------------------- | --------------------- |\n| `BACKUP_POSTGRESQL`                | Enable backup for PostgreSQL (`true` or `false`).             | `false`               |\n| `POSTGRES_HOST`                    | Your PostgreSQL server host.                                  | `localhost`           |\n| `POSTGRES_PORT`                    | Your PostgreSQL server port.                                  | `5432`                |\n| `POSTGRES_USER`                    | The username for the PostgreSQL connection.                   | `myuser`              |\n| `POSTGRES_PASSWORD`                | The password for the PostgreSQL connection.                   | `mypassword`          |\n| `POSTGRES_DB`                      | Default database used for the initial connection.             | `postgres`            |\n| `POSTGRES_IGNORE_DATABASES`        | Comma-separated list of databases to ignore during backup.    | `template0,template1` |\n| `POSTGRES_FOLDER_PATH`             | Base path to store PostgreSQL backups on the remote storage.  | `postgresql`          |\n| `POSTGRES_SSL_ENABLED`             | Enable SSL for PostgreSQL connection (`true` or `false`).     | `false`               |\n| `POSTGRES_SSL_REJECT_UNAUTHORIZED` | Reject self-signed certificates when SSL is enabled (`true`). | `true`                |\n\n### Rsync Settings\n\n| Variable             | Description                                                                                                      | Default         |\n| -------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------- |\n| `BACKUP_RSYNC`       | Enable rsync-based backups (`true` or `false`).                                                                  | `false`         |\n| `RSYNC_FOLDER_PATH`  | Base path to store rsync archives on the remote storage.                                                         | `rsync`         |\n| `RSYNC_TARGET_NAME`  | Friendly name for the rsync target (defaults to host when empty).                                                | `remote-server` |\n| `RSYNC_TARGET_HOST`  | Remote host to sync from. Supports IPv4 and IPv6.                                                                | _(empty)_       |\n| `RSYNC_TARGET_USER`  | SSH user for the remote host.                                                                                    | _(empty)_       |\n| `RSYNC_TARGET_PORT`  | SSH port for the remote host.                                                                                    | `22`            |\n| `RSYNC_TARGET_PATH`  | Remote directory to mirror.                                                                                      | _(empty)_       |\n| `RSYNC_SSH_KEY_PATH` | Optional path to the private SSH key used by rsync.                                                              | _(empty)_       |\n| `RSYNC_EXCLUDES`     | Comma-separated list of patterns ignored during sync (e.g. `node_modules,tmp`).                                  | _(empty)_       |\n| `RSYNC_SSH_OPTIONS`  | Additional SSH options appended to the rsync SSH command. Useful for disabling host key checks during testing.   | _(empty)_       |\n| `RSYNC_EXTRA_ARGS`   | Additional rsync arguments (space separated, double quotes supported for paths or arguments that contain spaces) | _(empty)_       |\n\nThe default development `.env` values point `RSYNC_TARGET_HOST` to this container (`rsync`) and mount the generated SSH private key at `/app/docker_keys/id_ed25519`. The files served over rsync live in `docker/rsync/data`.\n\nTo generate the development key pair, run the helper script and recreate the container:\n\n```bash\nbash docker/rsync/generate-keys.sh\ndocker compose -f docker-compose-dev.yaml build rsync\ndocker compose -f docker-compose-dev.yaml up -d rsync\n```\n\n### Local Files Settings\n\n| Variable                  | Description                                                                           | Default                    |\n| ------------------------- | ------------------------------------------------------------------------------------- | -------------------------- |\n| `BACKUP_LOCAL_FILES`      | Enable backup for local files and folders (`true` or `false`).                        | `false`                    |\n| `LOCAL_FILES_PATH`        | Absolute path to the file or folder to backup.                                        | _(empty)_                  |\n| `LOCAL_FILES_IGNORE`      | Comma-separated list of patterns to exclude from the archive (e.g., `*.log,cache/*`). | _(empty)_                  |\n| `LOCAL_FILES_FOLDER_PATH` | Base path to store local files backups on the remote storage.                         | `local-files`              |\n| `LOCAL_FILES_TMP_DIR`     | Temporary directory to create archives before uploading.                              | `/tmp/local-files-backups` |\n\n#### Local Files Configuration Examples\n\nThe local files backup service allows you to backup a single file or directory with optional exclusion patterns.\n\n**Example 1: Backup a single folder**\n```bash\nBACKUP_LOCAL_FILES=true\nLOCAL_FILES_PATH=/etc/myapp\n```\n\n**Example 2: Backup with exclusions**\n```bash\nBACKUP_LOCAL_FILES=true\nLOCAL_FILES_PATH=/home/user/Documents\nLOCAL_FILES_IGNORE=*.log,*.tmp,cache/*,node_modules\n```\n\n**Example 3: Docker configuration**\n```yaml\nservices:\n  services-backup:\n    environment:\n      - BACKUP_LOCAL_FILES=true\n      - LOCAL_FILES_PATH=/data\n      - LOCAL_FILES_IGNORE=*.log,temp/*\n    volumes:\n      - /path/to/backup:/data:ro\n```\n\n### Storage Settings\n\n| Variable                | Description                                                  | Default      |\n| ----------------------- | ------------------------------------------------------------ | ------------ |\n| `STORAGE_TYPE`          | The storage type to use. Supported: `ftp`, `sftp`, `local`.  | `local`      |\n| `LOCAL_STORAGE_PATH`    | Path to store backups when using local storage.              | `backups`    |\n| `FTP_HOST`              | Your FTP server host.                                        | `localhost`  |\n| `FTP_PORT`              | Your FTP server port.                                        | `21`         |\n| `FTP_USER`              | The username for the FTP connection.                         | `myuser`     |\n| `FTP_PASSWORD`          | The password for the FTP connection.                         | `mypassword` |\n| `SFTP_HOST`             | Your SFTP server host.                                       | `localhost`  |\n| `SFTP_PORT`             | Your SFTP server port.                                       | `22`         |\n| `SFTP_USER`             | The username for the SFTP connection.                        | `myuser`     |\n| `SFTP_PASSWORD`         | The password for the SFTP connection (if not using SSH key). | _(empty)_    |\n| `SFTP_PRIVATE_KEY_PATH` | Path to the SSH private key file for SFTP authentication.    | _(empty)_    |\n| `SFTP_PASSPHRASE`       | Optional passphrase for the SSH private key.                 | _(empty)_    |\n\n#### Using Local Storage\nYou must also set `LOCAL_STORAGE_PATH` to the directory where backups will be stored.\nWhen using Docker, mount a volume to persist your backups:\n\n```yaml\nservices:\n  services-backup:\n    ...\n    environment:\n      - STORAGE_TYPE=local\n      - LOCAL_STORAGE_PATH=/backups\n    volumes:\n      - ./backups:/backups\n```\nBackups will be saved in the `./backups` directory on the host machine.\n\n#### Using FTP Storage\nYou must set the FTP connection details:\n\n```yaml\nservices:\n  services-backup:\n    ...\n    environment:\n      - STORAGE_TYPE=ftp\n      - FTP_HOST=ftp.example.com\n      - FTP_PORT=21\n      - FTP_USER=myuser\n      - FTP_PASSWORD=mypassword\n```\n\n#### Using SFTP Storage\n\nSFTP storage supports two authentication methods:\n\n**1. Password authentication:**\n\n```yaml\nservices:\n  services-backup:\n    ...\n    environment:\n      - STORAGE_TYPE=sftp\n      - SFTP_HOST=sftp.example.com\n      - SFTP_PORT=22\n      - SFTP_USER=myuser\n      - SFTP_PASSWORD=mypassword\n```\n\n**2. SSH Key authentication (recommended):**\n\n```yaml\nservices:\n  services-backup:\n    ...\n    environment:\n      - STORAGE_TYPE=sftp\n      - SFTP_HOST=sftp.example.com\n      - SFTP_PORT=22\n      - SFTP_USER=myuser\n      - SFTP_PRIVATE_KEY_PATH=/app/ssh/id_rsa\n      - SFTP_PASSPHRASE=optional_key_passphrase  # Only if your key is encrypted\n    volumes:\n      - ./ssh-keys:/app/ssh:ro\n```\n\n**Note:** SSH key authentication is preferred over password authentication for better security. The SSH key file should be mounted as read-only (`:ro`) and have appropriate permissions (600).\n\n### Alert Settings\n\n| Variable                          | Description                                                      | Default   |\n| --------------------------------- | ---------------------------------------------------------------- | --------- |\n| `ALERT_SERVICE_ENABLED`           | Enable alert notifications (`true` or `false`).                  | `false`   |\n| `ALERT_AFTER_PROCESS`             | Send alerts after each backup process (`true` or `false`).       | `false`   |\n| `ALERT_DISCORD_ENABLED`           | Enable Discord alerts (`true` or `false`).                       | `false`   |\n| `DISCORD_ALERT_WEBHOOK_URL`       | Discord webhook URL for sending alert notifications.             | _(empty)_ |\n| `DISCORD_ALERT_EVERYONE_ON_ERROR` | Mention everyone in Discord on error alerts (`true` or `false`). | `false`   |\n\n### Encryption Settings\n\n| Variable                     | Description                                                 | Default           |\n| ---------------------------- | ----------------------------------------------------------- | ----------------- |\n| `ENCRYPTION_ENABLED`         | Enable GPG encryption for backup files (`true` or `false`). | `false`           |\n| `ENCRYPTION_PUBLIC_KEY_PATH` | Path to the GPG public key file for encrypting backups.     | `/app/public.asc` |\n\n## Encryption\n\nServices Backup supports GPG encryption for all backup files. When enabled, all backup files are automatically encrypted using GPG before being stored.\n\n### Generating GPG Keys\n\nTo use encryption, you need to generate a GPG key pair. Here are the commands to create, export, and manage your GPG keys:\n\n#### 1. Generate a new GPG key pair\n\n```bash\n# Generate a new key pair interactively\ngpg --full-generate-key\n\n# Or use batch mode for automation\ngpg --batch --generate-key \u003c\u003cEOF\n%echo Generating GPG key for Services Backup\nKey-Type: RSA\nKey-Length: 4096\nSubkey-Type: RSA\nSubkey-Length: 4096\nName-Real: Services Backups\nName-Comment: Backups\nName-Email: backup@test.com\nExpire-Date: 0\nPassphrase: your_secure_passphrase_here\n%commit\n%echo Done\nEOF\n```\n\n#### 2. List your keys\n\n```bash\n# List all keys\ngpg --list-keys\n\n# List secret keys\ngpg --list-secret-keys\n```\n\n#### 3. Export the public key\n\nExport public key (replace with your key ID or email)\n```bash\ngpg --armor --export backup@test.com \u003e public.asc\n```\n\n#### 4. Export the private key\n\nExport private key (replace with your key ID or email)\n```bash\ngpg --armor --export-secret-keys backup@test.com \u003e private.asc\n```\n\n### Docker Configuration\n\nWhen using Docker, you need to mount the GPG key files and configure the environment variables:\n\n```yaml\nservices:\n  services-backup:\n    image: ghcr.io/hugoheml/services-backup:latest\n    environment:\n      # Encryption settings\n      - ENCRYPTION_ENABLED=true\n      - ENCRYPTION_PUBLIC_KEY_PATH=/app/keys/public.asc\n      \n      # Other environment variables...\n      - STORAGE_TYPE=local\n      - LOCAL_STORAGE_PATH=/backups\n      \n    volumes:\n      # Mount your GPG keys\n      - ./keys:/app/keys:ro\n      # Mount backup storage\n      - ./backups:/backups\n```\n\n**Directory structure:**\n```\n.\n├── docker-compose.yaml\n├── keys/\n│   ├── public.asc    # Your GPG public key\n│   └── private.asc   # Your GPG private key\n└── backups/          # Backup storage directory\n```\n\n**Note:** The `keys` directory is mounted as read-only (`:ro`) for security. Make sure the key files have appropriate permissions (readable by the container user).\n\n### Decrypting Backups\n\nTo decrypt your backup files, you can use the following methods:\n\n#### Method 1: Using GPG command line\n\nDecrypt a single backup file\n```bash\ngpg --decrypt backup-file.gz.asc \u003e backup-file.gz\n```\n\nDecrypt with specific private key\n```bash\ngpg --decrypt --secret-keyring ./private.asc backup-file.gz.asc \u003e backup-file.gz\n```\n\nFor batch decryption with passphrase\n```bash\necho \"your_passphrase\" | gpg --batch --yes --passphrase-fd 0 --decrypt backup-file.gz.asc \u003e backup-file.gz\n```\n\nWarn: This method expose your passphrase in your `bash` history.\n\n## Roadmap\n\nHere are the features planned for future releases:\n\n- [ ] Add more detailed error messages, especially for misconfigured environment variables.\n- [ ] Add a maximum storage threshold to avoid filling up the storage space.\n- [ ] Add more alert systems for backup failures.\n- [ ] Add support for more services and storage classes.\n- [ ] Make some tutorials for backuping some services\n- [ ] Rework the files organization (especially in `services/` folder).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhugoheml%2Fservices-backup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhugoheml%2Fservices-backup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhugoheml%2Fservices-backup/lists"}