# Traefik Umami Feeder This plugin for enables [Traefik Reverse Proxy](https://traefik.io/traefik/) to feed [Umami Analytics](https://umami.is) with tracking events. It was created as an alternative to [traefik-umami-plugin](https://github.com/1cedsoda/traefik-umami-plugin) and inspired by idea of [Plausible Feeder Traefik Plugin](https://github.com/safing/plausiblefeeder). ## Features - [X] Super easy to setup, one middleware for all websites - [X] Server Side Tracking, no need to add JavaScript to your websites - [X] Fast and private analytics ## Installation To [add this plugin to traefik](https://plugins.traefik.io/install) reference this repository as a plugin in the static config. The version references a git tag. ```yaml experimental: plugins: umami-feeder: moduleName: github.com/astappiev/traefik-umami-feeder version: v1.0.0 # replace with latest version available ``` ```toml [experimental.plugins.umami-feeder] moduleName = "github.com/astappiev/traefik-umami-feeder" version = "v1.0.0" # replace with latest version available ``` With the plugin installed, you can configure a middleware in a dynamic configuration such as a `config.yml` or docker labels. ```yaml http: middlewares: my-umami-middleware: plugin: umami-feeder: umamiHost: "http://umami:3000" websites: "example.com": "d4617504-241c-4797-8eab-5939b367b3ad" ``` ```toml [http.middlewares] [http.middlewares.my-umami-middleware.plugin.umami-feeder] umamiHost = "umami:3000" [http.middlewares.my-umami-middleware.plugin.umami-feeder.websites] "example.com" = "d4617504-241c-4797-8eab-5939b367b3ad" ``` You have an option to give a list of domains to track (and their website IDs on Umami). \ Or, you can give a token and the list will be fetched from Umami. For this, you need either [retrieve the token yourself](https://umami.is/docs/api/authentication), or use username/password instead. After that, you need to add the middleware to a [router](https://doc.traefik.io/traefik/routing/routers/#middlewares_1). Remember to reference the correct [provider namespace](https://doc.traefik.io/traefik/providers/overview/#provider-namespace). E.g. as Docker labels: ```yaml - "traefik.http.routers.whoami.middlewares=my-umami-middleware@file" ``` Or, for all routers in a static configuration: ```yaml entryPoints: web: http: middlewares: - my-umami-middleware@file ``` ## Configuration | key | default | type | description | |---------------------|-------------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------| | `disabled` | false | `bool` | Set to `true` to disable the plugin | | `debug` | false | `bool` | Something doesn't work? Set to `true` to see more logs (plugins doesn't have access to Traefik's log level) | | `umamiHost` | - | `string` | Umami server url, reachable from within traefik (container), e.g. `http://umami:3000` | | `umamiToken` | - | `string` | An API Token, used to automatize work with websites, not needed if you provide `websites` | | `umamiUsername` | - | `string` | An alternative to `umamiToken`, you can provide an username and password | | `umamiPassword` | - | `string` | Only in combination with `umamiUsername` | | `umamiTeamId` | - | `string` | In order to organize websites, you can use Umami Teams | | `websites` | - | `map` | A map of hostnames and their associated Umami IDs. Can also be used to override or extend fetched websites | | `createNewWebsites` | false | `bool` | If set to `true`, will try to create a new website on Umami, if domain not found there | | `trackAllResources` | false | `bool` | Defines whether all requests for any resource should be tracked. By default, only requests that are believed to contain content are tracked | | `trackExtensions` | | `string[]` | Defines an alternative list of file extensions that should be tracked | | `ignoreUserAgents` | | `string[]` | A list of user agents that should be ignored from tracking, e.g. `["Googlebot", "Uptime-Kuma"]` (matched with `strings.Contains`) | | `ignoreURLs` | | `string[]` | A list of URLs that should be ignored from tracking, e.g. `["/health", "https?://[^/]+/health$"]` (matched with `regexp.Compile.MatchString`) | | `ignoreIPs` | | `string[]` | A list of IPs that should be ignored from tracking, e.g. `["127.0.0.1", "10.0.0.1/16"]` (matched with `netip.ParsePrefix.Contains`) | | `headerIp` | `X-Real-Ip` | `string` | The header to use to get the real IP address of the client, in case it's forwarded by a proxy |