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.