Knowledge & Documentation

outline

Outline wiki — Postgres persistence, Redis queue, S3 attachments, OIDC SSO via Keycloak

@r8s/outline

outlinewikidocumentationknowledge

Components (1)

01

Outline

Outline — team wiki with Postgres, Redis, S3 attachments and OIDC SSO.

import { Platform } from '@r8s/recipes'
import { Outline } from '@r8s/outline'

export default (
  <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>
    <Outline
      name="wiki"
      host="wiki.example.com"
      objectStorage={{
        endpoint: 'https://s3.internal.example.com',
        bucket: 'wiki-attachments',
        credentialsSecret: 'wiki-attachments-credentials',
      }}
      sso={{
        issuer: 'https://keycloak.example.com/realms/platform',
        clientId: 'outline',
        clientSecretRef: { secret: 'outline-sso', key: 'clientSecret' },
      }}
    />
  </Platform>
)
namestringOptional

Resource name (defaults to 'outline')

namespacestringOptional

Kubernetes namespace (defaults to 'default')

versionstringOptional

Container image tag (defaults to 'latest' — pin a version in production)

hoststringRequired

Public hostname for the wiki

storagestringOptional

Storage request for the CNPG Postgres cluster (defaults to '10Gi')

replicasnumberOptional

Number of replicas (Outline is stateless — scale freely)

cachebooleanOptional

Provision a Redis cluster for the queue and rate limiting (default: true)

objectStorage{ endpoint: string, bucket: string, credentialsSecret: string, region?: string }Optional

S3-compatible object storage for attachments (RustFS in the platform). Reference a bucket whose credentials live in a Secret provisioned by the secrets backend (keys: accessKey, secretKey) — never plaintext.

sso{ issuer: string, clientId: string, clientSecretRef: SecretRef, scopes?: string }Optional

OIDC SSO client — register Outline as a client in Keycloak (the Auth recipe) and reference the client secret through the backend.

secretsNamestringOptional

Name of an existing Secret holding secretKey and utilsSecret. Required unless a secrets backend (openbao/vault) is configured on the surrounding Platform — the backend then provisions them.

resources{ requests?: { cpu?: string, memory?: string }, limits?: { cpu?: string, memory?: string } }Optional

Requested resources

tls{ secretName: string, clusterIssuer: string }Optional

TLS configuration (defaults to letsencrypt-prod cluster issuer)