Avancé ⏱ 40 min de mise en œuvre Mis à jour le 11 août 2026

Héberger Documenso : la signature électronique open source (alternative à DocuSign)

Faire signer un contrat sans confier vos documents confidentiels à un SaaS étranger. Documenso est l'alternative open source à DocuSign. Voici comment l'héberger, avec la juste prudence juridique.

Faire signer un contrat, un devis ou un mandat implique souvent de transmettre des informations confidentielles à une plateforme tierce. Avec Documenso, une alternative open source à DocuSign, l’entreprise peut héberger elle-même son service de signature électronique et conserver la maîtrise de ses PDF, de ses comptes utilisateurs et de ses journaux d’activité.

Documenso permet d’importer un PDF, d’ajouter des signataires, de placer les champs à compléter, puis d’envoyer une demande par email. Chaque destinataire signe depuis son navigateur. Une fois le parcours terminé, la plateforme produit un document final scellé, accompagné des informations de suivi.

L’auto-hébergement renforce la souveraineté sur les données, à condition de sécuriser correctement le serveur. TalCloud propose une offre VPS hébergée en France, avec stockage NVMe, protection Anti-DDoS Netrix et support humain, à partir de 4,99 € par mois.

Signature électronique et valeur juridique : rester précis

Une signature électronique ne possède pas automatiquement le même niveau de garantie dans toutes les situations. En Europe, le règlement eIDAS distingue notamment les signatures électroniques simples, avancées et qualifiées.

Documenso fournit un mécanisme de signature électronique, une piste d’audit et un scellement cryptographique du PDF. Cela ne signifie pas qu’une installation auto-hébergée produit automatiquement une signature électronique qualifiée au sens d’eIDAS.

La valeur probante dépend notamment :

  • de l’identification du signataire ;
  • du processus d’authentification utilisé ;
  • de l’intégrité du document ;
  • de la traçabilité des actions ;
  • du certificat et du dispositif de signature ;
  • des exigences légales applicables au document concerné.

Une signature qualifiée eIDAS nécessite normalement l’intervention d’un prestataire de services de confiance qualifié et un dispositif conforme. Pour des actes réglementés, des contrats à fort enjeu ou des procédures contentieuses, il faut donc valider le niveau requis avec un juriste ou un spécialiste de la conformité.

Prérequis pour héberger Documenso

Une installation de production nécessite :

  • un VPS Linux disposant de Docker et de Docker Compose (voir installer Docker sur un VPS) ;
  • un nom de domaine, par exemple signature.example.fr ;
  • un enregistrement DNS pointant vers l’adresse du VPS ;
  • PostgreSQL 14 ou une version ultérieure ;
  • un compte SMTP fonctionnel ;
  • un certificat de signature au format .p12 ;
  • un reverse proxy capable de fournir HTTPS ;
  • une stratégie de sauvegarde externe.

Le compte SMTP est obligatoire pour le fonctionnement normal du parcours. Documenso doit pouvoir envoyer les invitations, les notifications et les emails de fin de signature. Une simple adresse email ne suffit pas : il faut un serveur SMTP, un port, un identifiant et un mot de passe ou une clé adaptés.

Avant le déploiement, configurez également SPF, DKIM et, si possible, DMARC sur le domaine expéditeur. Ces réglages réduisent le risque que les demandes de signature arrivent dans les courriers indésirables.

Générer les secrets et préparer le certificat

Créez trois valeurs indépendantes. Les versions actuelles de Documenso utilisent une clé d’authentification, une clé de chiffrement principale et une clé secondaire :

openssl rand -base64 32
openssl rand -base64 32
openssl rand -base64 32

Affectez les résultats respectivement à :

NEXTAUTH_SECRET=valeur_aleatoire_1
NEXT_PRIVATE_ENCRYPTION_KEY=valeur_aleatoire_2
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=valeur_aleatoire_3

Ne réutilisez pas le mot de passe PostgreSQL et ne publiez jamais ces valeurs dans Git. Une perte ou une modification imprévue des clés peut rendre certaines données chiffrées inutilisables.

Documenso exige aussi un certificat X.509 au format PKCS#12 pour sceller les PDF terminés. La documentation officielle décrit sa génération avec OpenSSL :

openssl genrsa -out private.key 2048
openssl req -new -x509 -key private.key -out certificate.crt -days 365
openssl pkcs12 -export -out certificate.p12 -inkey private.key -in certificate.crt

Choisissez une phrase secrète forte lors de l’export. Un certificat auto-signé peut assurer l’intégrité du PDF, mais les lecteurs PDF peuvent signaler que son émetteur n’est pas reconnu. Il ne confère pas, à lui seul, le statut de signature qualifiée. Pour la production, suivez la procédure correspondant à votre version dans la documentation officielle de Documenso et vérifiez les exigences propres à votre activité.

Le conteneur fonctionne avec un utilisateur non privilégié. Le fichier doit être lisible par cet utilisateur, sans devenir accessible à tous :

sudo chown 1001:1001 certificate.p12
sudo chmod 400 certificate.p12

Déployer Documenso avec Docker Compose

Créez un répertoire dédié contenant compose.yml, .env et certificate.p12. Voici une base de déploiement à adapter :

services:
  database:
    image: postgres:15
    restart: unless-stopped
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5
    volumes:
      - postgres_data:/var/lib/postgresql/data

  documenso:
    image: documenso/documenso:latest
    restart: unless-stopped
    depends_on:
      database:
        condition: service_healthy
    env_file:
      - .env
    environment:
      NEXT_PRIVATE_DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}
      NEXT_PRIVATE_DIRECT_DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}
      NEXT_PRIVATE_INTERNAL_WEBAPP_URL: http://documenso:3000
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - ./certificate.p12:/opt/documenso/cert.p12:ro

volumes:
  postgres_data:

En production, remplacez latest par une version précise après validation afin d’éviter une mise à niveau involontaire.

Le fichier .env peut prendre cette forme :

POSTGRES_USER=documenso
POSTGRES_PASSWORD=mot_de_passe_postgresql_tres_long
POSTGRES_DB=documenso

NEXTAUTH_SECRET=secret_authentification
NEXT_PRIVATE_ENCRYPTION_KEY=cle_chiffrement_principale
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=cle_chiffrement_secondaire

NEXT_PUBLIC_WEBAPP_URL=https://signature.example.fr

NEXT_PRIVATE_SMTP_TRANSPORT=smtp-auth
NEXT_PRIVATE_SMTP_HOST=smtp.example.fr
NEXT_PRIVATE_SMTP_PORT=587
NEXT_PRIVATE_SMTP_USERNAME=utilisateur_smtp
NEXT_PRIVATE_SMTP_PASSWORD=mot_de_passe_smtp
NEXT_PRIVATE_SMTP_SECURE=false
NEXT_PRIVATE_SMTP_FROM_NAME=Service signatures
NEXT_PRIVATE_SMTP_FROM_ADDRESS=signature@example.fr

NEXT_PRIVATE_SIGNING_TRANSPORT=local
NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=/opt/documenso/cert.p12
NEXT_PRIVATE_SIGNING_PASSPHRASE=phrase_secrete_du_certificat

Pour un serveur SMTP utilisant directement TLS sur le port 465, adaptez le port et la valeur de NEXT_PRIVATE_SMTP_SECURE. Protégez ensuite le fichier :

chmod 600 .env
docker compose --env-file .env up -d
docker compose ps
docker compose logs -f documenso

Vérifiez dans les journaux la connexion à PostgreSQL, l’exécution des migrations, le chargement du certificat et l’absence d’erreur SMTP.

Premier accès et compte administrateur

Ouvrez l’adresse déclarée dans NEXT_PUBLIC_WEBAPP_URL, puis créez le premier compte. Testez immédiatement la réception de l’email de vérification.

Un compte créé depuis l’interface n’est pas nécessairement administrateur. Pour lui attribuer ce rôle, utilisez la commande documentée pour la version déployée, par exemple :

docker compose exec database psql -U documenso -d documenso -c "UPDATE \"User\" SET roles = '{ADMIN}' WHERE email = 'admin@example.fr';"

Une fois les comptes autorisés créés, désactivez l’inscription publique :

NEXT_PUBLIC_DISABLE_SIGNUP=true

Appliquez le changement avec docker compose up -d.

Créer et envoyer un document à signer

Depuis le tableau de bord :

  1. Importez le contrat ou le devis au format PDF.
  2. Ajoutez les destinataires avec leur nom, leur adresse email et leur rôle.
  3. Placez les champs de signature, date, texte, initiales ou case à cocher.
  4. Affectez chaque champ au bon signataire.
  5. Contrôlez le document dans l’aperçu.
  6. Envoyez la demande.

Documenso transmet alors les invitations par email. Si rien n’arrive, examinez docker compose logs documenso, les identifiants SMTP et les journaux du fournisseur de messagerie.

Parcours côté signataire et document final

Le signataire ouvre le lien reçu, consulte le PDF et complète les champs dans son navigateur. Aucun logiciel de bureau n’est nécessaire. Lorsque tous les destinataires ont terminé, Documenso scelle cryptographiquement le PDF avec le certificat configuré et conserve les événements du parcours.

Il faut distinguer la date enregistrée dans la piste d’audit d’un horodatage de confiance délivré par une autorité d’horodatage. Si le dossier impose un horodatage opposable ou une conservation longue durée, configurez le service TSA approprié et faites valider le dispositif.

Activer HTTPS avec un reverse proxy

N’exposez pas directement le port 3000 sur Internet. Le mapping vers 127.0.0.1 permet à Nginx, Caddy, Traefik ou Nginx Proxy Manager d’être le seul point d’entrée public.

Le reverse proxy doit :

  • obtenir et renouveler le certificat TLS ;
  • rediriger HTTP vers HTTPS ;
  • transmettre l’hôte et le protocole d’origine ;
  • accepter des PDF de la taille prévue ;
  • conserver des délais suffisants pour les traitements.

NEXT_PUBLIC_WEBAPP_URL doit correspondre exactement à l’adresse HTTPS publique. Une URL incorrecte peut produire des liens d’invitation invalides ou des redirections incohérentes.

Sécuriser, mettre à jour et sauvegarder

Les contrats peuvent contenir des coordonnées, des montants, des clauses confidentielles ou des données RH. Limitez les ports ouverts avec le pare-feu, activez les mises à jour de sécurité du VPS, imposez des mots de passe robustes et protégez les comptes sensibles avec les méthodes d’authentification disponibles.

Avant chaque mise à jour, consultez les notes de version, sauvegardez les données, puis testez le parcours complet :

docker compose pull
docker compose up -d
docker compose ps

Sauvegardez PostgreSQL avec pg_dump :

mkdir -p backups
docker compose exec -T database pg_dump -U documenso -d documenso > backups/documenso-$(date +%F).sql

Conservez aussi, dans un emplacement chiffré et distinct :

  • certificate.p12 et sa phrase secrète ;
  • les clés de chiffrement et les secrets d’authentification ;
  • le stockage des documents si un volume ou un stockage objet est utilisé ;
  • la configuration du reverse proxy ;
  • les procédures de restauration.

Avec le stockage par défaut, les documents sont enregistrés dans PostgreSQL. Avec un stockage S3 compatible ou un volume distinct, celui-ci exige sa propre sauvegarde. Automatisez les copies hors du VPS et réalisez périodiquement une restauration sur une instance isolée. Notre guide sur la stratégie de sauvegarde d’un serveur complète cette approche. Une sauvegarde non testée ne garantit pas la reprise du service.