outline
Outline wiki — Postgres persistence, Redis queue, S3 attachments, OIDC SSO via Keycloak
@r8s/outline
Components (1)
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)