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.
Étapes de configuration
Section intitulée « Étapes de configuration »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.
- 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).
- Visitez votre domaine Documenso -> cliquez Se connecter avec Keycloak. Le premier utilisateur devient l’admin de l’équipe.
- (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).
Variables d’environnement
Section intitulée « Variables d’environnement »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.
| Variable | Valeur par défaut |
|---|---|
DOCUMENSO_HOSTNAME | sign.yourdomain.com |
NEXTAUTH_SECRET | valeur aléatoire auto-générée |
DB_PASSWORD | valeur aléatoire auto-générée |
SIGNING_PASSPHRASE | valeur aléatoire auto-générée |
SMTP_TRANSPORT | (à définir avant déploiement) |
SMTP_HOST | (à définir avant déploiement) |
SMTP_PORT | 587 |
SMTP_USERNAME | (à définir avant déploiement) |
SMTP_PASSWORD | (à définir avant déploiement) |
SMTP_FROM_NAME | Documenso |
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.
Fichier compose
Section intitulée « Fichier compose »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