{"id":19700381,"url":"https://github.com/paulmuenzner/backupserver","last_synced_at":"2026-04-29T15:31:16.655Z","repository":{"id":219738561,"uuid":"749053153","full_name":"paulmuenzner/backupserver","owner":"paulmuenzner","description":"Golang Server to Periodically Create \u0026 Upload MongoDB database Backups of any Size to AWS S3 as CSV with Circular Buffer Functionality","archived":false,"fork":false,"pushed_at":"2024-02-08T18:35:02.000Z","size":563,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-10T10:46:57.096Z","etag":null,"topics":["aws-s3","cron","csv","go-mailer","golang","logger","mongodb"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paulmuenzner.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","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-01-27T13:00:27.000Z","updated_at":"2024-02-07T12:03:55.000Z","dependencies_parsed_at":"2024-06-21T15:24:48.147Z","dependency_job_id":"c4b4d42e-d648-45d7-9d42-c78e18275305","html_url":"https://github.com/paulmuenzner/backupserver","commit_stats":null,"previous_names":["paulmuenzner/golang-backupserver"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulmuenzner%2Fbackupserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulmuenzner%2Fbackupserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulmuenzner%2Fbackupserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulmuenzner%2Fbackupserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paulmuenzner","download_url":"https://codeload.github.com/paulmuenzner/backupserver/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241014203,"owners_count":19894208,"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":["aws-s3","cron","csv","go-mailer","golang","logger","mongodb"],"created_at":"2024-11-11T21:05:45.052Z","updated_at":"2026-04-29T15:31:16.617Z","avatar_url":"https://github.com/paulmuenzner.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\n\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!--\n*** https://www.markdownguide.org/basic-syntax/#reference-style-links\n--\u003e\n\u003c!-- [![Golang][golang-shield]][golang-url] --\u003e\n[![Go Report Card](https://goreportcard.com/badge/github.com/paulmuenzner/backupserver)](https://goreportcard.com/report/github.com/paulmuenzner/backupserver)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/650472443a824243884952184a6732dd)](https://app.codacy.com/gh/paulmuenzner/backupserver/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![Issues][issues-shield]][issues-url]\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/paulmuenzner/backupserver)\n[![GNU License][license-shield]][license-url]\n![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/paulmuenzner/backupserver)\n![GitHub top language](https://img.shields.io/github/languages/top/paulmuenzner/backupserver)\n \u003c!-- [![paulmuenzner.com][website-shield]][website-url] --\u003e\n[![paulmuenzner github][github-shield]][github-url] \n[![Contributors][contributors-shield]][contributors-url]\n\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/paulmuenzner/backupserver\"\u003e\n    \u003cimg src=\"assets/logo-backup-server.png\" alt=\"Logo\" width=\"235\" height=\"154\"\u003e\n  \u003c/a\u003e\n\n  \u003ch3 align=\"center\"\u003eGolang Backup Server\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Circular Buffer Backups For MongoDB Using AWS S3\n    \u003cbr /\u003e\n    \u003ca href=\"#about-the-project\"\u003e\u003cstrong\u003eEXPLORE DOCS\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"#configuration\"\u003eHigh Flexibility\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/paulmuenzner/backupserver/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/paulmuenzner/backupserver/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n![Header](assets/backupserver-golang-paul-muenzner.png)\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#roadmap\"\u003eRoadmap\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#acknowledgments\"\u003eAcknowledgments\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\nThis Golang-based server is designed to automate recurring backups of MongoDB databases, offering flexibility and ease of use. The server converts each collection into CSV file format, providing human-readable backups that are easily managed. Backups are then uploaded to AWS S3, ensuring secure and scalable storage.\n\n\n### Features\n-   **Recurring Backups**: Define automatic, scheduled backups using cron jobs.\n-   **Circular Buffer**: Implement a circular buffer to manage and optimize backup storage.\n-   **CSV Format**: Each MongoDB collection is saved as a CSV file, offering simplicity and human readability. \n-   **Configuration Flexibility**: Easily modify several parameters, such as for cron jobs and adjust the number of kept backups thanks to a flexible configuration system.\n-   **Limitless Sizes**: Create MongoDB backups of any size without limits and upload to AWS S3. Large collections are splitted into multiple numbered files automatically to not exceed S3's maximum permitted [upload size](https://aws.amazon.com/s3/?nc1=h_ls).\n-   **Limitless Nested Levels**: This backup server can handle any level of nested values inside MongoDB's bson documents.\n-   **Dependency Injection (DI) setup**: This Golang webserver boasts a robust architecture designed for flexibility, reduced coupling and testibiliy through a dedicated Dependency Injection (DI) setup. The core functionalities of database communications, and AWS operations and sending email notifications are seamlessly integrated, providing a cohesive and modular solution.\n-   **AWS S3 Integration**: Backups are securely uploaded to AWS S3 for reliable and scalable storage. Multipart uploads are applied automatically for large csv files improving throughput by uploading a number of parts in parallel.\n-   **S3 Pagination**: Pagination implemented to handle large object lists with AWS S3.\n-   **Local Backups**: Store backups optionally on your local machine; even with circular buffer functionality.\n-   **Robust Error Handling Mechanism**: Any encountered errors are diligently logged to the designated log folder and simultaneously dispatched via email notifications.\n\n\n\n### Advantage CSV Backups\n\nChoosing to make backups in CSV format offers simplicity, portability, and human readability. CSV files are plain text, making them easy to understand, edit, and share across various platforms. They don't rely on database-specific tools (eg. MongoDB Compass), providing independence and ease of use. Additionally, CSV allows for straightforward analysis, version control, and transparency into data structure. This format is database-agnostic, facilitating compatibility and reducing dependencies. While MongoDB backups have their advantages, CSV backups are often preferred for their versatility and accessibility.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Tech Stack \u003ca name=\"tech-stack\"\u003e\u003c/a\u003e\n\nThis project is basically built with and for:\n\n*   [![Aws][aws-shield]][aws-url]\n*   [![Golang][golang-shield]][golang-url]\n*   [![MongoDB][mongodb-shield]][mongodb-url]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- GETTING STARTED --\u003e\n## Getting Started\n\nPrior to launching the program, clone the repo, install go dependencies and ensure that all configurations are set. \n\n\n### Prerequisites \n-   Make sure MongoDB is installed and available.\n-   Make sure a properly configured [AWS S3 Bucket](https://aws.amazon.com/s3/?nc1=h_ls) is ready.\n\n\n### Installation\n\n-   Clone the repo\n   ```sh\n   git clone https://github.com/paulmuenzner/backupserver.git\n   ```\n-   Install go dependencies by running\n   ```sh\n   go get\n   ```\n\n### Environment file (.env)\nBefore running the program, you need to set up the required environment variables by creating a .env file in the root directory of the project. This file holds sensitive information and configurations needed for the proper functioning of the application.\n\n#### Mandatory Environment Variables\n\nAWS S3 \u0026 MongoDB Configuration:\n\nIf your application involves interactions with AWS S3, you must provide the following key-value pairs in the .env file:\n\n-   AWS_S3_BUCKET_NAME: The name of your AWS S3 bucket.\n-   AWS_REGION: The AWS region where your S3 bucket is located.\n-   AWS_ACCESS_KEY_ID: Your AWS access key ID.\n-   AWS_SECRET_ACCESS_KEY: Your AWS secret access key.\n-   MONGODB_SCHEME: MongoDB Scheme (likely mongodb) \n-   MONGODB_HOST: MongoDB Host (localhost if self-hosted running locally. Read more on [mongodb.com](https://www.mongodb.com/docs/manual/reference/connection-string/).) \n-   MONGODB_PORT: MongoDB Port, eg. 27018 or standard port 27017. Read more on [mongodb.com](https://www.mongodb.com/docs/manual/reference/connection-string/).\n-   MONGODB_DATABASE_NAME: Name of your MongoDB database you like to backup.\n\n\n#### Optional Environment Variables\n\nEmail Notification Configuration:\n\nIf you intend to use email notifications (configured with SendEmailNotifications in the config file), include the following additional variables in your .env file:\n\n-   EMAIL_PROVIDER_PASSWORD: Password for the email provider.\n-   EMAIL_PROVIDER_USERNAME: Username for the email provider.\n-   EMAIL_PROVIDER_SMTP_PORT: SMTP port for the email provider.\n-   EMAIL_PROVIDER_HOST: Hostname of the email provider.\n-   EMAIL_ADDRESS_SENDER_BACKUP: Sender email address for backup notifications.\n-   EMAIL_ADDRESS_RECEIVER_BACKUP: Receiver email address for backup notifications.\n-   MONGODB_USERNAME: Username as part of your MongoDB connection string if needed. Read more on [mongodb.com](https://www.mongodb.com/docs/manual/reference/connection-string/).\n-   MONGODB_PASSWORD: Password as part of your MongoDB connection string if needed. Read more on [mongodb.com](https://www.mongodb.com/docs/manual/reference/connection-string/).\n\n#### Important Note\n\nMake sure to keep your '.env' file secure and do not share it publicly.\n\nThe program relies on these configurations to run successfully. Without the correct values in the .env file, certain features may not work as expected.\n\n#### Template\n\nHere's an example .env template in code format. Replace \"your-...\" placeholders with your actual values. Ensure that this file is kept secure, and sensitive information is not shared publicly. Users should fill in the appropriate values for their specific configurations.\n```sh\n# AWS S3 Configuration\nAWS_S3_BUCKET_NAME=your-s3-bucket-name\nAWS_REGION=your-aws-region\nAWS_ACCESS_KEY_ID=your-access-key-id\nAWS_SECRET_ACCESS_KEY=your-secret-access-key\n\n# Database Configuration \nMONGODB_SCHEME=mongodb\nMONGODB_USERNAME=your-mongodb-username # Optional\nMONGODB_PASSWORD=your-mongodb-password # Optional\nMONGODB_HOST=localhost\nMONGODB_PORT=your-mongodb-port # Likely 27017\nMONGODB_DATABASE_NAME=your-mongodb-database-name\n\n# Email Notification Configuration (Optional)\nEMAIL_PROVIDER_PASSWORD=your-email-provider-password\nEMAIL_PROVIDER_USERNAME=your-email-provider-username\nEMAIL_PROVIDER_SMTP_PORT=your-smtp-port\nEMAIL_PROVIDER_HOST=your-email-provider-host\nEMAIL_ADDRESS_SENDER_BACKUP=your-sender-email-address\nEMAIL_ADDRESS_RECEIVER_BACKUP=your-receiver-email-address\n```\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Configuration\n\u003ca name=\"configuration\"\u003e\u003c/a\u003e\nThe following configurations can be modified in the config file located at =\u003e /config/base_config.go\n\n| Key                               |  Description |  Type |  Example \n|:-----                             |:---------    |:---------  |:---------  \n| DeleteLogsAfterDays               | Errors are logged to the 'log/' folder, with log file names assigned based on the day. All logs generated within a day are consolidated into a designated backup file. This parameter determines the number of days after which log files will be automatically deleted. | int|   5  \n| NameDatabase                      |  Configure your database name you like to backup. It must be 100% identical to the MongoDB database name. | string| \"MyProjectDB\"  \n| FolderNameBackup                  | Determine the folder name where your backup is stored in the cloud; inside the S3 bucket. | string|\"mydbbackup\"\n| FileNameMetaData                  |File name for meta data file containing information on each created backup file | string| \"meta_data.csv\"  \n| IntervalBackup                    |Cron-like syntax format to define the recurring schedule of your automatic backup  |string|\"@every 6h\"\n| MaxFileSizeInBytes                | The maximum size of a backup file. Be aware of the max upload size permitted by AWS S3. Of the configured file size is not sufficient, a new backup file is created with the same name plus an added sequential numbering at the end           |int64| 2 * 1024 * 1024 * 1024\n| SendEmailNotifications            |Decide whether you want to send email notifications or not. Emails are sent in both cases error and successfully completed backup. |bool| false\n| EmailProviderUserNameEnv          |Name of .env key. The value behind this .env key is placed in your .env file. Needed, if you want to send transactional email notifications. Ask your provider for this value.|string| \"EMAIL_PROVIDER_USERNAME\"\n| EmailProviderPasswordEnv          |Name of .env key. The value behind this .env key is placed in your .env file. Needed, if you want to send transactional email notifications. Ask your provider for this value.|string| \"EMAIL_PROVIDER_PASSWORD\"\n| EmailProviderSmtpPortEnv                       | Name of .env key. The value behind this .env key is placed in your .env file. Needed, if you want to send transactional email notifications. Ask your provider for this value.          |string| \"EMAIL_PROVIDER_SMTP_PORT\"\n| EmailProviderHostEnv              |Name of .env key. The value behind this .env key is placed in your .env file. Needed, if you want to send transactional email notifications. Ask your provider for this value.| string|\"EMAIL_PROVIDER_HOST\"\n| EmailAddressSenderEnv             |Name of .env key. The value behind this .env key is placed in your .env file. Needed, if you want to send transactional email notifications. Ask your provider for this value.| string|\"EMAIL_ADDRESS_SENDER_BACKUP\"\n| EmailAddressReceiverEnv           |Name of .env key. The value behind this .env key is placed in your .env file. Needed, if you want to send transactional email notifications. Ask your provider for this value.| string|\"EMAIL_ADDRESS_RECEIVER_BACKUP\"\n| IsCircularBufferActivatedS3       |Decide whether you like to implement a circular buffer or not. If 'false', all backups on S3 are stored without deleting them, which might increase costs depending on backup interval and database size. | bool|true\n| MaxBackupsS3                      |Configuration for circular buffer. If IsCircularBufferActivatedS3 is set to true, circular buffer deletes backups older than latest number of MaxBackupsS3 in S3. In this example, the 12 newest backups are stored on S3 only - older backups will be deleted. | int|12\n| UseLocalBackupStorage             |Decide if you like to store backups on your local machine (where this program is running on), too.|bool| true \n| IsCircularBufferActivatedLocally  | Same function as 'IsCircularBufferActivatedS3' but for local backup storage. |bool| true\n| MaxBackupsLocally                 | Same as 'MaxBackupsS3' but for local backup storage. If MaxBackupsLocally is set to true, circular buffer deletes backups older than latest number of MaxBackupsLocally locally.|int| 10\n| S3BucketEnv                   |Name of .env key to configure bucket name. The value behind this .env key is placed in your .env file. Needed, to configure AWS S3. Check your S3 AWS dashboard for this value. The bucket with the exact same name must be ready in your AWS account.|string| \"AWS_S3_BUCKET_NAME\"\n| S3RegionEnv                   |Name of .env key to configure S3 region. The value behind this .env key is placed in your .env file. The region with the exact same name is mentioned in your AWS account.| string|\"AWS_REGION\"\n| S3AccessKeyEnv                |Name of .env key to add S3 access key. The value behind this .env key is placed in your .env file. The access key is available in your AWS account.| string|\"AWS_ACCESS_KEY_ID\"\n| S3SecretKeyEnv                |Name of .env key to add S3 secret key. The value behind this .env key is placed in your .env file. The secret key is available in your AWS account.| string|\"AWS_SECRET_ACCESS_KEY\"  \n| MongoDatabaseSchemeEnv        |Name of .env key to define a MongoDB scheme. The value behind this .env key is placed in your .env file. |string| \"MONGODB_SCHEME\"\n| MongoDatabaseUsernameEnv      |Name of .env key to define a MongoDB user name if needed. The value behind this .env key is placed in your .env file. |string| \"MONGODB_USERNAME\"\n| MongoDatabasePasswordEnv      |Name of .env key to define a MongoDB password if needed. The value behind this .env key is placed in your .env file. |string| \"MONGODB_PASSWORD\"\n| MongoDatabaseHostdEnv         |Name of .env key to define a MongoDB host. The value behind this .env key is placed in your .env file. |string| \"MONGODB_HOST\"\n| MongoDatabasePortEnv          |Name of .env key to define a MongoDB port number. The value behind this .env key is placed in your .env file. |string| \"MONGODB_PORT\"\n| MongoDatabaseNameEnv          |Name of .env key to define a MongoDB database name. The value behind this .env key is placed in your .env file. |string| \"MONGODB_DATABASE_NAME\"\n\n\n### Run program\n\nRun program by: `go run main.go` or use live-reloader such as [air](https://github.com/cosmtrek/air) with `air`\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- ROADMAP --\u003e\n## Roadmap\n\n-   ✅ Add optional circular buffer feature for S3 \n-   ✅ Add optional circular buffer feature for local storage\n-   ✅ Add optional email notification feature\n-   ⬜️ Add gzip compression feature for entire backup files\n-   ⬜️ Configuring a threshold option for the amount of memory used during the temporary storage of collection loop iteration steps as a prudent practice for conscientious RAM resource management\n-   ⬜️ Expand testing\n-   ⬜️ Addressing more nuanced linting issues\n-   ⬜️ Include the option to perform backups for SQL databases in addition to MongoDB\n-   ⬜️ Add option to backup multiple databases\n-   ⬜️ Add option to upload backups to MS Azure\n\n\nSee the [open issues](https://github.com/paulmuenzner/backupserver/issues) to report bugs or request fatures.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTRIBUTING --\u003e\n## Contributing\n\nContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nContributions are more than welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for\nmore info.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- LICENSE --\u003e\n## License\n\nDistributed under the GNU General Public License v2.0. See [LICENSE](LICENSE.txt) for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- CONTACT --\u003e\n## Contact\n\nPaul Münzner: [https://paulmuenzner.com](https://paulmuenzner.com) \n\nProject Link: [https://github.com/paulmuenzner/backupserver](https://github.com/paulmuenzner/backupserver)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- ACKNOWLEDGMENTS --\u003e\n## Acknowledgments\n\nUse this space to list resources you find helpful and would like to give credit to. I've included a few of my favorites to kick things off!\n\n*   [AWS S3 Upload Size](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)\n*   [MongoDB Go Docs](https://www.mongodb.com/docs/drivers/go/current/quick-start/)\n*   [AWS SDK for Go V2 Docs][aws-url]\n*   [Gomail Docs](https://pkg.go.dev/gopkg.in/gomail.v2?utm_source=godoc)\n*   [Testing](https://pkg.go.dev/testing) \u0026 [assert](https://pkg.go.dev/github.com/stretchr/testify/assert)\n*   [Cron](https://pkg.go.dev/github.com/robfig/cron/v3)\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n[golang-shield]: https://img.shields.io/badge/golang-black.svg?logo=go\u0026logoColor=ffffff\u0026colorB=00ADD8\n[golang-url]: https://go.dev/\n[aws-shield]: https://img.shields.io/badge/aws_s3-black.svg?logo=amazons3\u0026logoColor=ffffff\u0026colorB=569A31\n[aws-url]: https://aws.github.io/aws-sdk-go-v2/docs/\n[mongodb-shield]: https://img.shields.io/badge/mongodb-black.svg?logo=mongodb\u0026logoColor=ffffff\u0026colorB=47A248\n[mongodb-url]: https://go.dev/\n[github-shield]: https://img.shields.io/badge/paulmuenzner-black.svg?logo=github\u0026logoColor=ffffff\u0026colorB=000000\n[github-url]: https://github.com/paulmuenzner?tab=repositories\n[contributors-shield]: https://img.shields.io/github/contributors/paulmuenzner/backupserver.svg\n[contributors-url]: https://github.com/paulmuenzner/backupserver/graphs/contributors\n[issues-shield]: https://img.shields.io/github/issues/paulmuenzner/backupserver.svg\n[issues-url]: https://github.com/paulmuenzner/backupserver/issues\n[license-shield]: https://img.shields.io/github/license/paulmuenzner/backupserver.svg\n[license-url]: https://github.com/paulmuenzner/backupserver/blob/master/LICENSE.txt\n\u003c!-- [website-shield]: https://img.shields.io/badge/www-paulmuenzner.com-blue\n[website-url]: https://paulmuenzner.com --\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulmuenzner%2Fbackupserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaulmuenzner%2Fbackupserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulmuenzner%2Fbackupserver/lists"}