Web-app-confluence Role¶
Description: Enterprise wiki and team collaboration platform for creating, organizing, and sharing content
Variables¶
author: Kevin Veen-Birkenbach
description: Enterprise wiki and team collaboration platform for creating, organizing, and sharing content
license: Infinito.Nexus Community License (Non-Commercial)
company: Kevin Veen-Birkenbach https://www.veen.world
galaxy_tags: [‘wiki’, ‘documentation’, ‘confluence’]
issue_tracker_url: https://s.infinito.nexus/issues
min_ansible_version: 2.9
platforms: [{‘name’: ‘ArchLinux’, ‘versions’: [‘all’]}, {‘name’: ‘Debian’, ‘versions’: [‘all’]}, {‘name’: ‘EL’, ‘versions’: [‘all’]}, {‘name’: ‘Fedora’, ‘versions’: [‘all’]}, {‘name’: ‘Ubuntu’, ‘versions’: [‘all’]}]
README¶
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 %.
Cosmos¶
The diagram places Confluence in the Infinito.Nexus cosmos: the components it deploys (capabilities), the central services it consumes (dependencies), and its outward reach (federation and bridged external networks).
flowchart LR
subgraph deps [Dependencies]
dep_svc_bkp_volume_2_local["svc-bkp-volume-2-local 💻"]
dep_svc_db_postgres["svc-db-postgres 🐳🐝"]
dep_svc_net_tor["svc-net-tor 🐳🐝"]
dep_web_app_dashboard["web-app-dashboard 🐳🐝"]
dep_web_app_keycloak["web-app-keycloak 🐳🐝"]
dep_web_app_matomo["web-app-matomo 🐳🐝"]
dep_web_app_prometheus["web-app-prometheus 🐳🐝"]
dep_web_app_stalwart["web-app-stalwart 🐳🐝"]
dep_web_svc_css["web-svc-css 💻"]
dep_web_svc_logout["web-svc-logout 🐳🐝"]
end
subgraph role [web-app-confluence 🐳🐝]
svc_logout["logout"]
svc_sso["sso ❌"]
svc_dashboard["dashboard"]
svc_matomo["matomo"]
svc_email["email ❌"]
svc_postgres["postgres"]
svc_confluence["confluence"]
svc_css["css"]
svc_prometheus["prometheus"]
svc_tor["tor"]
svc_container_backup["container_backup"]
end
dep_svc_bkp_volume_2_local -. "0..1" .-> svc_container_backup
dep_svc_db_postgres -. "0..1" .-> svc_postgres
dep_svc_net_tor -. "0..1" .-> svc_tor
dep_web_app_dashboard -. "0..1" .-> svc_dashboard
dep_web_app_keycloak -- "0..0" --> svc_sso
dep_web_app_matomo -. "0..1" .-> svc_matomo
dep_web_app_prometheus -. "0..1" .-> svc_prometheus
dep_web_app_stalwart -- "0..0" --> svc_email
dep_web_svc_css -. "0..1" .-> svc_css
dep_web_svc_logout -. "0..1" .-> svc_logout
linkStyle 4,7 stroke:red;Solid 1:1 edges are fixed relationships; dashed 0..1 edges are
conditional (enabled only in matching deployments); red 0..0 edges
are turned off in this role. Node markers show the role’s deploy modes
(💻 host, 🐳 compose, 🐝 swarm); ❌ marks a service that is explicitly
turned off, and ⚙️ an Ansible role dependency declared in
meta/main.yml.
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/SECUREso 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_MEMORYare 35 % and 70 % of the servicemem_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 }}.
Quick Setup¶
Development¶
Clone, set up the workstation, and deploy Confluence onto the local stack:
git clone https://github.com/infinito-nexus/core.git
cd core
make onboard
make compose-deploy mode=reinstall apps=web-app-confluence full_cycle=false
Production¶
Run the published image to provision the inventory and deploy Confluence to a managed server (the mounted volume persists the inventory):
APP=web-app-confluence
HOST=<your-server>
DOMAIN=<your-domain>
TLS_MODE=self_signed
SSH_PUBLIC_KEY="<your-ssh-public-key>"
docker run --rm -it \
-v "$PWD/inventories:/etc/infinito.nexus/inventories" \
-e APP="$APP" -e HOST="$HOST" -e DOMAIN="$DOMAIN" -e TLS_MODE="$TLS_MODE" -e SSH_PUBLIC_KEY="$SSH_PUBLIC_KEY" \
ghcr.io/infinito-nexus/core/debian bash -c '
INVENTORY=/etc/infinito.nexus/inventories/production
infinito administration inventory provision "$INVENTORY" \
--inventory-file "$INVENTORY/devices.yml" \
--host "$HOST" \
--include "$APP" \
--vars "{\"TLS_MODE\": \"$TLS_MODE\", \"DOMAIN_PRIMARY\": \"$DOMAIN\", \"users\": {\"administrator\": {\"authorized_keys\": [\"$SSH_PUBLIC_KEY\"]}}}" &&
infinito administration deploy dedicated "$INVENTORY/devices.yml" \
--password-file "$INVENTORY/.password" \
--diff -vv'
Further Resources¶
Product page: Atlassian Confluence
Docker Hub (official image): atlassian/confluence
Persona contract opt-outs¶
`meta/services.yml <./meta/services.yml>`__ pins sso.enabled to
false and `tasks/main.yml <./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 <./templates/playwright.env.j2>`__
declares PERSONA_BIBER_BLOCKED=true and
PERSONA_ADMINISTRATOR_BLOCKED=true. The guest persona and the
baseline reachability assertions run unconditionally.
Credits¶
Implemented by Kevin Veen-Birkenbach. Part of the Infinito.Nexus Project and maintained by Kevin Veen-Birkenbach. Licensed under the Infinito.Nexus Community License (Non-Commercial).