caddy

package module
v0.0.0-...-9be1880 Latest Latest
Warning

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

Go to latest
Published: Apr 21, 2024 License: AGPL-3.0 Imports: 11 Imported by: 0

README

Caddy Sablier Plugin

Build the custom Caddy image with Sablier middleware in it

In order to use the custom plugin for Caddy, you need to bundle it with Caddy. Here I'll show you two options with Docker.

By using the provided Dockerfile
docker build https://github.com/acouvreur/sablier.git#v1.6.1:plugins/caddy 
  --build-arg=CADDY_VERSION=2.6.4
  -t caddy:2.6.4-with-sablier

Note: You can change main for any other branch (such as beta, or tags v1.6.1)

By updating your Caddy Dockerfile
ARG CADDY_VERSION=2.6.4
FROM caddy:${CADDY_VERSION}-builder AS builder

ADD https://github.com/acouvreur/sablier.git#v1.6.1 /sablier

RUN xcaddy build \
    --with github.com/acouvreur/sablier/plugins/caddy=/sablier/plugins/caddy

FROM caddy:${CADDY_VERSION}

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

Configuration

You can have the following configuration:

:80 {
	route /my/route {
    sablier [<sablierURL>=http://sablier:10000] {
			[names container1,container2,...]
			[group mygroup]
			[session_duration 30m]
			dynamic {
				[display_name This is my display name]
				[show_details yes|true|on]
				[theme hacker-terminal]
				[refresh_frequency 2s]
			}
			blocking {
				[timeout 1m]
			}
		}
    reverse_proxy myservice:port
  }
}
Exemple with a minimal configuration

Almost all options are optional and you can setup very simple rules to use the server default values.

:80 {
	route /my/route {
    sablier {
			group mygroup
			dynamic
		}
    reverse_proxy myservice:port
  }
}

Running end to end tests

  1. Build local sablier docker build -t caddy:local .
  2. Build local caddy docker build -t acouvreur/sablier:local ../..
  3. Run test cd e2e/docker && bash ./run.sh

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BlockingConfiguration

type BlockingConfiguration struct {
	Timeout *time.Duration
}

type Config

type Config struct {
	SablierURL      string
	Names           []string
	Group           string
	SessionDuration *time.Duration
	Dynamic         *DynamicConfiguration
	Blocking        *BlockingConfiguration
}

func CreateConfig

func CreateConfig() *Config

func (*Config) BuildRequest

func (c *Config) BuildRequest() (*http.Request, error)

func (*Config) UnmarshalCaddyfile

func (c *Config) UnmarshalCaddyfile(d *caddyfile.Dispenser) error

UnmarshalCaddyfile implements caddyfile.Unmarshaler. Syntax:

sablier [<sablierURL>] {
	[names container1,container2,...]
	[group mygroup]
	[session_duration 30m]
	dynamic {
		[display_name This is my display name]
		[show_details yes|true|on]
		[theme hacker-terminal]
		[refresh_frequency 2s]
	}
	blocking {
		[timeout 1m]
	}
}

type DynamicConfiguration

type DynamicConfiguration struct {
	DisplayName      string
	ShowDetails      *bool
	Theme            string
	RefreshFrequency *time.Duration
}

type SablierMiddleware

type SablierMiddleware struct {
	Config Config
	// contains filtered or unexported fields
}

func (SablierMiddleware) CaddyModule

func (SablierMiddleware) CaddyModule() caddy.ModuleInfo

CaddyModule returns the Caddy module information.

func (*SablierMiddleware) Provision

func (m *SablierMiddleware) Provision(ctx caddy.Context) error

Provision implements caddy.Provisioner.

func (SablierMiddleware) ServeHTTP

func (sm SablierMiddleware) ServeHTTP(rw http.ResponseWriter, req *http.Request, next caddyhttp.Handler) error

ServeHTTP implements caddyhttp.MiddlewareHandler.

Jump to

Keyboard shortcuts

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