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
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 checkout -b "v$VERSION" "v$VERSION"
Configuration
sudo -u documenso cp .env.example .env
sudo -u documenso vimdiff -c 'syn off | windo set wrap | winc h' .env .env.example
NB : le vimdiff
ne sert que lors d'une mise à jour
Compilation
sudo -u documenso npm ci
sudo -u documenso npm run build:web
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;
}