Storage
WhatsMine stores uploaded files — contact avatars, message media, campaign assets, template media and invoice PDFs. By default these live on the server's local disk, but for production (and especially multi-server setups) you should use cloud storage.
Admin location: Admin → Integrations
Supported backends
| Backend | Credentials |
|---|---|
| Local disk | None — uses the server filesystem. |
| Amazon S3 | Key, Secret, Region, Bucket (+ optional URL & path prefix). |
| DigitalOcean Spaces | Key, Secret, Region, Bucket, Endpoint (+ optional URL). |
| Wasabi | Key, Secret, Region, Bucket, Endpoint (+ optional URL). |
Only one backend is active (the default) at a time.
Why use cloud storage?
- Persistence — files survive deploys and server rebuilds (local files can be lost on ephemeral hosting).
- Scale — multiple app servers share the same files.
- Performance — serve media from a CDN-backed bucket.
- Backups — object storage is durable and easy to back up.
Setting it up
Via the admin panel
- Go to Admin → Integrations and open your storage provider (S3, Spaces or Wasabi).
- Enter the credentials (key, secret, region, bucket, endpoint).
- Test the connection.
- Set as default.
📸 Screenshot: The storage integration form.
Via .env
Alternatively, set the filesystem in .env:
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket
# For S3-compatible services (Spaces/Wasabi):
AWS_ENDPOINT=https://your-endpoint
AWS_USE_PATH_STYLE_ENDPOINT=true
Provider notes
- Amazon S3 — create a bucket and an IAM user with
s3:PutObject,s3:GetObject,s3:DeleteObjecton it. - DigitalOcean Spaces — create a Space and Spaces access keys; use the regional endpoint (e.g.
https://nyc3.digitaloceanspaces.com). - Wasabi — create a bucket and access keys; use the matching regional endpoint.
Make uploads public-readable where appropriate
Media that needs to display in chats and on the marketing site should be publicly readable (or served via signed URLs). Configure your bucket's access policy accordingly.
Invoices & backups
Invoice PDFs are written to storage too — make sure your storage is persistent so download links keep working. Database backups can also target a storage disk:
php artisan db:backup --disk=s3
➡️ That completes the Integrations section. Next: the Developer Reference.