# 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](https://documenso.com/). 

Je l’avais déjà installé et testé, mais j’avais attendu avec impatience la compatibilité avec Nextcloud 29 de [Libresign](https://apps.nextcloud.com/apps/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é

```bash
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

```bash
sudo -u postgres createuser -P documenso
sudo -u postgres createdb -O documenso documenso
```

### Récupération du code

```bash
export VERSION=1.11.0
```

```bash
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

```bash
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, lors de l'installation initiale, contentez-vous d'éditer le fichier

### Compilation

```bash
sudo -u documenso npm ci
sudo -u documenso npm run build
```
### Migration de la base de données

```bash
sudo -u documenso npm run prisma:migrate-deploy
```

### Service systemd

```bash
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
ExecStart=/usr/bin/npm run start
TimeoutSec=15
Restart=always
SyslogIdentifier=documenso

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now documenso
```

### Configuration Nginx

```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;
    }
```