---
title: "Migrating From MinIO to Cloudflare R2 (And Saving Myself a VPS Upgrade)"
url: https://daily.dev/posts/migrating-from-minio-to-cloudflare-r2-and-saving-myself-a-vps-upgrade--66shcx0vu
source_url: https://mwaseemzakir.substack.com/p/migrating-from-minio-to-cloudflare
type: article
source: "Waseem .NET Newsletter"
published: 2026-08-08T04:08:24.939Z
updated: 2026-08-08T04:08:51.639Z
tags: [".net"]
reading_time: 5
upvotes: 4
comments: 2
language: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating From MinIO to Cloudflare R2 (And Saving Myself a VPS Upgrade)

**[Waseem .NET Newsletter](https://daily.dev/sources/mwaseemzakir)** · 5 min read · 4 upvotes · 2 comments

## Summary

A solo developer running a SaaS (PakExam) on a Hostinger VPS hit 97% of his 8 TB monthly bandwidth limit because MinIO was serving all file downloads through the same server. Rather than upgrading to a more expensive VPS plan, he migrated file storage to Cloudflare R2, which offers free egress. The migration used rclone to copy and verify data between the two S3-compatible systems. On the code side, a new storage service was added behind an existing abstraction interface, making the switch a config change plus one new service rather than a full rewrite.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://mwaseemzakir.substack.com/p/migrating-from-minio-to-cloudflare>

## Questions this post answers

### How do I migrate data from MinIO to Cloudflare R2?

Use rclone, which supports both MinIO and R2 as S3-compatible remotes. Configure two rclone remotes (one for MinIO as source, one for R2 as destination), create matching buckets on R2 first, run a dry run to check file counts, then copy bucket by bucket. Finish with `rclone check` on each bucket to verify file counts and checksums match before switching your app config.

_Developers moving off self-hosted storage track migration patterns like this on daily.dev._

### Does Cloudflare R2 charge for egress bandwidth?

Cloudflare R2 does not charge for egress at all, regardless of how much data goes out. The free tier also includes 10 GB-month of storage, 1 million Class A operations (writes, lists), and 10 million Class B operations (reads). This makes it particularly attractive when egress from a self-hosted or cloud storage solution is the primary cost driver.

_Teams deciding between storage providers for bandwidth-heavy workloads compare options like these on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@ajaychoudhary80** · 0 upvotes

> The abstraction layer paid off exactly when it mattered—changing infrastructure without rewriting the application.

**@agustinbarrientos** · 0 upvotes

> My default would keep MinIO read-only for one billing cycle before deletion. Monthly jobs can hide from a one-week verification window.

## Similar posts on daily.dev

- [Cloudflare R2: object storage without egress fees](https://daily.dev/posts/cloudflare-r2-object-storage-without-egress-fees-facb8qxkw) · Flavio Copes · 0 upvotes · 0 comments
- [The Budget-Friendly Monolith: Rails File Uploads with Cloudflare R2](https://daily.dev/posts/the-budget-friendly-monolith-rails-file-uploads-with-cloudflare-r2-ufuy3ac1y) · Ruby Flow · 0 upvotes · 0 comments
- [How I Migrated My Website to Cloudflare and Saved $228](https://daily.dev/posts/how-i-migrated-my-website-to-cloudflare-and-saved-228-jnb0ux8f6) · Milan Jovanović · 35 upvotes · 2 comments

---

Tags: [#.net](https://daily.dev/tags/.net)

[View this post on daily.dev](https://daily.dev/posts/migrating-from-minio-to-cloudflare-r2-and-saving-myself-a-vps-upgrade--66shcx0vu)
