self-host

module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 13, 2021 License: GPL-3.0

README



“If you want something done, do it yourself.”
- A lot of people


GPLv3 License Go Report Card Aapije Juvuln Malgomaj

Self-host by NODA

Roll your own NODA API compatible server and host the data yourself.

Made in Sweden 🇸🇪 by skilled artisan software engineers.

The purpose of this project

To provide clients and potential clients with an alternative platform where they are responsible for hosting the API server and the data store.

Features

  • Small infrastructure.
    • The only dependency is on PostgreSQL.
  • Compiled binaries (Go).
  • Designed to scale with demand.
    • You can host domains on separate PostgreSQL machines.
    • You can scale the Self-host API to as many instances as you require.
    • The Program Manager and its Workers can be scaled as needed.
  • Can be hosted in your environment.
    • No requirement on any specific cloud solution.
  • It is Free software.
    • License is GPLv3.
    • The API specification is open, and you can implement it if you don't want to use the existing implementation.

Overview

A typical deployment scenario would look something like this;

Overview

  • One (or more) instances of the Self-host API server. This server provides the public REST API and is the only exposed surface from the internet.
  • One instance of the Program Manager. This server manages all programs and schedules them.
  • One (or more) instances of the Program Worker. This server accepts work from the Program Manager.
  • One (or more) DBMS to host all Self-host databases (Domains). PostgreSQL 12+ with one (or more) Self-host Domains.

The API server can accept client request from either the internet or from the intranet. The Domain databases backs all API server requests.

The Program Worker can execute requests to external services on the internet or internal services, for example, the API server.

An HTTP Proxy may be used in front of the API server depending on the deployment scenario.

Project structure

  • api:
    • aapije: REST API interface for the Self-host public facing API server.
    • juvuln: REST API interface for the internal API of the Program Manager.
    • malgomaj: REST API interface for the internal API of the Program Worker.
  • cmd:
    • selfctl: Self Control; self-host CLI program.
    • aapije: Aapije is the Self-host public facing API server.
    • juvuln: Juvuln is the Self-host Program Manager.
    • malgomaj: Malgomaj is the Self-host Program Worker.
  • docs: Documentation
  • internal:
    • services: Handlers for interfaces to the PostgreSQL backend.
    • errors: Custom errors.
  • middleware: Middleware used by HTTP Servers.
  • postgres:
    • migrations: Database schema.
    • queries: Database queries.

Five to fifteen-minute deployment

Skills required;

  • Good knowledge of Docker.
  • Some knowledge of PostgreSQL.
  • Some knowledge of GNU+Linux or Unix environments in general.

Hardware and software required;

  • Computer with Docker installed.

Five to fifteen-minute deployment

Documentation

♥ Like this project? Want to improve it but unsure where to begin? Check out the issue tracker.

Directories

Path Synopsis
api
aapije/rest
Package rest provides primitives to interact with the openapi HTTP API.
Package rest provides primitives to interact with the openapi HTTP API.
juvuln
Package juvuln provides primitives to interact with the openapi HTTP API.
Package juvuln provides primitives to interact with the openapi HTTP API.
malgomaj
Package malgomaj provides primitives to interact with the openapi HTTP API.
Package malgomaj provides primitives to interact with the openapi HTTP API.
cmd
internal
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL