/caddyplug

Experimental Caddy plugin manager using Go plugins

Primary LanguageGoApache License 2.0Apache-2.0

caddyplug

caddyplug is an experimental Caddy plugin manager using Go plugins.

Demonstration Video

Requirements

  • Go 1.8
  • Linux
  • Caddy with hook.pluginloader plugin. Installable with caddyplug install-caddy.

Install

go get github.com/abiosoft/caddyplug/caddyplug

Usage

  Usage:
    caddyplug <command> [plugins...]

  Commands:
    install       install plugins
    uninstall     uninstall plugins
    list          list plugins
    install-caddy install caddy
    package       get plugin package

Example

$ caddyplug install git linode
 ✓ git
 ✓ linode

Goal

Building

Current:

  • Edit source and add import line for plugin
  • Rebuild Caddy
  • Or select plugins and download on caddyserver.com/download
  • Repeat

Desired:

  • Install plugins

Docker

Current:

  • Search for Docker image with desired plugins
  • Give up and clone abiosoft/caddy (or similar) image
  • Modify plugins arg in Dockerfile
  • Worry about keeping track of upgrades to parent git/docker repo.

Desired:

Add plugins as required

FROM abiosoft/caddy:plugin # Hopefully this changes to 'FROM caddy'
RUN caddyplug install git hugo digitalocean

Caveats

  • Only works on Linux.
  • Due to limitations of Go plugins, Caddy and plugins must be built with same Go version. Installing Caddy with caddyplug is recommended to ensure this.
  • Not compatible with caddyserver.com/download yet. Requires CGO_ENABLED=1.
  • Large Docker images. Multi-stage builds may help.
  • Fetches master of plugin repositories.
  • go build --buildmode=plugin is slow. Stop building on-demand, maybe.
  • This is experimental and reliant on the stability of Go plugins.

Note

  • This is not an official Caddy product.