PHPackages                             dulce/upcloud - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. dulce/upcloud

ActiveCraft-plugin[File &amp; Storage](/categories/file-storage)

dulce/upcloud
=============

UpCloud Managed Object Storage integration for Craft CMS

v1.0.3(1mo ago)015[1 issues](https://github.com/mauriciodulce/craft-upcloud/issues)[1 PRs](https://github.com/mauriciodulce/craft-upcloud/pulls)MITPHPPHP ^8.1.0CI failing

Since Feb 3Pushed 1mo agoCompare

[ Source](https://github.com/mauriciodulce/craft-upcloud)[ Packagist](https://packagist.org/packages/dulce/upcloud)[ RSS](/packages/dulce-upcloud/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (4)Dependencies (12)Versions (13)Used By (0)

UpCloud Object Storage for Craft CMS
====================================

[](#upcloud-object-storage-for-craft-cms)

This plugin provides [UpCloud Managed Object Storage](https://upcloud.com/products/object-storage/) integration for [Craft CMS](https://craftcms.com/).

**Note:** This is a fork of the [craftcms/aws-s3](https://github.com/craftcms/aws-s3) plugin, specifically adapted for UpCloud Object Storage.

Requirements
------------

[](#requirements)

This plugin requires Craft CMS 4.0.0+ or 5.0.0+.

Installation
------------

[](#installation)

You can install this plugin with Composer.

### With Composer

[](#with-composer)

Open your terminal and run the following commands:

```
# go to the project directory
cd /path/to/my-project.test

# tell Composer to load the plugin
composer require dulce/upcloud

# tell Craft to install the plugin
./craft plugin/install upcloud
```

Setup
-----

[](#setup)

To create a new UpCloud Object Storage filesystem to use with your volumes, visit **Settings** → **Filesystems**, and press **New filesystem**. Select "UpCloud Object Storage" for the **Filesystem Type** setting and configure as needed.

### Getting Your UpCloud Credentials

[](#getting-your-upcloud-credentials)

1. Log in to your [UpCloud Control Panel](https://hub.upcloud.com/)
2. Navigate to **Object Storage** in the sidebar
3. Create a new Object Storage instance or select an existing one
4. Note your **Endpoint URL** (e.g., `https://abc123.upcloudobjects.com`)
5. Create a user for your storage instance
6. Generate **Access Keys** for that user
7. Save the **Access Key ID** and **Secret Access Key** (the secret is only shown once!)

### Configuration Fields

[](#configuration-fields)

- **UpCloud Endpoint** (required): Your UpCloud Object Storage endpoint URL

    - Example: `https://abc123.upcloudobjects.com`
    - You can find this in your UpCloud Control Panel under your Object Storage instance
- **Access Key ID** (required): Your UpCloud Object Storage access key
- **Secret Access Key** (required): Your UpCloud Object Storage secret key
- **Bucket**: Select from available buckets or enter manually

    - Use the "Refresh" button to load buckets from your UpCloud account
    - Or choose "Manual" to enter bucket name directly
- **Subfolder** (optional): Specify a subfolder within the bucket to use as the filesystem root
- **Region**: Usually `us-east-1` (UpCloud uses this for S3 API compatibility)
- **Make Uploads Public** (optional): When enabled, uploaded files will have public-read ACL

    - Turn OFF for private files (recommended for sensitive data like medical records)
    - Required permission: `s3:PutObjectAcl` in your bucket policy

> 💡 **Tip:** All configuration values support environment variables. See [Environmental Configuration](https://craftcms.com/docs/4.x/config/#environmental-configuration) in the Craft docs to learn more.

Private Files &amp; Signed URLs
-------------------------------

[](#private-files--signed-urls)

For sensitive files (medical records, documents, etc.), you should:

1. **Disable "Make Uploads Public"** in your filesystem settings
2. **Add required permissions** to your UpCloud bucket policy:

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket-name"
      ],
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket-name/*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

3. **Use signed URLs in your templates** for temporary access:

```
{# Display PDF inline with signed URL (expires in ~1 hour) #}

{# Or open in new tab #}

  View Document

{# Download with custom filename #}

  Download Record

```

Signed URLs automatically expire for security. Users can access the file during the expiration window without making it permanently public.

### Environment Variables (.env)

[](#environment-variables-env)

```
UPCLOUD_ENDPOINT="https://abc123.upcloudobjects.com"
UPCLOUD_ACCESS_KEY="your-access-key-id"
UPCLOUD_SECRET_KEY="your-secret-access-key"
UPCLOUD_BUCKET="your-bucket-name"
```

Then in your filesystem settings (Settings &gt; Filesystems):

- **Endpoint**: `$UPCLOUD_ENDPOINT`
- **Access Key ID**: `$UPCLOUD_ACCESS_KEY`
- **Secret Access Key**: `$UPCLOUD_SECRET_KEY`
- **Bucket**: `$UPCLOUD_BUCKET`
- **Region**: Leave as `us-east-1` (used for S3 API compatibility, actual region doesn't matter for UpCloud)

UpCloud Object Storage Features
-------------------------------

[](#upcloud-object-storage-features)

UpCloud Managed Object Storage is fully S3-compatible and supports:

- ✅ Standard bucket operations (create, delete, list)
- ✅ Object operations (upload, download, delete, copy)
- ✅ Multipart uploads for large files
- ✅ Access Control Lists (ACLs)
- ✅ Bucket policies
- ✅ Object versioning
- ✅ Lifecycle management
- ✅ CORS configuration
- ✅ Presigned URLs (signed URLs with expiration)
- ✅ Path-style and virtual-hosted-style bucket URLs

### Available Regions

[](#available-regions)

UpCloud Object Storage is available in the following regions:

RegionPrimary ZoneAccessible Zones (via SDN private networks)`apac-1``sg-sin1`au-syd1, sg-sin1`europe-1``fi-hel2`de-fra1, dk-cph1, es-mad1, fi-hel1, fi-hel2, nl-ams1, no-svg1, pl-waw1, se-sto1, uk-lon1`europe-2``de-fra1`de-fra1, dk-cph1, es-mad1, fi-hel1, fi-hel2, nl-ams1, no-svg1, pl-waw1, se-sto1, uk-lon1`europe-3``se-sto1`de-fra1, dk-cph1, es-mad1, fi-hel1, fi-hel2, nl-ams1, no-svg1, pl-waw1, se-sto1, uk-lon1`us-1``us-chi1`us-chi1, us-nyc1, us-sjo1> **Note:** For the plugin configuration, use `us-east-1` as the region value for S3 API compatibility. The actual UpCloud region is determined by your Object Storage instance endpoint.

Differences from AWS S3
-----------------------

[](#differences-from-aws-s3)

This plugin is specifically designed for UpCloud and has the following differences from the AWS S3 plugin:

- ✅ **Endpoint Required**: You must specify your UpCloud endpoint
- ✅ **Simplified Configuration**: No CloudFront or AWS-specific features
- ❌ **No CloudFront**: UpCloud doesn't use CloudFront for CDN
- ❌ **No Rekognition**: Automatic focal point detection is not available
- ❌ **No IAM Roles**: UpCloud uses access keys for authentication

Troubleshooting
---------------

[](#troubleshooting)

### Buckets not loading

[](#buckets-not-loading)

Make sure you:

1. Have entered the correct endpoint URL (including `https://`)
2. Have entered valid access key credentials
3. Have created at least one bucket in your UpCloud Object Storage instance
4. The user has permission to list buckets

### Upload errors

[](#upload-errors)

Check that:

1. The bucket name is correct
2. The access key has write permissions
3. The bucket exists in your UpCloud Object Storage instance
4. Your endpoint URL is correct

### URL generation issues

[](#url-generation-issues)

UpCloud supports both URL formats:

- **Path-style** (used by this plugin): `https://endpoint.com/bucket/object`
- **Virtual-hosted-style**: `https://bucket.endpoint.com/object`

Make sure your Base URL is configured correctly in the filesystem settings.

Resources
---------

[](#resources)

- [UpCloud Object Storage Documentation](https://upcloud.com/docs/products/managed-object-storage/)
- [UpCloud S3 Compatibility](https://upcloud.com/docs/products/managed-object-storage/s3-standard-compatibility/)
- [Getting Started with UpCloud Object Storage](https://upcloud.com/docs/guides/get-started-managed-object-storage/)
- [Craft CMS Filesystem Documentation](https://craftcms.com/docs/4.x/assets.html)

Get Started with UpCloud
------------------------

[](#get-started-with-upcloud)

Don't have an UpCloud account yet? [Sign up here](https://signup.upcloud.com/?promo=5H4SQS) and get **$25 in free credits** to try UpCloud Object Storage and other cloud services.

License
-------

[](#license)

This plugin is licensed under the MIT License. See [LICENSE.md](LICENSE.md) for details.

Credits
-------

[](#credits)

- **Author**: Mauricio Dulce
- **Based on**: [craftcms/aws-s3](https://github.com/craftcms/aws-s3) by Pixel &amp; Tonic
- **UpCloud**: [upcloud.com](https://upcloud.com)

Support
-------

[](#support)

For issues and questions about this plugin, please open an issue on [GitHub](https://github.com/mauriciodulce/craft-upcloud/issues).

**New to UpCloud?** [Sign up here](https://signup.upcloud.com/?promo=5H4SQS) and get **$25 in free credits** to get started with UpCloud Object Storage!

For UpCloud Object Storage support, contact [UpCloud Support](https://upcloud.com/support/).

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance88

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 90% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~15 days

Total

4

Last Release

58d ago

PHP version history (2 changes)v1.0.0PHP ^8.0.2

v1.0.2PHP ^8.1.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/b6866712c6027ac4d3d60a3382ce7cc7e6b8a54f43ac603bbc09064159ff29b8?d=identicon)[dulce](/maintainers/dulce)

---

Top Contributors

[![mauriciodulce](https://avatars.githubusercontent.com/u/3843517?v=4)](https://github.com/mauriciodulce "mauriciodulce (27 commits)")[![renovate[bot]](https://avatars.githubusercontent.com/in/2740?v=4)](https://github.com/renovate[bot] "renovate[bot] (3 commits)")

---

Tags

Flysystems3cmsyii2craftcmsobject-storageUpCloud

### Embed Badge

![Health badge](/badges/dulce-upcloud/health.svg)

```
[![Health](https://phpackages.com/badges/dulce-upcloud/health.svg)](https://phpackages.com/packages/dulce-upcloud)
```

###  Alternatives

[craftcms/aws-s3

Amazon S3 integration for Craft CMS

631.5M26](/packages/craftcms-aws-s3)[vaersaagod/dospaces

DigitalOcean Spaces integration for Craft CMS

36100.3k1](/packages/vaersaagod-dospaces)[craftcms/google-cloud

Google Cloud Storage integration for Craft CMS

11100.7k1](/packages/craftcms-google-cloud)[servd/craft-asset-storage

Servd Asset Storage and Helpers integration for Craft CMS

1180.7k7](/packages/servd-craft-asset-storage)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
