first commit

This commit is contained in:
Oleh Astappiev 2024-10-16 15:57:59 +02:00
commit 3ca46c9ea2
No known key found for this signature in database
GPG key ID: 37D7AC22589E9632
19 changed files with 958 additions and 0 deletions

90
readme.md Normal file
View file

@ -0,0 +1,90 @@
# Umami Feeder for Traefik
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 |
|---------------------|---------|----------|-------------------------------------------------------------------------------------------------------------|
| `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` |
| `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 |
| `debug` | false | `bool` | Something doesn't work? Set to `true` to see more logs (plugins doesn't have access to Traefik's log level) |