Less3 is an S3-compatible object storage platform that you can run anywhere.
Core use cases for Less3:
v2.1.x
First things first - do you need help or have feedback? Please file an issue here.
Thanks to @iain-cyborn for helping make the platform better!
The binaries for Less3 can be created by compiling from source. Executing the binary will create a system configuration in the system.json
file along with the configuration database less3.db
.
The Server.DnsHostname
MUST be set to a hostname. You cannot use IP addresses (parsing will fail). Incoming HTTP requests must have a HOST header value that matches the value in Server.DnsHostname
. If it does not match, you will receive a 400/Bad Request
.
If you use *
, +
, or 0.0.0.0
for the Server.DnsHostname
, Less3 must be executed using administrative privileges (this is required by the underlying operating system).
To get started, clone Less3, build, publish, and run!
$ git clone https://github.com/jchristn/less3
$ cd less3
$ dotnet build -f netcoreapp2.2
$ dotnet publish -f netcoreapp2.2
$ cd less3/bin/debug/netcoreapp2.2/publish
$ dotnet less3.dll
Less3 was designed to be consumed using either the AWS SDK or direct RESTful integration in accordance with Amazon's official documentation (https://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html). Should you encounter a discrepancy between how Less3 operates and how AWS S3 operates, please file an issue.
I tested Less3 using the AWS SDK for C#, a live account on S3, CloudBerry Explorer for S3 (see https://www.cloudberrylab.com/explorer/windows/amazon-s3.aspx), and S3 Browser (see http://s3browser.com/). If you have or recommend other tools, please file an issue here and let me know!
Please refer to the compatibility matrix found in 'assets' for a full list of supported APIs and caveats.
The following APIs are supported with Less3:
Service APIs
Bucket APIs
Object APIs
There are several minor differences between how S3 and less3 handle certain aspects of API requests. However, these should be inconsequential from the perspective of the developer (for instance, version IDs are numbers internally within less3 rather than strings).
Should you find any incompatibilities or behavioral issues with the APIs listed above that are considered 'supported', please file an issue here along with details on the expected behavior. I've tried to mimic the behavior of S3 while building out the API logic. A link to the supporting documentation will also be helpful to aid me in righting the wrong :)
Less3 supports cases where having the bucket name as:
http://[hostname]/[bucket]/[key]
)http://[bucket].[hostname]/[key]
) To use path style URLs do not set Server.BaseDomain
. This is the default configuration.
To use virtual hosted URLs, you must:
Server.BaseDomain
- if your hostname is localhost
, set this value to .localhost
(prepend with a period)Server.DnsHostname
to *
[bucket].[hostname]
) are resolvable through DNS to your machinePlease refer to the 'wiki' for helpful notes including how to use the administrative APIs.
Less3 is built using a series of open-source packages, including:
Less3 is available in DockerHub. Refer to the Docker
directory for the compose.yaml
, system.json
, and less3.db
files that you will need. By default, the node will listen on TCP port 8000
and you can use the access key default
and secret key default
. Be sure to connect without SSL, and use path-style URLs.
Refer to CHANGELOG.md for details.