{"id":24285601,"url":"https://github.com/astappiev/traefik-umami-feeder","last_synced_at":"2025-09-25T07:31:15.387Z","repository":{"id":258057136,"uuid":"873639435","full_name":"astappiev/traefik-umami-feeder","owner":"astappiev","description":"A Traefik plugin that feeds Umami Analytics with pageview events","archived":false,"fork":false,"pushed_at":"2025-06-13T10:53:30.000Z","size":77,"stargazers_count":14,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-13T11:43:27.046Z","etag":null,"topics":["traefik-plugin"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/astappiev.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-16T13:57:10.000Z","updated_at":"2025-06-13T11:28:41.000Z","dependencies_parsed_at":"2024-10-17T13:44:39.893Z","dependency_job_id":"08f02950-d80b-498e-bed0-e1aaee884a22","html_url":"https://github.com/astappiev/traefik-umami-feeder","commit_stats":null,"previous_names":["astappiev/traefik-umami-feeder"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/astappiev/traefik-umami-feeder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astappiev%2Ftraefik-umami-feeder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astappiev%2Ftraefik-umami-feeder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astappiev%2Ftraefik-umami-feeder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astappiev%2Ftraefik-umami-feeder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astappiev","download_url":"https://codeload.github.com/astappiev/traefik-umami-feeder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astappiev%2Ftraefik-umami-feeder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276881827,"owners_count":25721413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-25T02:00:09.612Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["traefik-plugin"],"created_at":"2025-01-16T06:45:18.198Z","updated_at":"2025-09-25T07:31:15.375Z","avatar_url":"https://github.com/astappiev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Traefik Umami Feeder Plugin\n\nA [Traefik](https://traefik.io/traefik/) middleware plugin that sends visits to your [Umami](https://umami.is) instance.\n\nIt was created as an alternative to [traefik-umami-plugin](https://github.com/1cedsoda/traefik-umami-plugin) and\ninspired by the [Plausible Feeder Traefik Plugin](https://github.com/safing/plausiblefeeder).\n\n## Introduction\n\nThis plugin integrates your Traefik-proxied services with Umami, a simple, fast, privacy-focused analytics solution. It\ncaptures basic request information (path, user-agent, referrer, screen size, IP) and forwards it to your Umami instance,\nenabling server-side analytics.\n\nKey features:\n\n- Stupidly simple to setup, one middleware for all websites possible\n- Server-Side Tracking, no JS or Cookies bullshit\n- Fast and private\n\n## Configuration\n\n### Step 1. Add the plugin to Traefik\n\nDeclare the plugin in your Traefik **static configuration**.\n\n```yaml\nexperimental:\n  plugins:\n    umami-feeder:\n      moduleName: github.com/astappiev/traefik-umami-feeder\n      version: v1.3.0 # Replace with the latest version\n```\n\n### Step 2. Configure the middleware\n\nOnce the plugin is declared, configure it as a middleware in your Traefik **dynamic configuration**.\n\nYou can specify which websites to track in two ways:\n\n1. **Manual**: Directly provide a `websites` map, associating hostnames with their Umami Website IDs.\n2. **Automatic**: Configure the plugin with your Umami API `umamiToken`, or `umamiUsername` and `umamiPassword`. The\n   plugin will then automatically fetch the list of websites and their IDs from your Umami instance.\n    * Optionally, use `umamiTeamId` to scope website retrieval to a specific team.\n    * Optionally, enable `createNewWebsites` to allow the plugin to create new website entries in Umami if they don't\n      already exist.\n\nSee the [Middleware Options](#middleware-options) section for detailed configuration options.\n\n```yaml\nhttp:\n  middlewares:\n    my-umami-middleware:\n      plugin:\n        umami-feeder:\n          umamiHost: \"http://umami:3000\" # URL of your Umami instance\n\n          # Option 1: Define the list of websites\n          # websites:\n          #   \"example.com\": \"d4617504-241c-4797-8eab-5939b367b3ad\"\n\n          # Option 2: Use Umami credentials to fetch websites\n          umamiUsername: \"your-umami-username\"\n          umamiPassword: \"your-umami-password\"\n          # umamiToken: \"your-umami-api-token\" # Alternative to username/password\n\n          # Optional: allow creation of new websites in Umami\n          createNewWebsites: true\n```\n\n### Step 3. Attach the middleware to your routers\n\nApply the [configured middleware](https://doc.traefik.io/traefik/routing/routers/#middlewares_1) to the Traefik routers\nyou want to track with Umami. This is also done in your **dynamic configuration**.\n\nRemember to use the\ncorrect [provider namespace](https://doc.traefik.io/traefik/providers/overview/#provider-namespace)  (e.g., `@file` if\nyour middleware is defined in a file, `@docker` if defined via Docker labels).\n\n**Example using Docker labels:**\n\n```yaml\n- \"traefik.http.routers.whoami.middlewares=my-umami-middleware@file\"\n```\n\n**Example using a dynamic configuration file (e.g., `dynamic_conf.yml`):**\n\n```yaml\nhttp:\n  routers:\n    whoami:\n      rule: \"Host(`example.com`)\"\n      middlewares:\n        - my-umami-middleware@file\n```\n\n**Example using static configuration (e.g., `traefik.yml`), by attaching the middleware to an entryPoint to apply it\nglobally:**\n\n```yaml\nentryPoints:\n  web:\n    http:\n      middlewares:\n        - my-umami-middleware@file\n```\n\n## Middleware Options\n\n| key                 | default         | type       | description                                                                                                                                                                                                  |\n|---------------------|-----------------|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `disabled`          | `false`         | `bool`     | Set to `true` to disable the plugin.                                                                                                                                                                         |\n| `debug`             | `false`         | `bool`     | Set to `true` for verbose logging. Useful for troubleshooting as plugins don't inherit Traefik's global log level.                                                                                           |\n| `queueSize`         | `1000`          | `int`      | Maximum number of tracking events to queue before sending to the Umami server.                                                                                                                               |\n| `umamiHost`         | **required**    | `string`   | URL of your Umami instance, reachable from Traefik (e.g., `http://umami:3000`).                                                                                                                              |\n| `umamiToken`        | -               | `string`   | [Umami API Token](https://umami.is/docs/api/authentication) for authenticating with your Umami instance. Use this *or* `umamiUsername`/`umamiPassword`. Required for automatic website fetching or creation. |\n| `umamiUsername`     | -               | `string`   | Username for Umami authentication. Use this with `umamiPassword` if not using `umamiToken`. Required for automatic website fetching or creation.                                                             |\n| `umamiPassword`     | -               | `string`   | Password for Umami authentication, used in conjunction with `umamiUsername`.                                                                                                                                 |\n| `umamiTeamId`       | -               | `string`   | Optional. If using automatic mode, specifies the Umami Team ID to scope website fetching/creation.                                                                                                           |\n| `websites`          | -               | `map`      | A map of `hostname: umamiWebsiteID`. Used for manual website configuration or to override/extend websites fetched in automatic mode.                                                                         |\n| `createNewWebsites` | `false`         | `bool`     | If `true` and using automatic mode, the plugin will attempt to create a new website entry in Umami if the domain is not found.                                                                               |\n| `trackErrors`       | `false`         | `bool`     | If `true`, tracks errors (status codes \u003e= 400).                                                                                                                                                              |\n| `trackAllResources` | `false`         | `bool`     | If `true`, tracks requests for all resources. By default, only requests likely to be page views (e.g., HTML, or no specific extension) are tracked.                                                          |\n| `trackExtensions`   | `[see sources]` | `string[]` | A list of specific file extensions to track (e.g., `[\".html\", \".php\"]`).                                                                                                                                     |\n| `ignoreUserAgents`  | `[]`            | `string[]` | A list of user-agent substrings. Requests with matching user-agents will be ignored (e.g., `[\"Googlebot\", \"Uptime-Kuma\"]`). Matched with `strings.Contains`.                                                 |\n| `ignoreURLs`        | `[]`            | `string[]` | A list of regular expressions. Requests with URLs matching any of these patterns will be ignored (e.g., `[\"/health\", \"https?://[^/]+/health$\"]`). Matched with `regexp.Compile.MatchString`.                 |\n| `ignoreIPs`         | `[]`            | `string[]` | A list of IP addresses or CIDR ranges to ignore (e.g., `[\"127.0.0.1\", \"10.0.0.1/16\"]`). Matched with `netip.ParsePrefix.Contains`.                                                                           |\n| `headerIp`          | `X-Real-Ip`     | `string`   | The HTTP header to inspect for the client's real IP address, typically used when Traefik is behind another proxy.                                                                                            |\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a pull request or open an issue.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastappiev%2Ftraefik-umami-feeder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fastappiev%2Ftraefik-umami-feeder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastappiev%2Ftraefik-umami-feeder/lists"}