Aller au contenu

PD-2 — Plan d'implémentation


📚 Navigation User Story | Document | | | ---------- | -- | | 📋 [Spécification](PD-2-specification.md) | | | 🛠️ **Plan d'implémentation** | *(ce document)* | | ✅ [Critères d'acceptation](PD-2-acceptability.md) | | | 📝 Retour d'expérience | *(à venir)* | [← Retour à infrastructure-souveraine](../PD-193-epic.md) · [↑ Index User Story](index.md)

Objectif

Provisionner une instance PostgreSQL managée sur OVH Cloud avec configuration sécurisée et haute disponibilité.

Choix techniques retenus

  • Service : OVH Database (PostgreSQL 15)
  • Région : GRA (Gravelines, France)
  • Plan : Business (HA avec réplication)
  • Encryption : At-rest et in-transit
  • Backup : Automatique quotidien

Architecture ciblée

terraform/
├── database-ovh.tf         # Configuration PostgreSQL
└── variables.tf            # Variables DB

Découpage technique

Phase 1 : Provisioning instance

  1. Créer ressource Terraform :
resource "ovh_cloud_project_database" "postgresql" {
  service_name = var.ovh_project_id
  description  = "ProbatioVault PostgreSQL"
  engine       = "postgresql"
  version      = "15"
  plan         = "business"
  flavor       = "db1-4"

  nodes {
    region     = "GRA"
    subnet_id  = var.subnet_id
    network_id = var.network_id
  }
}

Phase 2 : Configuration sécurité

  1. Activer SSL obligatoire
  2. Configurer IP whitelist
  3. Créer utilisateur applicatif (pas postgres)
  4. Stocker credentials dans Vault

Phase 3 : Databases et schemas

  1. Créer database probatiovault
  2. Créer schémas :
  3. public (users, configs)
  4. vault_secure (documents, envelopes)
  5. Créer rôles :
  6. probatio_app (applicatif)
  7. probatio_admin (maintenance)

Phase 4 : Extensions

  1. Activer extensions :
  2. uuid-ossp (UUID generation)
  3. pgcrypto (fonctions crypto)

Phase 5 : Backup

  1. Configurer rétention :
  2. Backups automatiques : 7 jours
  3. Point-in-time recovery : 24h

  4. Tester restoration

Phase 6 : Monitoring

  1. Activer métriques OVH
  2. Configurer alertes :
  3. CPU > 80%
  4. Connexions > 80% max
  5. Disk usage > 85%

Phase 7 : Connection string

  1. Stocker dans Vault :
vault kv put secret/database/postgresql \
  url="postgres://user:pass@host:port/db?sslmode=require"
  1. Référencer dans backend NestJS

Points de vigilance

  • SSL : sslmode=require obligatoire
  • Credentials : Rotation régulière
  • vRack : Accès interne uniquement
  • PITR : Tester régulièrement

Hors périmètre

  • Schémas applicatifs (→ PD-15, PD-16)
  • Réplication cross-région (→ future US)
  • Read replicas (→ future US)