Back to blog
miniomacoss3 compatible storagebucketmatehybrid backup

Set Up a Local S3-Compatible Bucket on macOS with MinIO (and Sync to Cloud)

Run MinIO on a Mac, create a bucket, and keep it in sync with a cloud S3 provider using BucketMate for hybrid offline-first workflows.

MinIO is a fast way to spin up an S3-compatible object store on macOS so you can work offline, test APIs without touching production, and keep a local cache of critical data. Pair it with a smart sync routine and you gain a hybrid workflow where your Mac mirrors a cloud bucket while BucketMate gives you a Finder-like UI for day-to-day file ops.

This guide covers installation, configuration, and syncing in one pass so search engines and teammates alike can find a single authoritative walkthrough.

Why pair MinIO with a Mac and BucketMate

  • Offline-first reliability: Keep product demos, build artifacts, or AI models available without an internet connection while still syncing changes back to AWS S3, Cloudflare R2, Wasabi, or Backblaze B2.
  • Production-safe testing: Point staging apps or integration tests at the local endpoint to validate IAM policies, lifecycle rules, and SDK calls before deploying.
  • Friendly management: BucketMate’s native macOS app lists objects, previews files, and lets you drag and drop between local MinIO and remote cloud providers without scripts.

1. Install MinIO server and client tooling

MinIO ships as a single binary. Homebrew keeps it updated alongside the mc client.

brew install minio/stable/minio minio/stable/mc

Prefer manual control? Download the latest release from MinIO Downloads and move the binaries into /usr/local/bin/. Either path gives you the same commands used throughout this tutorial.

2. Create a dedicated data directory

Choose a persistent location for object data so the MinIO process can restart without losing state. The examples below assume ~/minio-data.

mkdir -p ~/minio-data

You can target an external SSD or network volume if you want more space or redundancy.

3. Launch MinIO on macOS

Start MinIO with explicit addresses so you know which ports to allow through the firewall.

minio server --address :9000 --console-address :9001 ~/minio-data

Open https://127.0.0.1:9001 in a browser to reach the admin console. The default credentials are minioadmin for both username and password. Change them immediately in production-like setups.

If you need TLS, generate certificates under ~/minio-certs and restart MinIO with --certs-dir ~/minio-certs. BucketMate will trust the certificate as long as it matches the hostname you configure inside the app.

4. Configure the MinIO client (mc)

The mc CLI mirrors the AWS S3 CLI but works across any S3-compatible target. Set up an alias for your local server, then create a bucket dedicated to offline work.

mc alias set localminio http://127.0.0.1:9000 minioadmin minioadmin
mc mb localminio/offline-projects

Keep the alias names simple because they appear throughout mirror commands and scripts.

5. Connect BucketMate to your local MinIO

  1. Launch BucketMate on macOS.
  2. Click Add connectionCustom S3-compatible.
  3. Enter the endpoint http://127.0.0.1:9000 (or https:// if you enabled TLS).
  4. Supply the access key, secret key, and bucket you created above.
  5. Tap Test connection and then Save to add it to your sidebar.

BucketMate now treats your MinIO server like any other cloud bucket. Drag a folder into the window to upload objects, rename files inline, and preview media without reaching for the CLI.

6. Keep MinIO in sync with a cloud bucket

Hybrid backup is where MinIO shines. Mirroring lets you operate locally while keeping a canonical copy in cloud storage.

A. Prep cloud credentials

Create a second alias that points at your provider of choice. Replace the endpoint and credentials with the values for AWS S3, Cloudflare R2, Wasabi, or Backblaze B2.

mc alias set cloudbackup https://s3.amazonaws.com AKIA... wJalrXUtnFEMI...

Use environment variables or a password manager to store secrets when you move from demos to production.

B. Run one-time seeding

Push your existing offline folder into MinIO so both locations start with the same data.

mc mirror ~/Projects/offline-cache localminio/offline-projects --overwrite --watch

The --watch flag keeps the process running, so new files or edits propagate in near real-time.

C. Mirror to the cloud provider

Once your local bucket is up-to-date, mirror it to the remote alias.

mc mirror localminio/offline-projects cloudbackup/prod-backups --overwrite

Schedule the command with launchctl, cron, or a CI runner depending on how frequently you want to back up.

7. Generate tailor-made commands

Every team tweaks paths, aliases, and TLS preferences. Use the interactive planner below to produce commands that match your setup exactly, then copy them into your shell scripts or runbooks.

Endpoint
http://127.0.0.1:9000
Mirror direction
Generated commands
minio server --address :9000 --console-address :9001 ~/minio-data
mc alias set localminio http://127.0.0.1:9000 minioadmin minioadmin
mc mb localminio/offline-projects
mc mirror ~/Projects/offline-cache localminio/offline-projects --overwrite --watch
mc mirror localminio/offline-projects cloudbackup/prod-backups --overwrite

8. Automate checks and lifecycle policies

  • Health checks: Use mc admin info localminio inside a monitoring script to verify drive space and uptime. Pair it with a simple curl against the /minio/health/ready endpoint for readiness probes.
  • Lifecycle rules: Create bucket policies that expire build artifacts or move stale releases into Glacier or R2 object lifecycle equivalents.
  • Integrity scans: Schedule periodic mc diff localminio/offline-projects cloudbackup/prod-backups runs and alert on mismatches so you can react before gaps grow.

9. Troubleshooting tips for macOS

  • Port conflicts: If 9000 or 9001 are taken, adjust the ports in the server command and within BucketMate. The planner above regenerates commands instantly when you change the numbers.
  • Permissions: When storing data on external drives, grant Full Disk Access to the terminal and BucketMate so they can read and write without prompts.
  • Firewall prompts: Approve the first-run firewall dialog so incoming connections on the chosen port stay open. For TLS, add the certificate to the macOS Keychain and mark it as trusted.

10. Keep your hybrid stack organized

  • Label buckets clearly inside BucketMate so teammates know which connection is local versus cloud.
  • Use consistent prefixes (for example team-name/environment/data-type/) so lifecycle rules and sync filters stay predictable.
  • Export your BucketMate connections as encrypted backups to share with trusted teammates or to rebuild a machine quickly.

Next steps

You now have a local S3-compatible bucket on macOS, synced to the cloud, and visible inside BucketMate. Continue exploring hybrid storage patterns with the Cloudflare R2 setup guide or compare providers in the R2 vs S3 breakdown.

Have questions? Please contact us 👇

Contact Us