Traefik also offers a developer mode that can be used for temporary testing of plugins not hosted on GitHub. To use a plugin in local mode, the Traefik static configuration must define the module name (as is usual for Go packages) and a path to a Go workspace, which can be the local GOPATH or any directory.
The plugins must be placed in ./plugins-local
directory,
which should be in the working directory of the process running the Traefik binary.
The source code of the plugin should be organized as follows:
├── docker-compose.yml
└── plugins-local
└── src
└── github.com
└── ghnexpress
└── traefik-ratelimit
├── main.go
├── vendor
├── go.mod
└── ...
# docker-compose.ymlversion: "3.6"services:memcached:image: launcher.gcr.io/google/memcached1container_name: some-memcachedports:- "11211:11211"networks:- traefik-networktraefik:image: traefik:v2.9.6container_name: traefikdepends_on:- memcachedcommand:# - --log.level=DEBUG- --log.level=INFO- --api- --api.dashboard- --api.insecure=true- --providers.docker=true- --entrypoints.web.address=:80- --experimental.localPlugins.ratelimit.moduleName=github.com/ghnexpress/traefik-ratelimitports:- "80:80"- "8080:8080"networks:- traefik-networkvolumes:- /var/run/docker.sock:/var/run/docker.sock- ./plugins-local/src/github.com/ghnexpress/traefik-ratelimit:/plugins-local/src/github.com/ghnexpress/traefik-ratelimitlabels:- traefik.http.middlewares.rate-limit.plugin.ratelimit.memcachedConfig.address=some-memcached:11211- traefik.http.middlewares.rate-limit.plugin.ratelimit.windowTime=100- traefik.http.middlewares.rate-limit.plugin.ratelimit.maxRequestInWindow=10whoami:image: traefik/whoamicontainer_name: simple-servicedepends_on:- traefiknetworks:- traefik-networklabels:- traefik.enable=true- traefik.http.routers.whoami.rule=Host(`localhost`)- traefik.http.routers.whoami.entrypoints=web- traefik.http.routers.whoami.middlewares=rate-limitnetworks:traefik-network:driver: bridge