Aller au contenu

Documenso (déprécié)

DÉPRÉCIÉ depuis 2026-04-29 — conservé au catalogue le temps de la migration. Les nouveaux déploiements doivent utiliser DocuSeal. Signature électronique de documents open-source — téléversez un PDF, placez les champs de signature, envoyez pour signature. Keycloak SSO pré-câblé.

  • Projet original : https://documenso.com/
  • Remplace : DocuSign, HelloSign, PandaDoc, Adobe Sign
  • Connexion (SSO) : Pré-câblé — la page de connexion affiche “Se connecter avec Keycloak” d’emblée, aucune étape post-déploiement.

Déprécié : les nouveaux déploiements doivent utiliser DocuSeal à sign.<votre-domaine>. Cette entrée est conservée à sign-legacy.<votre-domaine> le temps de la migration. Pour migrer : déployez DocuSeal, recréez vos templates, puis supprimez ce compose Documenso.

  1. Cliquez Deploy. Les valeurs par défaut sont pré-remplies ; le premier démarrage génère automatiquement un certificat de signature auto-signé (~30 s).
  2. Visitez votre domaine Documenso -> cliquez Se connecter avec Keycloak. Le premier utilisateur devient l’admin de l’équipe.
  3. (Optionnel) Remplacez le certificat auto-signé par un certificat émis par une autorité de certification de confiance pour les signatures à valeur légale. En attendant, les PDF signés s’affichent correctement, mais Adobe / Acrobat / les navigateurs marqueront la signature comme “émise par une racine non fiable”. Contactez votre opérateur pour installer un vrai certificat dans le volume Docker documenso-signing.

Certificat auto-signé vs certificat d’une AC de confiance

Section intitulée « Certificat auto-signé vs certificat d’une AC de confiance »

Le premier déploiement génère un certificat PKCS12 auto-signé valide 10 ans pour que Documenso démarre tel quel. Les documents signés avec ce certificat sont cryptographiquement valides (la mathématique fonctionne), mais l’identité de signature est le nom d’hôte de votre VPS, pas l’identité de votre entreprise, et Adobe Acrobat et les navigateurs affichent un bandeau jaune (“pas d’une racine de confiance”) à chaque vérification.

Pour les workflows internes (formulaires RH, prise en charge fournisseur, NDA entre parties déjà en confiance), le certificat auto-signé suffit. Pour les contrats signés face client, contactez votre opérateur pour installer un certificat émis par une AC. La mise à niveau ne perturbe rien — remplacez cert.p12 dans le volume documenso-signing, redémarrez le conteneur Documenso.

Sans SMTP configuré, les e-mails de demande de signature ne sont pas envoyés. Les destinataires voient quand même les demandes en attente dans leur tableau de bord Documenso s’ils s’y connectent. Pour activer les e-mails, renseignez les variables SMTP_* (la documentation de votre fournisseur d’e-mails transactionnels a l’hôte, le port et les identifiants).

Ces valeurs se trouvent dans l’onglet Environment du compose Dokploy. Les secrets aléatoires sont générés automatiquement au premier semi du template — vous n’avez pas à les générer vous-même.

VariableValeur par défaut
DOCUMENSO_HOSTNAMEsign.yourdomain.com
NEXTAUTH_SECRETvaleur aléatoire auto-générée
DB_PASSWORDvaleur aléatoire auto-générée
SIGNING_PASSPHRASEvaleur aléatoire auto-générée
SMTP_TRANSPORT(à définir avant déploiement)
SMTP_HOST(à définir avant déploiement)
SMTP_PORT587
SMTP_USERNAME(à définir avant déploiement)
SMTP_PASSWORD(à définir avant déploiement)
SMTP_FROM_NAMEDocumenso
SMTP_FROM_ADDRESS(à définir avant déploiement)
  • Service et port : documenso:3000
  • Nom d’hôte : sign-legacy.yourdomain.com

Le nom d’hôte est attaché automatiquement au semi du template ; modifiez-le dans l’onglet Domains avant de cliquer Deploy si vous souhaitez autre chose.

Pour référence — c’est ce que le template déploie. Ne collez ceci nulle part. Le compose est semé dans Dokploy automatiquement ; les ajustements côté client se font dans les onglets Environment et Domains (décrits plus haut), jamais dans le compose lui-même.

# DEPRECATED 2026-04-29 (F5a). New deploys should use DocuSeal instead;
# this file is kept in tree for the migration window so existing
# clients can continue running Documenso until they cut over. The
# catalog entry's setup_steps section also surfaces the deprecation.
#
# Documenso -- open-source document signing (DocuSign / HelloSign / PandaDoc
# replacement). Keycloak SSO pre-wired via env-based OIDC; the operator's
# automation mints the realm client + populates OIDC_* env on first
# converge.
#
# Signing certificate: an init container generates a self-signed PKCS12
# cert at first boot so "click Deploy" works out of the box. For
# legally-binding signatures, ask your operator to install a CA-issued
# cert into the signing volume; upstream's signing-cert docs are at
# https://docs.documenso.com/developers/local-development/signing-certificate
# for the volume layout.
services:
cert-init:
# One-shot init: if the signing cert volume is empty, mint a
# self-signed PKCS12 cert with a known passphrase. Idempotent --
# exits 0 immediately if /signing/cert.p12 already exists, so an
# operator who replaced the cert with a real CA-issued one is not
# overwritten.
image: alpine:3.23
restart: "no"
command: >-
sh -c "set -eu;
if [ -f /signing/cert.p12 ]; then
echo 'cert.p12 already present, skipping mint';
exit 0;
fi;
apk add --no-cache openssl > /dev/null;
openssl req -x509 -newkey rsa:4096 -keyout /tmp/key.pem -out /tmp/cert.pem
-days 3650 -nodes -subj '/CN=${DOCUMENSO_HOSTNAME}'
-addext 'keyUsage=digitalSignature,nonRepudiation' > /dev/null 2>&1;
openssl pkcs12 -export -out /signing/cert.p12 -inkey /tmp/key.pem
-in /tmp/cert.pem -passout pass:${SIGNING_PASSPHRASE} > /dev/null 2>&1;
chmod 600 /signing/cert.p12;
echo 'self-signed cert.p12 minted at /signing/cert.p12';"
volumes:
- documenso-signing:/signing
networks:
- default
documenso:
image: documenso/documenso:v2.10.1
restart: unless-stopped
environment:
PORT: "3000"
NEXTAUTH_URL: https://${DOCUMENSO_HOSTNAME}
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
NEXT_PUBLIC_WEBAPP_URL: https://${DOCUMENSO_HOSTNAME}
NEXT_PUBLIC_UPLOAD_TRANSPORT: database
NEXT_PRIVATE_DATABASE_URL: postgres://documenso:${DB_PASSWORD}@db:5432/documenso
NEXT_PRIVATE_DIRECT_DATABASE_URL: postgres://documenso:${DB_PASSWORD}@db:5432/documenso
NEXT_PRIVATE_SIGNING_TRANSPORT: local
NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH: /opt/documenso/cert.p12
NEXT_PRIVATE_SIGNING_PASSPHRASE: ${SIGNING_PASSPHRASE}
# Keycloak OIDC -- populated by dashboard-sync after first deploy.
# Documenso's own env-var names are NEXT_PRIVATE_OIDC_*; we
# remap from the generic OIDC_* keys dashboard-sync writes into
# Dokploy's env, matching the pattern in outline.compose.yml.
NEXT_PRIVATE_OIDC_WELL_KNOWN: ${OIDC_DISCOVERY_URL}
NEXT_PRIVATE_OIDC_CLIENT_ID: ${OIDC_CLIENT_ID}
NEXT_PRIVATE_OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
NEXT_PRIVATE_OIDC_PROVIDER_LABEL: Keycloak
NEXT_PRIVATE_OIDC_ALLOW_SIGNUP: "true"
# SMTP -- Documenso uses NEXT_PRIVATE_SMTP_* names. Optional;
# when unset, in-app invitations and signature requests do not
# email users (they still appear in the dashboard for a
# logged-in user to act on, just no email).
NEXT_PRIVATE_SMTP_TRANSPORT: ${SMTP_TRANSPORT:-}
NEXT_PRIVATE_SMTP_HOST: ${SMTP_HOST:-}
NEXT_PRIVATE_SMTP_PORT: ${SMTP_PORT:-587}
NEXT_PRIVATE_SMTP_USERNAME: ${SMTP_USERNAME:-}
NEXT_PRIVATE_SMTP_PASSWORD: ${SMTP_PASSWORD:-}
NEXT_PRIVATE_SMTP_FROM_NAME: ${SMTP_FROM_NAME:-Documenso}
NEXT_PRIVATE_SMTP_FROM_ADDRESS: ${SMTP_FROM_ADDRESS:-}
volumes:
- documenso-signing:/opt/documenso:ro
depends_on:
db:
condition: service_healthy
cert-init:
condition: service_completed_successfully
labels:
- "vps.auth.mode=public"
- "vps.auth.oidc=true"
- "vps.auth.groups=client-staff"
- "vps.auth.oidc.redirect_uris=https://${DOCUMENSO_HOSTNAME}/api/auth/callback/oidc"
- "vps.auth.oidc.scopes=openid email profile"
- "vps.auto-update=patch"
networks:
dokploy-network:
aliases:
- documenso
default: {}
db:
image: postgres:16.13-alpine
restart: unless-stopped
environment:
POSTGRES_USER: documenso
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: documenso
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U documenso"]
interval: 10s
timeout: 5s
retries: 5
labels:
- "vps.auto-update=patch"
networks:
- default
volumes:
documenso-signing:
db-data:
networks:
dokploy-network:
external: true

<- Retour au catalogue des applications pré-configurées