Programmable layer 7 proxy service built on GRPC and powered by Caddy
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

Radiant

Photo by Jakub Novacek on Pexels

Radiant

Radiant is a GRPC proxy service using Caddy.

Radiant uses a datastore to store server info. By default, there is a simple in-memory datastore. You can implement whatever you want to integrate with external systems.

Building

Uses dep for dependencies.

  • make

To just build binaries:

  • make binaries

Usage

To start the server, run:

$> radiant

Or via code:

// create config
cfg := &radiant.Config{
	GRPCAddr:  "unix:///run/radiant.sock",
	HTTPPort:  80,
	HTTPSPort: 443,
	Debug:     true,
}
// instantiate a datastore
memDs := memory.NewMemory()

// create the server
srv, _ := server.NewServer(cfg, memDs)

// run the server
_ = srv.Run()

This will start both the proxy and GRPC servers.

There is a Go client available to assist in usage:

client, _ := radiant.NewClient("unix:///run/radiant.sock")

timeout := time.Second * 30
upstreams := []string{
    "http://1.2.3.4",
    "http://5.6.7.8",
}
opts := []radiant.AddOpts{
    radiant.WithUpstreams(upstreams...),
    radiant.WithTimeouts(timeout),
    radiant.WithTLS,
}

// add the server
_ = client.AddServer(host, opts...)

// reload the proxy to take effect
_ = client.Reload()

// remove the server
_ = client.RemoveServer(host)

// reload to take effect
_ = client.Reload()

It is safe to reload as often as you wish. There is zero downtime for the reload operation.

There is also a CLI that can be used directly or as reference.