Aller au contenu

Architecture générale

Vue d'ensemble

MesMy est déployé sur un VPS unique, entièrement en conteneurs Docker Compose, derrière un reverse-proxy externe (déjà présent) qui termine le TLS et route les domaines. La stack MesMy n'inclut donc aucun reverse-proxy.

flowchart LR
  subgraph Internet
    U[Utilisateur / App tierce]
  end
  RP[Reverse-proxy externe<br/>TLS + routage]
  subgraph VPS [VPS - Docker Compose]
    B[backend NestJS<br/>:4000]
    F[frontend Next.js<br/>:3000]
    PG[(PostgreSQL)]
    RD[(Redis)]
  end
  U --> RP
  RP -->|auth.mesmy.fr| B
  RP -->|apps.mesmy.fr| F
  B --- PG
  B --- RD
  F -.appels API.-> B

Domaines

Domaine Rôle Service
auth.mesmy.fr Issuer OIDC + API métier + pages d'interaction backend NestJS
apps.mesmy.fr Portail utilisateur + back-office admin frontend Next.js
mesmy.fr Site vitrine (hors périmètre)

Les cookies de session OIDC sont scellés sur le domaine .mesmy.fr afin d'être partagés entre le portail et l'issuer (sous-domaines du même site).

Composants

  • Backend (NestJS, TypeScript strict) — héberge le moteur OIDC (oidc-provider, intégré via import ESM dynamique), l'API métier (utilisateurs, invitations, comptes, admin) et les pages d'interaction de connexion. Persistance métier via Prisma / PostgreSQL ; sessions, codes et tokens OIDC via Redis.
  • Frontend (Next.js App Router, TailwindCSS) — portail mobile-first : connexion, activation de compte, tableau de bord des applications, « Mon compte », back-office.
  • PostgreSQL — base de données métier (non exposée hors du réseau Docker).
  • Redis — sessions/codes/tokens OIDC + rate limiting (non exposé).

Choix structurants

Sujet Décision
Monorepo pnpm workspaces + Turborepo (apps/backend, apps/frontend, packages/shared, examples/).
ORM Prisma (typage fort, migrations déclaratives).
Signature des tokens RS256 (clé asymétrique, vérifiable par les clients via JWKS).
Mots de passe Argon2id.
Secrets au repos AES-256-GCM (secrets clients OIDC et secrets TOTP).
Emails API Mailjet, encapsulée derrière un service remplaçable.

Le détail complet des décisions et de leur justification figure dans le dossier de conception.