Skip to content

Latest commit

 

History

History
71 lines (54 loc) · 1.93 KB

README.md

File metadata and controls

71 lines (54 loc) · 1.93 KB

isolate

About

isolate is a declarative application server / reverse proxy that includes GSL (generic language support) out of the box. Similar to containers, isolate will create network namespaces for each application defined in an isolate config file which will isolate a given program to it's own network namespace with a dedicated local ip address + netlinks.

After the network namespaces are set up, the applications you configure will be launched and routed via echo's reverse proxy features.

When isolate terminates, it will clean up any lingering network namespaces / links / child processes.

This was a sunday project so it's far from production-ready.

Configuration Example

{
    "applications": [
        {
            "name": "deliveries",
            "executable": "/apps/express/deliveries",
            "port": "80",
            "route": "/deliveries",
            "scheme": "http"
        },
        {
            "name": "dashboard",
            "executable": "/apps/express/run",
            "port": "80",
            "route": "/*dashboard",
            "scheme": "http"
        }
    ]
}

You can also view an example config at isolate config file

Requirements

  • go 1.16
  • isolate requires elevate privileges to run.
  • A linux operating system (Darwin/Windows not tested)

Build

make build

The binary multi-dev should be available in the working directory

Usage

CONFIG="/var/apps/isolate-server/isolate-config.json"
./isolate $CONFIG

If $CONFIG is not specified, isolate will assume a file isolate-config.json is present in the program's directory and try to use that.

Future enhancements

  • Add NAT to provide external internet connectivity for all isolated applications / network namespaces !important
  • Unit tests
  • TLS support
  • Add port config to isolate to customize what port the server listens on