Skip to content

Storage providers

Fileee works with any storage that speaks the S3 API. Connecting one takes the same four steps everywhere:

  1. Create a private bucket.
  2. Create a credential limited to that bucket.
  3. In Settings > Storages, add a storage and pick your provider.
  4. Run the Connection and Browser access (CORS) checks.

These pages cover the provider-specific parts:

Fileee also has presets for Hetzner, Scaleway, Akamai (Linode), Vultr and OVHcloud. For those, follow the steps on this page and take the endpoint format from Connect a bucket.

Provider consoles change often. If a label here doesn’t match what you see, the linked provider docs have the current steps.

Field What to enter
Provider Your provider. This fills in what it can
Name Anything you like. It appears in the sidebar
Endpoint The provider’s S3 URL, without the bucket name. Not shown for AWS S3
Bucket The bucket’s name
Region The bucket’s region
Prefix Optional. Fileee only touches objects under this path
Access key ID From the credential you created
Secret access key From the credential you created. It’s encrypted before it’s stored
Path-style URLs On for MinIO and some self-hosted servers. Off for hosted providers

Uploads, downloads and previews go directly between the browser and the bucket, so the bucket has to allow your Fileee address through a CORS rule. In Check connection, the Browser access (CORS) section offers three buttons:

  • Apply for me adds the rule, keeping any others on the bucket. The credential has to be allowed to change bucket settings, which a key limited to objects usually isn’t.
  • How to set up shows the rule and an IAM policy, with your address and bucket filled in.
  • Test tries a real upload from your browser. It’s the check that counts.

The rule looks like this, with your APP_URL as the origin:

[
{
"AllowedOrigins": ["https://files.example.com"],
"AllowedMethods": ["GET", "PUT", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag", "Accept-Ranges", "Content-Length", "Content-Range"],
"MaxAgeSeconds": 3600
}
]

If you change the address later, update the rule too.

If your provider’s console can’t take the whole rule and Apply for me is refused, the AWS CLI works with most providers. Save this as cors.json:

{
"CORSRules": [
{
"AllowedOrigins": ["https://files.example.com"],
"AllowedMethods": ["GET", "PUT", "HEAD"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag", "Accept-Ranges", "Content-Length", "Content-Range"],
"MaxAgeSeconds": 3600
}
]
}

Then run this with a credential that can change bucket settings. Fileee doesn’t need to keep that credential.

Terminal window
aws s3api put-bucket-cors --endpoint-url https://YOUR-ENDPOINT --bucket YOUR-BUCKET --cors-configuration file://cors.json

These are optional. The CDN must be able to reach only the public location, so most providers need a separate public bucket. See Public CDN links. Fileee’s safety check is what decides whether a setup is allowed.