cloudserver is a free, open source data warehousing & processing project written in JavaScript and released under Apache-2.0. It has 1,950 GitHub stars, 260 forks and 113 open issues, and was last pushed 13 hours ago. On this registry it ranks #12 of 16 tracked projects in Data Warehousing & Processing, with 5 head-to-head comparisons available.

What is cloudserver?

Zenko CloudServer is an open-source, Apache-2.0-licensed Node.js object storage server that presents the Amazon S3 protocol on the front end and writes to multiple back ends, including Azure and Google, and it is built for developers who need S3-compatible storage running locally, on-premise, or in a public cloud.

What it is

CloudServer, formerly known as S3 Server, is an Amazon S3-compatible object storage server written in JavaScript for Node.js, and it is part of Zenko, Scality's open-source multi-cloud data controller. It exposes a single AWS S3 API interface on the front end while directing data to backends that may be on-premise or in the public cloud. The project is Apache-2.0 licensed, sits in the Data & Analytics / Data Warehousing & Processing category of this registry, and shows roughly 1,950 stars, 260 forks, and 113 open issues. It runs as a server on port 8000, with ports 9990 and 9991 opened locally for the internal transfer of metadata and data respectively.

The problem it addresses is the gap between an application that expects the S3 API and a developer or operator who cannot or does not want to depend on AWS S3 itself. CloudServer lets an existing S3 client be pointed at a locally controlled endpoint, so code can be developed, tested, and run against S3 semantics without leaving the environment. It also acts as an abstraction layer over heterogeneous storage: Azure and Google are named backend targets, and a single S3 API can front storage that lives in different places. In the Node.js and Docker ecosystem where its users work, this replaces the practice of running continuous integration tests directly against the live AWS S3 service.

Key capabilities

  • An Amazon S3-compatible API served on port 8000, with ports 9990 and 9991 used internally for metadata and data transfer.
  • Selectable backends via the S3DATA environment variable: the default file backend, mem for an in-memory backend suited to testing without persistent storage, and multiple for multiple data backends.
  • Fanned-out object placement using the x-amz-meta-scal-location-constraint header on a PUT request, falling back to the bucket's location constraint and then to the endpoint of the PUT request.
  • Configurable storage locations through S3DATAPATH and S3METADATAPATH, with defaults written to the localMetadata and localData directories under ./S3.
  • Default development credentials of access key accessKey1 with secret key verySecretKey1.
  • A published Docker image, zenko/cloudserver, for containerised deployment.
  • Documented entry points yarn start and yarn run mem_backend, with reference documentation hosted at s3-server.readthedocs.io.

Who uses it and how

  • Developers who run CloudServer inside a continuous integration test environment to emulate the AWS S3 service locally rather than testing against the live service.
  • Application developers who use it as an abstraction layer while building object storage enabled applications on the go.
  • Teams that need one S3 API in front of both on-premise and public cloud storage, with Azure and Google among the supported backends.
  • Operators who deploy the zenko/cloudserver Docker image instead of building the Node.js source themselves.
  • Multi-cloud deployments that steer individual objects to chosen locations per PUT request using a location constraint header.

Getting started

Clone the repository and run yarn install --frozen-lockfile followed by yarn start after installing node.js 10.x and yarn v1.17.x, or deploy the zenko/cloudserver Docker image from Docker Hub. Documentation lives at s3-server.readthedocs.io.

How it compares

The facts provided name no paid products that CloudServer replaces and no peer open-source object storage servers, so it stands alone in this registry on that axis; the project it most directly relates to is AWS S3 itself, whose protocol it reimplements rather than competes with commercially. Its licence is Apache-2.0 and the source is available for self-hosting, while the parent project, Zenko, is described as Scality's open source multi-cloud data controller.

When to use it — and when not to

A self-hoster must supply and run a Node.js 10.x and yarn v1.17.x toolchain, install g++ if the diskUsage module fails to build, and manage the data and metadata directories, including absolute paths when the defaults are moved. Anyone without that operational capacity, or who needs a fully managed service rather than a server they run themselves, should look elsewhere. The README is deliberately brief and defers most configuration detail to the external documentation site, and 113 open issues indicate a backlog worth reviewing before committing to a deployment.

project readme (upstream, from github) — read inline

Zenko CloudServer

Zenko CloudServer logo

Docker Pulls Docker Pulls

Overview

CloudServer (formerly S3 Server) is an open-source Amazon S3-compatible object storage server that is part of Zenko, Scality’s Open Source Multi-Cloud Data Controller.

CloudServer provides a single AWS S3 API interface to access multiple backend data storage both on-premise or public in the cloud.

CloudServer is useful for Developers, either to run as part of a continous integration test environment to emulate the AWS S3 service locally or as an abstraction layer to develop object storage enabled application on the go.

Learn more at www.zenko.io/cloudserver

May I offer you some lovely documentation?

Docker

Run your Zenko CloudServer with Docker

Contributing

In order to contribute, please follow the Contributing Guidelines.

Installation

Dependencies

Building and running the Zenko CloudServer requires node.js 10.x and yarn v1.17.x . Up-to-date versions can be found at Nodesource.

Clone source code

git clone https://github.com/scality/cloudserver.git

Install js dependencies

Go to the ./cloudserver folder,

yarn install --frozen-lockfile

If you get an error regarding installation of the diskUsage module, please install g++.

If you get an error regarding level-down bindings, try clearing your yarn cache:

yarn cache clean
Install typescript

To use CloudServer, subaclient is needed. This package need typescript to be compiled.

npm install -g typescript

Run it with a file backend

yarn start

This starts a Zenko CloudServer on port 8000. Two additional ports 9990 and 9991 are also open locally for internal transfer of metadata and data, respectively.

The default access key is accessKey1 with a secret key of verySecretKey1.

By default the metadata files will be saved in the localMetadata directory and the data files will be saved in the localData directory within the ./S3 directory on your machine. These directories have been pre-created within the repository. If you would like to save the data or metadata in different locations of your choice, you must specify them with absolute paths. So, when starting the server:

mkdir -m 700 $(pwd)/myFavoriteDataPath
mkdir -m 700 $(pwd)/myFavoriteMetadataPath
export S3DATAPATH="$(pwd)/myFavoriteDataPath"
export S3METADATAPATH="$(pwd)/myFavoriteMetadataPath"
yarn start

Run it with a memory backend

If you want to run the Zenko CloudServer with an in-memory backend, you can do so by setting the S3DATA environment variable to memory. This is useful for testing purposes or when you don't need persistent storage.

export S3DATA=mem
yarn start

Run it with multiple data backends

export S3DATA='multiple'
yarn start

This starts a Zenko CloudServer on port 8000. The default access key is accessKey1 with a secret key of verySecretKey1.

With multiple backends, you have the ability to choose where each object will be saved by setting the following header with a locationConstraint on a PUT request:

'x-amz-meta-scal-location-constraint':'myLocationConstraint'

If no header is sent with a PUT object request, the location constraint of the bucket will determine where the data is saved. If the bucket has no location constraint, the endpoint of the PUT request will be used to determine location.

See the Configuration section in our documentation here to learn how to set location constraints.

Run it with an in-memory backend

yarn run mem_backend

This starts a Zenko CloudServer on port 8000. The default access key is accessKey1 with a secret key of verySecretKey1.

Run it with Vault user management

Note: Vault is proprietary and must be accessed separately.

export S3VAULT=vault
yarn start

This starts a Zenko CloudServer using Vault for user management.

Frequently asked questions

Is cloudserver free to use?

cloudserver is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does cloudserver do?

Zenko CloudServer, an open-source Node.js implementation of the Amazon S3 protocol on the front-end and backend storage capabilities to multiple clouds, includi

What is cloudserver written in?

cloudserver is primarily written in JavaScript. Its source is publicly available at https://github.com/scality/cloudserver, and it has 1,950 GitHub stars.