S3 Object Storage (Optional)
Offload tenant media uploads to S3-compatible cloud storage instead of storing them on your server's local disk.
When to Use S3
- Disk space: Your server has limited storage and tenants upload lots of media
- CDN delivery: Serve images/files from a global CDN for faster load times
- Scalability: Decouple storage from compute — scale independently
- Backups: Cloud storage providers handle redundancy and durability
Supported Providers
Any S3-compatible API works:
| Provider | Endpoint Example | Notes |
|---|---|---|
| Cloudflare R2 | https://ACCOUNT_ID.r2.cloudflarestorage.com | No egress fees. Region: auto |
| AWS S3 | https://s3.us-east-1.amazonaws.com | Most mature. Many regions. |
| DigitalOcean Spaces | https://nyc3.digitaloceanspaces.com | Simple pricing. Built-in CDN. |
| MinIO | https://minio.yourdomain.com | Self-hosted. Enable path-style. |
| Backblaze B2 | https://s3.us-west-002.backblazeb2.com | Low cost. S3-compatible API. |
Configuration
Navigate to Tenancy → Pro Settings → Object Storage (/wp-admin/admin.php?page=grabwp-tenancy-pro-settings).
- Set Storage Driver to S3
- Fill in:
| Field | Description | Example |
|---|---|---|
| S3 Endpoint URL | Full endpoint URL for your provider | https://ACCOUNT.r2.cloudflarestorage.com |
| Bucket Name | Name of the bucket you created | grabwp-uploads |
| Region | AWS region or auto for R2 | auto |
| Access Key ID | API key ID | |
| Secret Access Key | API secret (stored encrypted) | |
| CDN URL (optional) | Public URL prefix for serving files | https://cdn.yoursaas.com |
| Path-Style Endpoint | Enable for MinIO and some providers | Check if needed |
- Click Test Connection to verify credentials and bucket access
- Click Save Settings
Provider Setup Guides
Cloudflare R2
- Log in to Cloudflare dashboard
- Go to R2 Object Storage → Create Bucket
- Name it (e.g.,
grabwp-uploads) - Go to R2 → Manage R2 API Tokens → Create API token
- Set permissions: Object Read & Write
- Copy the Access Key ID and Secret Access Key
- Endpoint:
https://<ACCOUNT_ID>.r2.cloudflarestorage.com - Region:
auto
Cloudflare R2 docs: R2 documentation
AWS S3
- Create a bucket in the AWS S3 Console
- Create an IAM user with
AmazonS3FullAccesspolicy (or scoped to your bucket) - Generate Access Key under the IAM user's security credentials
- Use the regional endpoint for your bucket
AWS S3 docs: Getting started with S3
DigitalOcean Spaces
- Create a Space in DigitalOcean
- Go to API → Spaces Keys → Generate New Key
- Endpoint:
https://<REGION>.digitaloceanspaces.com
DO Spaces docs: Spaces documentation
Bulk Migration
After configuring S3, migrate existing tenant uploads:
- In Pro Settings → Object Storage, click Migrate All Tenants to S3
- Wait for the migration to complete — this uploads all local tenant files to S3
- Verify a few tenant sites to ensure images load correctly
To migrate back to local storage: click Migrate All Tenants to Local.
Note: Migration can take a while depending on the amount of data. The page shows progress and results.
CDN Configuration
If you set a CDN URL, files are served from that URL instead of using pre-signed S3 URLs.
For Cloudflare R2:
- Go to R2 → your bucket → Settings → Public Access
- Enable public access or add a custom domain
- Enter the public URL as CDN URL in Pro Settings
Without a CDN URL, files are served using time-limited pre-signed URLs (secure but slightly slower).
Next: WooCommerce Billing