Overview
Documenso is an open-source e-signature platform, a DocuSign alternative: upload a PDF, place signature fields, send it to recipients, and get back a PDF digitally signed with your own certificate plus an audit trail. This template deploys the Documenso server (UI, REST API, signing pages, and background jobs on port3000) with a bundled PostgreSQL, single-instance by default and highly available behind one flag. Documents are stored in the database or in an S3 bucket you own. Documenso runs in exactly one location of your GVC.
location you set must already be one of that GVC’s locations; if it is not, Documenso starts nothing in the GVC.What Gets Created
Prerequisites
Three secrets must exist before installing, and the GVC should have one location (see the last step). The values never pass through Helm values.Create the signing certificate secret
.p12) file. Documenso signs every completed PDF with it. Use the default openssl pkcs12 -export. Reading the passphrase into a variable keeps it out of your shell history:signing.certificateSecretName to this name. Use a certificate from your own CA instead of the self-signed one above if signers must see a trusted signature.Create the application keys secret
signingPassphrase is the certificate’s password from the previous step:secrets.name to this name. Back the keys up outside Control Plane and never replace encryptionKey: it protects two-factor secrets and API tokens.Create the database credentials secret
postgres.config.credentialsSecretName to this name (postgresHA.config.credentialsSecretName in highly available mode). Secret names are org-wide, so give each release its own secrets. The three values are part of Documenso’s connection URL, so use letters, digits, - and _ only.Use a GVC with one location
location, which must already be a location of your GVC. The bundled PostgreSQL starts in every location of the GVC, so a GVC with a single location keeps one Documenso against one database.Installation
Once your three secrets exist, install from the marketplace registry, pointing the keys at them andlocation at a location of your GVC:
UI
CLI
Terraform
Pulumi
Configuration
Location
aws-us-east-1. A link form (//location/aws-us-east-1), a list, or a comma-separated value is refused at render time.
Documenso Server
Prerequisite Secrets
Sign-up
Document Storage
database, every PDF grows the PostgreSQL volume, so raise postgres.volumeset.capacity for heavy use. With s3, complete Storage Setup first.
Storage Setup
Only forstorage.type: s3. Both paths set storage.s3.bucket and storage.s3.region.
AWS S3 (keyless) — create the bucket and a Control Plane cloud account for the AWS account, and set storage.s3.cloudAccountName. Create this IAM policy (replace YOUR_BUCKET_NAME), set storage.s3.policyName to its name, and leave storage.s3.auth.secretName empty.
storage.s3.endpoint with its scheme and fully qualified host (http://MINIO_WORKLOAD_NAME.GVC_NAME.cpln.local:9000), set storage.s3.forcePathStyle: true, then create the keys secret and set storage.s3.auth.secretName to its name:
fromAddress and fromName are required even when SMTP is off. For an authenticated relay, create the dictionary and set smtp.auth.secretName:
Telemetry
Access
Database
postgres and postgresHA:
postgres.backup and postgresHA.backup blocks pass straight through to the underlying templates — see Backing Up.
Connecting
{"isAvailable":true}. {"isAvailable":false} means the certificate cannot be opened with signingPassphrase.
First Run
Documenso has no admin bootstrap and requires a verified email before the first sign-in; without SMTP no verification mail is sent. Register on the public endpoint, then verify yourself and become an admin (use your credentials secret’susername and database):
psql in RELEASE_NAME-postgres-ha, container patroni-postgres, adding -h RELEASE_NAME-postgres-ha-proxy.GVC_NAME.cpln.local. Then sign in and close sign-up by setting signup.disabled: true or signup.allowedDomains.
Operations
Backing Up
Database backups are off by default. Enablepostgres.backup.enabled: true (or postgresHA.backup.enabled: true) and choose a provider of aws, gcp, or minio; the bucket, cloud account, and IAM setup are described in Backing Up for the single-instance database and Backing Up for highly available mode, and the backup blocks of values.yaml use the same keys. With storage.type: s3 a database backup holds only object keys, so protect the bucket too with versioning or replication.
Restoring a Backup
Restore steps belong to the underlying database templates: Restoring a Backup and Restoring a Backup.Rotating a Secret
Rotating a referenced secret does not restart Documenso. After changing a value, redeploy:Scaling and Availability
documenso.replicas is a real knob: the app tier is stateless, and with two or more replicas the UI stays up through a rolling restart. For database availability, set postgresHA.enabled: true and postgres.enabled: false at install; a single-instance PostgreSQL can briefly restart, and Documenso with it, on the first helm upgrade.
Troubleshooting
Deployment never becomes ready and the logs are empty
Deployment never becomes ready and the logs are empty
cpln helm install reported success, cpln logs returns nothing, and cpln workload get-deployments RELEASE_NAME-documenso --gvc GVC_NAME -o yaml shows The secret SECRET_NAME no longer exists. Workload updates are paused until the secret is added or the reference to the secret removed. under status.versions[].message.Cause: A prerequisite secret does not exist: the application keys, the signing certificate, or the database credentials. The message names the missing one.Fix: Create it (see Prerequisites). The deployment recovers on its own once the secret exists; cpln workload force-redeployment RELEASE_NAME-documenso --gvc GVC_NAME skips the wait.Documenso starts nothing and reports it is deactivated
Documenso starts nothing and reports it is deactivated
This workload location is deactivated because maxScale is set to 0.Cause: location is not one of the GVC’s locations. The default is aws-us-east-1.Fix: Set location to a location your GVC already has, and run cpln helm upgrade.First sign-in says Unverified email
First sign-in says Unverified email
Certificate status returns isAvailable false
Certificate status returns isAvailable false
/api/certificate-status returns {"isAvailable":false} and /api/health reports status: warning.Cause: The .p12 cannot be opened with the signingPassphrase in the application keys secret, or the secret does not hold the base64 text of a valid .p12.Fix: Recreate the certificate secret from Prerequisites and make sure signingPassphrase matches its password, then run cpln workload force-redeployment RELEASE_NAME-documenso --gvc GVC_NAME. The boot line Certificate not found or not readable refers to a certificate file and can be ignored.Render refuses the install
Render refuses the install
cpln helm install fails with a message beginning documenso:, such as `location` must be a bare location NAME or enable exactly one database.Cause: A value is missing or invalid: a link-form or list location, an unknown storage.type, storage.s3 without credentials, or both or neither of postgres.enabled and postgresHA.enabled.Fix: Correct the value the message names and reinstall.Large upload is refused
Large upload is refused
storage.documentSizeLimitMb defaults to 5.Fix: Raise storage.documentSizeLimitMb and run cpln helm upgrade.Important Notes
- Close sign-up as soon as your account exists: set
signup.disabled: trueorsignup.allowedDomains. - Check the certificate after installing:
/api/certificate-statusmust return{"isAvailable":true}. - Never replace
encryptionKey: two-factor secrets and API tokens become unreadable. - Install into a GVC with one location and set
locationto it; the bundled PostgreSQL starts in every GVC location. - Switching from keyless S3 to static keys on an existing release leaves the AWS binding on the identity; reinstall to clear it.
- Without SMTP no mail is sent: send each signing link yourself.