Overview
Docmost is an open-source knowledge base and wiki — a Confluence or Notion alternative with real-time collaborative editing, spaces, and per-space permissions. This template deploys the Docmost server — UI, REST API, and collaboration websockets on port3000 — backed by a PostgreSQL instance for documents and a bundled Redis for queues and realtime coordination, with attachments stored either on a persistent volume or in an S3 bucket.
Architecture
- Docmost server — A stateful workload running the single official image, which serves the web UI, the REST API, and the Yjs collaboration websocket on port
3000. It runs its database migrations automatically on boot and scales horizontally throughdocmost.replicas. - PostgreSQL — The postgres template as a subchart. It holds every page, user, space, and permission.
- Redis — A bundled single-node Redis with AOF persistence, deployed by this chart. It carries the background job queues, the socket.io adapter, and cross-replica collaboration sync. Docmost requires it: the server does not report healthy without a reachable Redis.
- Attachment storage — Either a persistent volume mounted at
/app/data/storage(default) or an S3 bucket you own.
What Gets Created
- Stateful Docmost Workload — The Docmost server on port
3000({release}-docmost), withdocmost.replicasreplicas and configurable CPU and memory. - Stateful Redis Workload — The bundled single-node Redis (
{release}-docmost-redis) with password authentication. - Stateful PostgreSQL Workload — One PostgreSQL instance from the subchart, with its own volume set.
- Volume Sets — One for local attachments (mounted only when
storage.typeislocal), one for the Redis AOF file, and one for the PostgreSQL data directory. - Secret — A template-created dictionary secret (
{release}-docmost-creds) holding the PostgreSQL and Redis credentials used to assembleDATABASE_URLandREDIS_URL. Your prerequisiteAPP_SECRETsecret is not created by the template — see Prerequisites. - Identity & Policy — An identity bound to the Docmost workload, and a policy granting it
revealon exactly the secrets it reads: the credentials secret, your prerequisite secret, and — when configured — the S3 key and SMTP secrets. In keyless S3 mode the identity also carries the cloud account link and your bucket-scoped IAM policy.
This template does not create a GVC. You must deploy it into an existing GVC.
Prerequisites
Docmost signs its sessions, invitation links, and share links with anAPP_SECRET that you supply through an opaque secret created before installing. The value is never passed through Helm values.
1
Create the APP_SECRET secret
The payload is a single random string of at least 32 characters:Use
printf rather than echo so the payload carries no trailing newline.2
Point the template at it
Set
secrets.name to the secret’s name (default my-docmost-app-secret). Secrets are org-level, so no GVC flag is involved.3
Back the value up
Store a copy somewhere safe, outside Control Plane.
- S3 attachment storage — an existing bucket plus either a Control Plane cloud account (AWS) or a static-key secret (S3-compatible servers). See Attachment Storage. Required if you plan to run more than one replica.
- Authenticated SMTP — a dictionary secret holding
SMTP_USERNAMEandSMTP_PASSWORD. See Email.
APP_SECRET secret exists, install the template using your preferred method:
UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
First Run
Docmost ships no default account, and the first person to reach the instance creates the workspace and its owner account.1
Wait for the workload to report ready
PostgreSQL and Redis come up first, then Docmost applies its schema migrations before it starts serving. A default install typically reaches ready in about a minute.
2
Open the endpoint and claim the workspace
Browse to the canonical
*.cpln.app endpoint of the {release}-docmost workload and complete the setup form to create the workspace and the admin account. Do this as soon as the workload is ready.3
Configure email before inviting anyone
Member invitations are delivered only by email. Configure SMTP before you invite your team.
Configuration
The defaultvalues.yaml for this template:
Docmost Server
image— The official Docmost image. Pin a released tag.replicas— Number of Docmost replicas. Anything above1requiresstorage.type: s3; the chart fails the render with a clear message otherwise. See Scaling.appUrl— The public base URL Docmost puts in invitation and share links, including thehttps://scheme. Leave it empty to derive it from the workload’s canonical endpoint; set it when you serve Docmost on a custom domain.resources— CPU and memory bounds for the Docmost container. The memory ceiling leaves headroom for the boot migrations and large imports.
Attachment Storage
storage.type decides where uploaded files, images, and avatars are kept.
- Local volume (default)
- AWS S3 (keyless)
- S3-compatible (MinIO and others)
Attachments are written to a persistent volume set mounted at Local storage works only with a single replica — each replica would get its own volume, so attachments uploaded through one replica would be missing from the others.
/app/data/storage, and survive restarts, redeploys, and upgrades under the same release name.storage.fileUploadSizeLimit caps the size of a single attachment (default 50mb).
Scaling
docmost.replicas sets how many Docmost replicas run. Replicas coordinate through the bundled Redis, which carries both the job queues and the collaborative-editing updates, so a document edited on one replica appears live for a reader connected to another.
Access
publicAccess.enabled— Serve the UI, API, and collaboration websockets on the auto-assigned*.cpln.appHTTPS endpoint (default). Set tofalsefor an internal-only instance: external requests are then refused at the edge, and in-GVC callers still reach it perinternalAccess.internalAccess.type— Controls which workloads can reach Docmost over the internal network:
Flipping
publicAccess.enabled changes the load balancer configuration, so the public endpoint may return 503 for a minute or two after the upgrade reports success.smtp.auth.secretName empty for a relay that does not require authentication. When it is set, the Docmost identity is granted reveal on exactly that secret.
Databases
postgres.config.username/password/database— Credentials for the bundled PostgreSQL from the postgres subchart. Change the password before installing — it seeds the database on first boot and is not updated by later value edits.postgres.resources/postgres.volumeset.capacity— CPU and memory bounds and the initial data volume size in GiB (minimum 10).redis.auth.password— Password for the bundled Redis, wired into Docmost’sREDIS_URL. Change it before installing. Redis requires authentication: an unauthenticated client is refused.redis.resources/redis.volumeset.capacity— CPU and memory bounds and the volume size for the Redis AOF file at/data.
Redis is not optional. Docmost’s health check reports the Redis connection alongside the database one, and the workload does not become ready without it. A Redis restart briefly fails readiness on the Docmost workload, which recovers on its own without restarting the application container.
Connecting
Important Notes
- Create the
APP_SECRETsecret before installing —secrets.namemust point at an existing opaque secret (plain encoding) whose payload is a random string of at least 32 characters. A missing secret pauses the deployment until the secret exists, and the install looks broken until then. APP_SECRETis write-once — rotating it logs out every user and invalidates outstanding invitation and share links. Stored documents are unaffected. Back the value up outside Control Plane.- Claim the workspace right after install — the first visitor to complete the setup form becomes the workspace owner.
- With SMTP off, member invitations cannot be delivered — no mail is sent and no invitation link is written to the logs. Configure
smtp.*before inviting anyone. docmost.replicasabove1requiresstorage.type: s3— local attachments are per-replica and would404across replicas.- AWS S3 is keyless only — use a cloud account plus a bucket-scoped IAM policy. Static keys are accepted only when
storage.s3.endpointpoints at an S3-compatible server. - Uploads larger than
storage.fileUploadSizeLimitare truncated, not rejected — raise the limit before importing large attachments. - Change
postgres.config.passwordandredis.auth.passwordbefore installing — both seed their component on first boot and are not updated by later value edits. - Pages survive restarts and upgrades — documents live in the PostgreSQL volume set and local attachments in the storage volume set. Uninstalling deletes those volume sets and everything in them; your
APP_SECRETsecret is yours and survives an uninstall. - Docmost is licensed under the AGPL — this template deploys the open-source edition.
External References
Docmost Documentation
Official Docmost documentation
Environment Variables
Every setting the Docmost server reads from its environment
File Storage
Local and S3 attachment storage options
Email Configuration
SMTP settings for invitations and notifications
Docmost on GitHub
Source code and release notes
Docmost Template
View the source files, default values, and chart definition