computer-playbook/roles/srv-web-7-7-inj-css
Kevin Veen-Birkenbach 03290eafe1
feat(proxy,bigbluebutton): use parameterized HTML location template & add build retry
- proxy(html.conf.j2):
  * Make proxy_pass more robust (strip '=', '^~' prefixes; ignore @/~ match locations)
  * Switch WS header to $connection_upgrade
  * Unify timeouts (proxy_connect_timeout 5s)
  * Lua optional: include only when proxy_lua_enabled=true; unset Accept-Encoding only then
  * Buffering via flag: proxy_buffering/proxy_request_buffering 'on' with Lua, otherwise 'off'
- proxy(media.conf.j2): minor formatting/spacing fix
- inj-css(head_sub.j2): consistent spacing for global_css_version
- bigbluebutton(tasks/main.yml):
  * Render HTML location block once before include_role (location='^~ /html5client', OAuth2/Lua disabled)
  * Pass rendered snippet via proxy_extra_configuration to the vHost
  * Cleanup afterwards: proxy_extra_configuration = undef()
- docker-compose(handlers):
  * Build with retry: if 'docker compose build' fails -> retry with '--no-cache --pull'
  * Enable BuildKit (DOCKER_BUILDKIT=1, COMPOSE_DOCKER_CLI_BUILD=1)
- vars: trailing newline / minor formatting

Motivation:
- BBB HTML5 client (^~ /html5client) needs a separate location without Lua/buffering.
- More resilient CI/CD builds via automatic no-cache retry.
- Cleaner headers/proxy defaults and fewer side effects.

Files:
- roles/docker-compose/handlers/main.yml
- roles/srv-proxy-7-4-core/templates/location/html.conf.j2
- roles/srv-proxy-7-4-core/templates/location/media.conf.j2
- roles/srv-web-7-7-inj-css/templates/head_sub.j2
- roles/web-app-bigbluebutton/tasks/main.yml
- roles/web-app-bigbluebutton/vars/main.yml
2025-08-13 06:01:50 +02:00
..
2025-08-13 00:33:47 +02:00
2025-08-13 00:33:47 +02:00

🌍 Global CSS Injection for Nginx

Description

This Ansible role ensures consistent global theming across all Nginx-served applications by injecting a unified global.css file.
The role leverages colorscheme-generator to generate a dynamic, customizable color palette for light and dark mode, compatible with popular web tools like Bootstrap, Keycloak, Nextcloud, Taiga, Mastodon, and many more.

Overview

This role deploys a centralized global stylesheet (global.css) that overrides the default theming of web applications served via Nginx. It's optimized to run only once per deployment and generates a cache-busting version number based on file modification timestamps.
It includes support for dark mode, custom fonts, and extensive Bootstrap and UI component overrides.

Purpose

The goal of this role is to provide a single source of truth for theming across your infrastructure.
It makes all applications feel like part of the same ecosystem — visually and functionally.

Features

  • 🎨 Dynamic Theming via colorscheme-generator
  • 📁 Unified global.css deployment for all Nginx applications
  • 🌒 Dark mode support out of the box
  • 🚫 No duplication tasks run once per deployment
  • ⏱️ Versioning logic to bust browser cache
  • 🎯 Bootstrap override compatibility
  • 🧩 Theme support for Keycloak, Nextcloud, Gitea, LAM, Peertube, and more

Credits 📝

Developed and maintained by Kevin Veen-Birkenbach.
Learn more at www.veen.world

Part of the Infinito.Nexus Project
License: Infinito.Nexus NonCommercial License (CNCL)