Architecture et Intégration de DocuSeal : Déploiement d’une Plateforme Open Source de Signature Électronique pour les Entreprises

Moteur de Formulaire et Gestion des Flux Multi-Parties

DocuSeal repose sur un éditeur PDF interactif capable d'injecter dynamiquement plus de vingt-quatre types de champs. Le module de construction, situé dans app/javascript/template_builder/, utilise une architecture orientée composants Vue.js pour offrir une expérience responsive. La gestion des règles conditionnelles et des calculs intégrés est centralisée dans field_settings.vue.

L'orchestration des signatures supporte des chaînes séquentielles ou des parallélisations. Le modèle Submission coordonne l'ordre d'intervention via la propriété submitter_sequence et applique des restrictions granulaires basées sur les profils métiers. Chaque interaction génère un journal d'audit immuable grâce au service lib/submissions/generate_audit_trail.rb, qui agrège les horodatages, empreintes réseau et métadonnées terminal.

Optimisation Mobile et Rendu Vectoriel

L'accès externe ne nécessite aucun client dédié. Le contrôleur expose un point de terminaison redéfini pour produire des liens de transfert sécurisés et leur équivalent graphique :

# app/controllers/templates_qr_link_controller.rb
def retrieve_qr_representation
  return render plain: 'restricted', status: :forbidden unless @template.shareable?

  target_endpoint = submission_entry_path(
    slug_reference: @template.identifier,
    domain_origin: link_router_host
  )
  
  encoder_instance = RQRCode::QRCode.new(target_endpoint, level: :quartile)
  @svg_stream = encoder_instance.as_svg(
    foreground: '111111',
    background: 'fafafa',
    path_type: 'all',
    include_xml_header: false
  )
  
  render layout: false
end

Intrados Technologique et Persistances

L'application s'appuie sur Ruby on Rails 7, PostgreSQL pour les relations complexes et Active Storage pour la gestion du cycle de vie des binaires. Sidekiq absorbe les traitements CPU-intensifs (rendu PDF, dispatching). La segmentation tenant-aware découple explicitement Account et User, préparant l'environnement au multilocataire. Les protocoles RESTful, référencés dans docs/api/, exigent une authentification Bearer et retournent des sérialisations JSON strictes.

Côté présentation, Vue 3 et Tailwind CSS forment la stack UI. Turbo Drive fluidifie la navigation client-side, tandis que les modules dans app/javascript/submission_form/ intègrent le tracé manuscrit, les validateurs natifs et la persistance incrémentale.

Conteneurisation et Topologies de Déploiement

La livraison s'uniformise via docker-compose.yml. Une configuration isolant les dépendances critiques :

# docker-compose.platform.yml
services:
  frontend-gateway:
    image: registry.docuseal.io/core:v2-stable
    ports:
      - "9090:8080"
    volumes:
      - ./persisted-assets:/opt/docuseal/storage
    depends_on:
      - sql-primary
      - queue-cache

sql-primary:
  image: postgres:16-alpine
  environment:
    PGDATA: /var/lib/postgresql/data/pgdata
    POSTGRES_DB: seal_platform
  volumes:
    - pg_volumes:/var/lib/postgresql/data

queue-cache:
  image: redis:7-alpine
  command: redis-server --maxmemory 256mb --policy allkeys-lru

Cette modularité autorise trois scénarios : développement léger (SQLite embarqué), production haute charge (PostgreSQL + Redis Sentinel), ou orchestration cloud (Helm chart public).

Systèmes Éventuels et Connecteurs Frontend

Au-delà des appels synchrones, un bus Webhook propage les changements d'état. La validation cryptographique des payloads repose sur HMAC-SHA256, configurée via webhook_validation_middleware.rb. Les événements triggerables incluent flow.completed, form.revoked, template.modifier.

Pour l'injection native, des wrappers officiels (@docuseal/react, @docuseal/vue) fournissent des composants fédérés communiquant via OAuth2 ou clés API rotatives.

Gouvernance, Chiffrement et Conformité

La traçabilité légale suit le standard PKCS#7 avec option de timestamping RFC 3161. Les attributs sensibles (captations graphiques, journaux intermédiaires) traversent un gestionnaire EncryptedFieldStrategy supportant le rotationnement AES-256. Les stratégies de rétention et les logs d'accès respectent les directives RGPD. Un job planifié permet l'anonymisation ou l'archivage froid conforme.

Tuning Requêtes et Observabilité

Les requêtes d'agrégation bénéficient d'indexes partielles ciblant les flux opérationnels :

-- Index composite filtré pour limiter la couverture aux documents actifs
CREATE INDEX idx_flow_account_ref_state 
ON flows(owner_account_id, template_reference_id, initiated_at DESC) 
WHERE lifecycle_phase = 'active' AND tombstone IS NULL;

Les convresions documentaires utilisent des workers Sidekiq priorisés. Les métriques Prometheus s'exposent via config/initializers/telemetry.rb. Les indicateurs sentinelles couvrent le latency P95, la taille des files d'attente, et la saturation disque. Les enomalies courantes proviennent de timeouts DB, de saturations S3-compatibles, ou de désalignements TLS.

Provisionnement et Validation Pré-Production

Initialisation rapide de l'environnement de travail :

git clone https://gitcode.com/GitHub_Trending/do/docuseal.git
cd docuseal
cp .env.template .env.custom
docker compose up --build

Exécution des validations fonctionnelles avant industrialisation :

bin/setup
bundle exec rspec spec/ --tag ~slow --format progress

Étiquettes: ruby-on-rails vue-js docuseal signature-electronique Docker

Publié le 24 août à 19h12