Passer au contenu principal

Signature électronique de documents : Documenso

J’ai une petite activité d’auto-entrepreneur (quelque soit le nom qui est maintenant donné à ce genre d’activité, j’ai autre chose à faire que d’apprendre les nouvelles désignations par un gouvernement qui n’a que ça à faire que de trouver de nouveaux noms aux choses) et pour éviter à mes clients d’imprimer mon devis, le signer, le scanner et me l’envoyer (ou de s’amuser à mettre eux-mêmes un scan de leur signature sur le pdf), j’ai cherché une solution de signature électronique de documents.

Le grand gagnant est Documenso.

Je l’avais déjà installé et testé, mais j’avais attendu avec impatience la compatibilité avec Nextcloud 29 de Libresign, et cela semblait fonctionner (d’après mes tests). L’avantage aurait bien évidemment été l’intégration à Nextcloud, plus besoin de téléverser le fichier à signer, hop, pratique.
Mais un client n’a pas réussi à signer un document. Comme j’ai autre chose à faire que débuguer ça avec un client à l’autre bout du fil, j’ai décidé de rester sur Documenso.

Installation

Bien évidemment, comme la plupart des logiciels de nos jours, la méthode d’installation suggérée est Docker. Pouah.

Création d’un utilisateur dédié

adduser --disabled-login \
         --disabled-password \
         --home /var/www/documenso \
         --no-create-home \
         --shell /bin/false \
         documenso

Création d’une base de données PostgreSQL

sudo -u postgres createuser -P documenso
sudo -u postgres createdb -O documenso documenso

Récupération du code et compilation

export VERSION=1.5.6
cd /var/www
git clone https://github.com/documenso/documenso.git
cd documenso
chown -R documenso: .
sudo -u documenso git co -b "v$VERSION" "v$VERSION"
sudo -u documenso npm ci
sudo -u documenso npm run build:web

Configuration

sudo -u documenso cp .env.example .env
sudo -u documenso vimdiff -c 'syn off | windo set wrap | winc h' .env .env.example

Migration de la base de données

sudo -u documenso npm run prisma:migrate-deploy

Service systemd

cat <<EOF > /etc/systemd/system/documenso.service
[Unit]
Description=documenso
After=network.target
After=postgresql.service
Requires=postgresql.service
PartOf=postgresql.service

[Service]
Type=simple
User=documenso
Environment=PATH=/var/www/documenso/node_modules/.bin/:/usr/local/bin:/usr/bin:/bin
WorkingDirectory=/var/www/documenso/apps/web
ExecStart=/var/www/documenso/node_modules/.bin/next start -p 3001
TimeoutSec=15
Restart=always
SyslogIdentifier=documenso

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now documenso

Configuration Nginx

    location / {
        include /etc/nginx/proxy_params;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://127.0.0.1:3001;
        proxy_redirect http://127.0.0.1:3001 https://documenso.example.org;
    }