Renamed server roles by osi they work on

This commit is contained in:
2025-07-10 12:33:46 +02:00
parent c94d623f8f
commit 96268e7161
120 changed files with 167 additions and 167 deletions

View File

@@ -0,0 +1,21 @@
# Nginx Matomo Tracking Role
This Ansible role automates the integration of Matomo tracking code into Nginx-served websites. It simplifies the process of adding the Matomo analytics tracking script and image tracker to all your web pages served through Nginx.
## Features
- Automated insertion of Matomo tracking script into the `</head>` tag of HTML pages.
- Integration of a noscript image tracker before the `</body>` tag for tracking users with JavaScript disabled.
- Configuration to apply changes on every request, ensuring that dynamic content and single-page applications are also tracked.
## Requirements
- Nginx installed on the target server.
- Matomo analytics platform set up and accessible.
## Dependencies
- None. This role is designed to be included in Nginx server block configurations.
## Customization
You can customize the tracking script and the noscript image tracker by editing the `matomo-tracking.js.j2` and `matomo.subfilter.conf.j2` templates.
## Author Information
This role was created in 2023 by [Kevin Veen Birkenbach](https://www.veen.world/), providing a seamless way to add Matomo analytics to any website served via Nginx.

View File

@@ -0,0 +1,24 @@
---
galaxy_info:
author: "Kevin Veen-Birchenbach"
description: "Injects Matomo analytics tracking code and noscript image tracker into Nginx-served HTML pages."
license: "CyMaIS NonCommercial License (CNCL)"
license_url: "https://s.veen.world/cncl"
company: |
Kevin Veen-Birchenbach
Consulting & Coaching Solutions
https://www.veen.world
galaxy_tags:
- nginx
- matomo
- analytics
repository: "https://github.com/kevinveenbirkenbach/cymais"
issue_tracker_url: "https://github.com/kevinveenbirkenbach/cymais/issues"
documentation: "https://github.com/kevinveenbirkenbach/cymais/tree/main/roles/srv-web-7-7-inj-matomo"
min_ansible_version: "2.9"
platforms:
- name: Any
versions: [ all ]
dependencies:
- srv-web-7-4-core

View File

@@ -0,0 +1,60 @@
# Load this role via srv-web-7-7-inj-compose for consistency
- name: "Relevant variables for role: {{ role_path | basename }}"
debug:
msg:
domain: "{{ domain }}"
base_domain: "{{ base_domain }}"
matomo_verification_url: "{{ matomo_verification_url }}"
when: enable_debug | bool
- name: "Check if site {{ domain }} is allready registered at Matomo"
uri:
url: "{{ matomo_verification_url }}"
method: GET
return_content: yes
status_code: 200
validate_certs: yes
register: site_check
- name: Set matomo_site_id to Null
set_fact:
matomo_site_id: Null
- name: Set fact for site ID if site already exists
set_fact:
matomo_site_id: "{{ site_check.json[0].idsite }}"
when: "(site_check.json | length) > 0"
changed_when: false
- name: Add site to Matomo and get ID if not exists
uri:
url: "{{ matomo_index_php_url }}"
method: POST
body: "module=API&method=SitesManager.addSite&siteName={{ base_domain }}&urls=https://{{ base_domain }}&token_auth={{ matomo_auth_token }}&format=json"
body_format: form-urlencoded
status_code: 200
return_content: yes
validate_certs: yes
register: add_site
when: "matomo_site_id is not defined or matomo_site_id is none"
- name: Set fact for site ID if site was added
set_fact:
matomo_site_id: "{{ add_site.json.value }}"
when: "matomo_site_id is not defined or matomo_site_id is none"
changed_when: false
- name: Load Matomo tracking JS template
set_fact:
matomo_tracking_code: "{{ lookup('template','matomo-tracking.js.j2') }}"
- name: Collapse Matomo code into one-liner
set_fact:
matomo_tracking_code_one_liner: "{{ matomo_tracking_code | to_one_liner }}"
- name: Append Matomo CSP hash
set_fact:
applications: "{{ applications | append_csp_hash(application_id, matomo_tracking_code_one_liner) }}"
changed_when: false

View File

@@ -0,0 +1 @@
<script>{{matomo_tracking_code_one_liner}}</script>

View File

@@ -0,0 +1,2 @@
# sub filters to integrate matomo tracking code in nginx websites
sub_filter '</body>' '<noscript><p><img src="//matomo.{{primary_domain}}/matomo.php?idsite={{matomo_site_id}}&rec=1" style="border:0;" alt="" /></p></noscript></body>';

View File

@@ -0,0 +1,19 @@
var _paq = window._paq = window._paq || [];
_paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
_paq.push(["setCookieDomain", "*.{{base_domain}}"]);
_paq.push(["setDomains", ["*.{{base_domain}}"]]);
_paq.push(["enableCrossDomainLinking"]);
_paq.push(["trackPageView"]);
_paq.push(["trackAllContentImpressions"]);
_paq.push(["enableLinkTracking"]);
(function() {
var u="//{{ domains | get_domain('matomo') }}/";
_paq.push(["setTrackerUrl", u+"matomo.php"]);
_paq.push(["setSiteId", "{{matomo_site_id}}"]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0];
g.async=true; g.src=u+"matomo.js"; s.parentNode.insertBefore(g,s);
})();
{% if enable_debug | bool %}
console.log("Matomo is loaded.");
{% endif %}

View File

@@ -0,0 +1,4 @@
base_domain: "{{ domain | regex_replace('^(?:.*\\.)?(.+\\..+)$', '\\1') }}"
matomo_index_php_url: "{{ domains | get_url('matomo', web_protocol) }}/index.php"
matomo_auth_token: "{{ applications.matomo.credentials.auth_token }}"
matomo_verification_url: "{{ matomo_index_php_url }}?module=API&method=SitesManager.getSitesIdFromSiteUrl&url=https://{{ base_domain }}&format=json&token_auth={{ matomo_auth_token }}"