Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/enseadaio/enseada
A Cloud native multi-package registry
https://github.com/enseadaio/enseada
cloud couchdb docker maven npm oauth2 package registry rubygems
Last synced: 2 months ago
JSON representation
A Cloud native multi-package registry
- Host: GitHub
- URL: https://github.com/enseadaio/enseada
- Owner: enseadaio
- License: mpl-2.0
- Created: 2019-11-27T16:45:43.000Z (about 5 years ago)
- Default Branch: develop
- Last Pushed: 2023-01-07T20:57:50.000Z (about 2 years ago)
- Last Synced: 2024-08-01T12:21:07.262Z (5 months ago)
- Topics: cloud, couchdb, docker, maven, npm, oauth2, package, registry, rubygems
- Language: Rust
- Homepage: https://enseada.io
- Size: 250 MB
- Stars: 85
- Watchers: 3
- Forks: 10
- Open Issues: 45
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: CODEOWNERS
- Security: SECURITY.md
Awesome Lists containing this project
README
# Enseada
*A Cloud native multi-package registry*
[![version](https://img.shields.io/github/v/release/enseadaio/enseada?sort=semver)](https://github.com/enseadaio/enseada/releases/latest)
![build status](https://github.com/enseadaio/enseada/workflows/master/badge.svg)
[![Docker Repository on Quay](https://quay.io/repository/enseada/enseada/status "Docker Repository on Quay")](https://quay.io/repository/enseada/enseada)
[![license](https://img.shields.io/github/license/enseadaio/enseada)](./LICENSE)
[![Discord Badge](https://discordapp.com/api/guilds/667303788532465665/widget.png?style=shield)](https://discord.gg/A34Qt8A)![logo](./.github/logo-white.png)
>[!WARNING]
>Enseada is still under initial development. Some of the features and characteristics
>described in this document may still be missing.Enseada is a modern, fast and scalable package registry, designed from the ground up to run in elastic, container-based environments and to be highly available and distributed.
It leverages scalability by using natively distributed technologies.
Check out the [official documentation](https://docs.enseada.io) for a complete manual of operation.
## Features
- [Multiple package repositories](#supported-package-repositories)
- [Multiple storage backends](#supported-storage-providers)
- Strong authentication based on [OAuth 2.0](https://auth0.com/docs/protocols/oauth2) tokens
- Flexible ACL engine to manage user permissions
- Complete [management API](https://docs.enseada.io/developers/apis.html)
- CDN and caching friendlyThe registry itself is written in [Rust](https://rust-lang.org/), a fast, resource efficient and statically compiled programming language
built for safety and speed.[CouchDB](https://couchdb.apache.org/) is used as the primary datastore, containing information about
repositories, users and access control. CouchDB is a web-native database written in Erlang and based on web technologies
like HTTP and JSON.Enseada stores packages in distributed and fault-tolerant object storage services. See [Supported storage providers](#supported-storage-providers) for the
complete list.## Supported package repositories
Enseada is a multi-package registry, meaning it can support a large number of package
formats and registry APIs.At the moment, the following formats are supported:
- [Docker](https://docs.docker.com/registry/spec/api/)
- [Maven 2/3](https://maven.apache.org/guides/introduction/introduction-to-repositories.html)
- [NPM](https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md) (planned, coming soon)
- [RubyGems](https://rubygems.org) (planned, coming soon)
- [Rust crates](https://doc.rust-lang.org/cargo/reference/registries.html) (planned, coming soon)
- [Go module proxy](https://docs.gomods.io/intro/protocol/) (planned, coming soon)## Supported storage providers
The storage engine used by Enseada provides pluggable backends, allowing to easily support
multiple storage providers.
See the [configuration guide](https://docs.enseada.io/users/configuration.html) for how to setup the storage layer.At the moment, the following providers are supported:
- S3 compatible (AWS S3, Minio, DigitalOcean Spaces, Scaleway Object Storage, Ceph, etc)
## HTTPS and HTTP/2 support
Enseada has full support for strict HTTPS, enabling it is very simple.
Passing the environment value `ENSEADA_TLS=true` will turn on
HTTPS on the entire application (with [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) enabled). This will require two
additional environment variables.```.env
## The path to the key file
ENSEADA_TLS_KEY_PATH=nil## The path to the certificate file
ENSEADA_TLS_CERT_PATH=nil
```The private key must be either an RSA or PKCS8 key.
Both the certificate and the key must be in PEM format.When HTTPS is active, Enseada switches automatically to [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2) if supported
by the client.## Build
Enseada is built as a statically linked executable.
However, it needs a few native libraries to build the executable, in particular libclang and LLVM. On Debian
they can be installed with `apt install build-essential llvm-dev libclang-dev`. These libraries are not needed to run the executable.
You need a stable build of the Rust compiler and standard library to build the binary. You can install one
using [rustup](https://rustup.rs).Standard `cargo` commands work perfectly fine. For example, `cargo run` will compile and start the server.
Enseada is also packaged as a [Docker image](https://www.docker.com/r/enseada/enseada). Build one with `docker build -t myname/enseada:latest .`
## Web UI
Enseada comes with a management web UI. To build it from sources, NodeJS and Yarn are required.
Execute the following commands to build the static assets.
```bash
# Install all dependencies
yarn install# Build and recompile on change for development (all stylesheets, no minification)
yarn watch# Build for production (minimal stylesheets, minification, sourcemaps)
yarn build
```Enseada will pick them up on its own.
## Local Database
A local CouchDB instance can be started using the provided [docker-compose.yml](./docker-compose.yml) file.
Simply run `docker-compose up -d` to start it in background, it will be available on `http://localhost:5984` and will
persist data in a Docker volume.Upon first run, the database server is uninitialized. Please run the initialization setup for
single node deployment by visiting http://localhost:5984/_utils/#setup and following the instructions.## Local Minio Server
A local [Minio](https://minio.io) server can be started using the provided [docker-compose.yml](./docker-compose.yml) file.
Simply run `docker-compose up -d` to start it in background, it will be available on `http://localhost:9000` and will
persist data in a Docker volume.Upon first run no bucket is present. Create a new one and configure the name in the appropriate environment variable
in the Enseada configuration.## Security Policy
If you want to report a security vulnerability, please follow the steps which we have defined for you in our [security policy](https://github.com/enseadaio/enseada/security/policy).
## Chat
Need some help or want to have a chat? Join our [Discord server](https://discord.gg/A34Qt8A)!
![Discord Banner](https://discordapp.com/api/guilds/667303788532465665/widget.png?style=banner2)## License
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at https://mozilla.org/MPL/2.0/.