Storage Providers
Database backups and time capsules require an S3-compatible storage provider. WPHammer stores provider credentials per team as StorageProviderCredential records, linked to the corresponding Forge storage provider.
Supported providers
WPHammer supports six storage provider types:
| Provider | Notes |
|---|---|
| Amazon S3 | Standard AWS S3 buckets |
| DigitalOcean Spaces | Endpoint auto-generated from region if not set |
| Hetzner Object Storage | Hetzner's S3-compatible storage |
| OVH Object Storage | OVH's S3-compatible offering |
| Scaleway Object Storage | Scaleway's S3-compatible storage |
| Custom | Any S3-compatible endpoint |
Credential fields
Each StorageProviderCredential stores:
| Field | Description |
|---|---|
forge_storage_provider_id |
Links to the Forge storage provider |
provider |
Provider type (s3, spaces, hetzner, ovh, scaleway, custom) |
region |
Storage region (e.g., us-east-1, nyc3) |
bucket |
Bucket name |
directory |
Optional base directory within the bucket |
endpoint |
Custom endpoint URL (auto-generated for DigitalOcean Spaces) |
access_key |
S3 access key (encrypted) |
secret_key |
S3 secret key (encrypted) |
Credentials are unique per team and Forge provider ID — each team can have one credential per Forge storage provider.
DigitalOcean Spaces endpoint
For DigitalOcean Spaces, the endpoint is automatically resolved from the region using the getResolvedEndpointAttribute accessor. If a region like nyc3 is configured without an explicit endpoint, the model generates https://nyc3.digitaloceanspaces.com. You can still set a custom endpoint to override this behavior.
Managing providers
Storage providers are configured from the storage settings page (teams/settings/storage). Only users with the canManageTeam permission (Owner and Admin) can manage storage providers, as enforced by the TeamPolicy@manageStorageProviders method.
From the settings page, you can create, edit, and delete storage provider credentials for any supported provider type.
Backup readiness
A server's isBackupReady() method checks both that a forge_storage_provider_id is set on the server and that matching StorageProviderCredential exists for the team. Backup operations will not start unless both conditions are met.
Snapshots are the exception — they store data locally on the server and do not require a storage provider.
Related
- Backup Overview — how storage providers fit into the backup system
- Time Capsules — off-site archives that use storage providers
- Forge API Configuration — Forge API setup
- Roles & Permissions — who can manage storage settings