Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## 2.1.0 - 2026-07-18
- Added Craft CMS 5 compatibility updates while retaining Craft CMS 4 support.
- Updated dependency constraints to stable Craft CMS 4/5 and Craft Flysystem releases.
- Updated the filesystem implementation to use strict types, typed properties, and the current AWS SDK Guzzle handler when available.
- Added a Linode-aware S3 adapter that omits unsupported object ACL operations while preserving multipart uploads and MIME type detection.
- Added the missing Content-Disposition setting field to the filesystem settings UI.
- Improved Linode-specific setup guidance and endpoint examples in the control panel and README.
- Fixed the Craft 3 volume-to-filesystem migration schema-version lookup to use the plugin handle.

## 2.0.1 - 2022-08-10
- Fixed bug where a call was made to Fs::getSubFolder (Method was removed in 2.0.0)

Expand Down
81 changes: 56 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,96 @@

<h1 align="center">Linode Object Storage for Craft CMS</h1>

This plugin provides a [Linode Object Storage](https://www.linode.com/products/object-storage/) integration for [Craft CMS](https://craftcms.com/).
This plugin provides a [Linode Object Storage](https://www.linode.com/products/object-storage/) filesystem for [Craft CMS](https://craftcms.com/).

## Requirements

This plugin requires Craft CMS 4 or later.
- Craft CMS 4.0+ or 5.0+
- PHP 8.0.2+
- PHP 8.2+ when running Craft CMS 5

## Installation

You can install this plugin from the Plugin Store or with Composer.
Install the plugin from the Plugin Store, or with Composer:

#### From the Plugin Store
```bash
cd /path/to/my-craft-project
composer require mwikala/linode-s3
php craft plugin/install linode-s3
```

Go to the Plugin Store in your project’s Control Panel and search for “Linode Object Storage”. Then click on the “Install” button in its modal window.
The Composer package name is `mwikala/linode-s3` and the Craft plugin handle is `linode-s3`.

#### With Composer
## Setup

Open your terminal and run the following commands:
1. In Linode Cloud Manager, create an Object Storage bucket and an access key with access to that bucket.
2. In Craft, go to Settings → Filesystems and create a new filesystem.
3. Set **Filesystem Type** to **Linode Object Storage**.
4. Enter your bucket details, or use environment variables such as `$LINODE_S3_BUCKET`.
5. If files should be publicly accessible, enable **Files in this filesystem have public URLs** and set **Base URL** to the bucket URL or CDN/custom-domain URL.

```bash
# go to the project directory
cd /path/to/my-project.test
Linode bucket URLs usually look like this:

# tell Composer to load the plugin
composer require mwikala/linode-s3
```text
https://[bucket-name].[region].linodeobjects.com
```

# tell Craft to install the plugin
./craft plugin/install linode-s3
The plugin’s **API Endpoint** setting should be the same URL without the bucket name:

```text
https://[region].linodeobjects.com
```

## Setup
For example, a bucket URL of `https://assets.eu-central-1.linodeobjects.com` would use:

| Setting | Value |
| --- | --- |
| API Endpoint | `https://eu-central-1.linodeobjects.com` |
| Region | `eu-central-1` |
| Bucket | `assets` |
| Base URL | `https://assets.eu-central-1.linodeobjects.com` |

To create a new asset file system for your Amazon S3 bucket, go to Settings → Filesystems, create a new filesystem, and set the Filesystem Type setting to “Linode S3”.
If you set a **Subfolder**, don’t append it to the **Base URL**. Craft adds the subfolder automatically when generating asset URLs.

## Environment Variables

To allow you to setup different Buckets for different environments, you can set these handy environment variables in your `.env` and `.env.example` (so you don't forget them after pushing to source control):
You can keep credentials and environment-specific bucket details in your project’s `.env` file:

```env
# The Linode Object Storage Access Key with read/write access to Buckets
# Linode Object Storage access key with read/write access to the bucket
LINODE_S3_ACCESS_KEY=

# The Linode Object Storage Access Secret
# Linode Object Storage secret key
LINODE_S3_SECRET=

# THE URL endpoint for your Buckets
# API endpoint, e.g. https://eu-central-1.linodeobjects.com
LINODE_S3_ENDPOINT=

# The region your Object Storage bucket is in
# Region, e.g. eu-central-1
LINODE_S3_REGION=

# The name of your bucket
# Bucket name, e.g. assets
LINODE_S3_BUCKET=

# The URL of the bucket
# Public bucket, CDN, or custom-domain URL
LINODE_S3_BUCKET_URL=
```

Then use these values in the filesystem settings:

| Setting | Value |
| --- | --- |
| API Endpoint | `$LINODE_S3_ENDPOINT` |
| Region | `$LINODE_S3_REGION` |
| Bucket | `$LINODE_S3_BUCKET` |
| Access Key ID | `$LINODE_S3_ACCESS_KEY` |
| Secret Access Key | `$LINODE_S3_SECRET` |
| Base URL | `$LINODE_S3_BUCKET_URL` |

Do not commit real access keys or secrets to source control.

## License & Support

This plugin is released under the [MIT license](./LICENSE.md), meaning you can do whatever you please with it.
This plugin is released under the [MIT license](./LICENSE.md).

> If you experience any issues with the plugin then open an issue here and I'll try get it fixed/answered whenever I have some free time
If you experience any issues with the plugin, please open an issue on GitHub and Ill try to get it fixed or answered when I have some free time.
13 changes: 6 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
"name": "mwikala/linode-s3",
"description": "This plugin provides Linode Object Storage integration for Craft CMS",
"type": "craft-plugin",
"version": "2.0.2",
"keywords": [
"aws",
"assets",
Expand All @@ -26,13 +25,13 @@
"email": "hello@mwikala.co.uk",
"issues": "https://github.com/mwikala/linode-s3/issues?state=open",
"source": "https://github.com/mwikala/linode-s3",
"docs": "https://github.com/mwikala/linode-s3/blob/master/README.md",
"rss": "https://github.com/mwikala/linode-s3/commits/master.atom"
"docs": "https://github.com/mwikala/linode-s3/blob/main/README.md",
"rss": "https://github.com/mwikala/linode-s3/commits/main.atom"
},
"require": {
"php": "^8.0",
"craftcms/cms": "^4.0.0-beta.4 | ^5.0.0",
"craftcms/flysystem": "^1.0.0-beta.2 | ^2.0.0",
"php": "^8.0.2",
"craftcms/cms": "^4.0.0|^5.0.0",
"craftcms/flysystem": "^1.0.2|^2.0.1",
"league/flysystem-aws-s3-v3": "^3.0.0"
},
"autoload": {
Expand All @@ -44,7 +43,7 @@
"name": "Linode Object Storage",
"handle": "linode-s3",
"schemaVersion": "2.0.0",
"documentationUrl": "https://github.com/mwikala/linode-s3/blob/master/README.md"
"documentationUrl": "https://github.com/mwikala/linode-s3/blob/main/README.md"
},
"config": {
"allow-plugins": {
Expand Down
Loading