Files
computer-playbook/roles/web-app-confluence
kevinveenbirkenbachandClaude Opus 5 53ddbb00c2 fix(sso): pin the provider every app-native OIDC consumer calls
On an onion deployment the OIDC endpoints handed to an application are public onion authorities. That is right for the browser, which reaches them through Tor, and unroutable for the calls the application makes itself: the code-to-token exchange, JWKS and userinfo leave the container directly. lookup(container_extra_hosts) pins the provider to an address the container can reach, sending those calls over the local network to the proxy that already serves the vhost. Around fifty role templates carry that pin. Six did not.

web-app-jellyfin reached a release with the gap and failed in CI the first time a round put its SSO variant on an onion row. confluence, jira, openbao, semaphore, xwiki and opentalk are the same shape; none of them is red today, so the gap there is derived from the class rather than measured. For opentalk the pin goes on the controller, because controller.toml.j2:16 sets authority to the issuer and that is where discovery is loaded.

The new rule sso-backchannel-pin closes the class rather than the six instances: a role that reads OIDC.CLIENT.ISSUER_URL must emit the lookup from one of its templates. Two kinds are out of scope, both for a stated reason. A role declaring sso.flavor: oauth2 never calls the provider itself, because the reverse proxy performs the exchange. A role naming the issuer only in a Playwright env template hands it to the test harness rather than to a container; without that second exemption the rule named 13 roles, of which 8 were test-only. A role that genuinely makes no server-side call opts out with a marker naming the reason.

The lookup renders an empty block where there is no onion to pin, so none of the six changes anything on clearnet. 76 checks and 276 subtests pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-10-21 16:45:23 +02:00
..
…

Confluence

End of life. Infinito.Nexus neither maintains nor tests this role, and the default INFINITO_LIFECYCLES envelope keeps it out of every CI round. Deploy it at your own risk and take support from Atlassian Confluence.

Description

Confluence is Atlassian’s enterprise wiki and collaboration platform. This role deploys Confluence via Docker Compose, wires it to PostgreSQL, and integrates proxy awareness, optional OIDC SSO, health checks, and production-friendly defaults for Infinito.Nexus.

Overview

The role builds a minimal custom image on top of the official Confluence image, prepares persistent volumes, and exposes the app behind your reverse proxy. Configuration is driven by variables (image, version, volumes, domains, OIDC). JVM heap sizing follows the container's mem_limit: JVM_MAXIMUM_MEMORY is 70 % of it and JVM_MINIMUM_MEMORY 35 %.

Features

  • Fully Dockerized: Compose stack with a dedicated data volume (confluence_data) and a slim overlay image for future add-ons.
  • Reverse-Proxy Ready: Sets ATL_PROXY_NAME/PORT/SCHEME/SECURE so Confluence generates correct external URLs behind HTTPS.
  • OIDC SSO (Optional): Pre-templated vars for issuer, client, scopes, JWKS; compatible with Atlassian DC SSO/OIDC marketplace apps.
  • Central Database: PostgreSQL integration (local or central DB) with bootstrap credentials from role vars.
  • JVM Auto-Tuning: JVM_MINIMUM_MEMORY / JVM_MAXIMUM_MEMORY are 35 % and 70 % of the service mem_limit.
  • Health Checks: Curl-based container healthcheck for early failure detection.
  • CSP & Canonical Domains: Hooks into platform CSP/SSL/domain management to keep policies strict and URLs stable.
  • Backup Friendly: Data isolated under {{ CONFLUENCE_HOME }}.

Further Resources

Persona contract opt-outs

meta/services.yml pins sso.enabled to false and tasks/main.yml provisions no Confluence account — account creation belongs to the licensed first-run setup wizard. Neither the biber nor the administrator persona has credentials to sign in with, so templates/playwright.env.j2 declares PERSONA_BIBER_BLOCKED=true and PERSONA_ADMINISTRATOR_BLOCKED=true. The guest persona and the baseline reachability assertions run unconditionally.