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.
{
"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
- go 1.16
isolate
requires elevate privileges to run.- A linux operating system (Darwin/Windows not tested)
make build
The binary multi-dev
should be available in the working directory
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.
- 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