/gasper

Your Cloud in a Binary

Primary LanguageGoMIT LicenseMIT

Gasper

Your Cloud in a Binary

Build Status Docs Go Report Card License

Gasper is an intelligent Platform as a Service (PaaS) used for deploying and managing applications and databases in any cloud topology.

Contents

Overview

The Dilemma

Imagine you have a couple of Bare Metal Servers and/or Virtual Machines (collectively called nodes) at your disposal. Now you want to deploy a couple of applications/services to these nodes in such a manner so as to not put too much load on a single node.

Naive Approach

Your 1st option is to manually decide which application goes to which node, then use ssh/telnet to manually setup all of your applications in each node one by one.

A Wise Choice

But you are smarter than that, hence you go for the 2nd option which is Kubernetes. You setup Kubernetes in all of your nodes which forms a cluster, and now you can deploy your applications without worrying about load distribution. But Kubernetes requires a lot of configuration for each application(deployments, services, stateful-sets etc) not to mention pipelines for creating the corresponding docker image.

The Ultimatum

Here comes (🥁drumroll please 🥁) Gasper, your 3rd option!
Gasper builds and runs applications in docker containers directly from source code. You no longer need to create application specific docker images and build pipelines, let Gasper do the heavylifting for you 😊. Gasper requires minimal parameters for deploying an application, so minimal that you can count them on fingers in one hand 🤚. Same goes for Gasper provisioned databases. Gone are the days of hard labour (writing configurations).

Features

Fear not because the reduction in complexity doesn't imply the reduction in features. You can rest assured because Gasper has:-

  • Worker services for creating/managing databases and applications
  • Master service for:-
    • Checking the status of worker services
    • Intelligently distributing applications/databases among them
    • Transferring applications from one worker node to another in case of node failure
    • Removing dead worker nodes from the cloud
  • REST API interface for the entire ecosystem
  • Reverse-proxy service with HTTPS, HTTP/2, Websocket and gRPC support for accessing deployed applications
  • DNS service which automatically creates DNS entries for all applications which in turn are resolved inside containers
  • SSH service for providing ssh access directly to an application's docker container
  • Virtual terminal for interacting with your application's docker container from your browser
  • Dynamic addition/removal of nodes and services without configuration changes or restarts
  • Compatibility with Linux, Windows, MacOS, FreeBSD and OpenBSD
  • All of the above packaged with ❤️ in a single binary

Supported Languages

Gasper currently supports applications of the following types:-

  • Static web pages
  • PHP
  • Python 2
  • Python 3
  • Node.js
  • Golang
  • Ruby
  • Rust

It ain't much but it's honest work 🥳

Supported Databases

The following databases are supported by Gasper:-

  • MySQL
  • MongoDB
  • PostgreSQL
  • Redis

It ain't.... (complete the rest yourself)

Documentation

You can find the complete documentation of Gasper at https://gasper-docs.netlify.app/

Dependencies

The only thing you need for running Gasper is Docker. Here are the installation guides for:-

If you perhaps need a higher degree of control over your entire cloud then you may setup MongoDB and Redis separately within your infrastructure and make the necessary changes in the mongo and redis sections of config.toml.

Download

Assuming you have the dependencies installed, head over to Gasper's releases page and grab the latest binary according to your operating system and system architecture

Run the downloaded binary with the sample configuration file

$ ./gasper --conf ./config.toml

Development

You need to have Golang 1.13.x or higher installed along with the mentioned dependencies

Open your favourite terminal and perform the following tasks:-

  1. Cross-check your golang version.

    $ go version
    go version go1.13.5 darwin/amd64
  2. Clone this repository.

    $ git clone https://github.com/sdslabs/gasper
  3. Go inside the cloned directory and list available makefile commands.

    $ cd gasper && make help
    
    Gasper: Your cloud in a binary
    
    install   Install missing dependencies
    build     Build the project binary
    tools     Install development tools
    release   Build release binaries
    start     Start in development mode with hot-reload enabled
    clean     Clean build files
    fmt       Format entire codebase
    vet       Vet entire codebase
    lint      Check codebase for style mistakes
    test      Run tests
    help      Display this help
  4. Setup project configuration and make changes if required. The configuration file is well-documented so you won't have a hard time looking around.

    $ cp config.sample.toml config.toml
  5. Start the development server.

    $ make start

Contributing

If you'd like to contribute to this project, refer to the contributing documentation.

Meet the A-Team

Gasper Logo: Leshna Balara @leshnabalara

You can find the entire list of contributors here

Created with 💖 by SDSLabs

Contact

If you have a query regarding the product or just want to say hello then feel free to visit chat.sdslabs.co or drop a mail at contact@sdslabs.co.in