summaryrefslogtreecommitdiff
path: root/documentation/techno.md
diff options
context:
space:
mode:
authorertopogo <erwin.t.pombett@gmail.com>2026-04-06 13:50:16 +0200
committerertopogo <erwin.t.pombett@gmail.com>2026-04-06 13:50:16 +0200
commit96615b46a72e7902f7ade2619b21649bf41b2b1b (patch)
treed33c565ddf80ca3e5b1809d361470dea29d86ea2 /documentation/techno.md
parent202f3256fa1bb60a72322ca1c4c3b5e6ffca212a (diff)
documentation zero trust
Diffstat (limited to 'documentation/techno.md')
-rw-r--r--documentation/techno.md124
1 files changed, 124 insertions, 0 deletions
diff --git a/documentation/techno.md b/documentation/techno.md
new file mode 100644
index 0000000..d03dd5b
--- /dev/null
+++ b/documentation/techno.md
@@ -0,0 +1,124 @@
+# Choix technologiques — Der-topogo
+
+Site de consulting IAM et sécurité informatique, avec contenu éditable via un CMS headless intégré à l’application.
+
+## Architecture générale
+
+- **Application full-stack** : [Next.js](https://nextjs.org/) (App Router) en TypeScript, avec sortie **standalone** pour des images Docker légères et un déploiement prévisible.
+- **CMS** : [Payload CMS](https://payloadcms.com/) v3, embarqué dans Next via `@payloadcms/next` (routes admin et API sous le même processus Node).
+- **Base de données** : [PostgreSQL](https://www.postgresql.org/) via l’adaptateur officiel `@payloadcms/db-postgres` (chaîne `DATABASE_URI` / variable d’environnement). La base n’est pas fournie par le `docker-compose` du dépôt : elle est attendue en externe ou sur un autre compose.
+- **Médias** : volume Docker `app_media` monté sur `/app/media` pour la persistance des fichiers uploadés depuis Payload.
+- **Reverse proxy / TLS** : [Caddy](https://caddyserver.com/) en production (TLS automatique Let’s Encrypt sur le domaine public, TLS interne pour l’accès LAN). Compression gzip/zstd, en-têtes de sécurité alignés avec ceux définis dans Next.
+
+## Choix détaillés
+
+| Domaine | Choix | Raison |
+|--------|--------|--------|
+| Framework UI | Next.js + React | SSR/SSG, intégration native avec Payload, écosystème mature. |
+| Langage | TypeScript (strict) | Typage des collections Payload et du front, maintenance à long terme. |
+| Styles | Tailwind CSS v4 + PostCSS | Utilitaires, cohérence visuelle, build via `@tailwindcss/postcss`. |
+| Éditeur riche | Lexical (`@payloadcms/richtext-lexical`) | Éditeur moderne supporté officiellement par Payload 3. |
+| Animations | Framer Motion | Animations déclaratives côté client sans réécrire la logique de layout. |
+| Icônes | Lucide React | Jeu d’icônes léger et cohérent avec React. |
+| Classes CSS conditionnelles | `clsx` + `tailwind-merge` | Composition de classes et fusion sans conflits avec Tailwind. |
+| Images | `sharp` | Requis / recommandé par Next pour l’optimisation d’images en production. |
+| API Payload / introspection | `graphql` | Dépendance utilisée par l’écosystème Payload pour GraphQL. |
+| Déploiement app | Docker multi-stage (Node 20 Alpine) | `npm ci`, build Next, image finale non-root (`nextjs`) exposant le port 3000. |
+| Télémétrie | `NEXT_TELEMETRY_DISABLED=1` | Désactivée dans l’image Docker. |
+
+## Sécurité HTTP (résumé)
+
+- En-têtes côté Next : `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy`, `Permissions-Policy` (voir `next.config.ts`).
+- Caddy renforce HSTS sur le site public et reprend des en-têtes similaires sur les deux blocs de site.
+
+---
+
+# Paquets et logiciels installés / référencés
+
+Les **versions exactes** des paquets npm transitifs sont dans `package-lock.json` à la racine du dépôt. Après `npm install`, la commande `npm ls` liste l’arbre complet.
+
+## Dépendances de production (`dependencies` dans `package.json`)
+
+| Paquet | Rôle |
+|--------|------|
+| `payload` | Moteur CMS (collections, auth, API REST/GraphQL). |
+| `@payloadcms/next` | Intégration Next.js (handler, build). |
+| `@payloadcms/db-postgres` | Persistance PostgreSQL (Drizzle sous le capot côté Payload). |
+| `@payloadcms/richtext-lexical` | Champ rich text Lexical dans l’admin. |
+| `graphql` | Support GraphQL attendu par Payload. |
+| `sharp` | Traitement d’images pour `next/image`. |
+| `framer-motion` | Animations React. |
+| `lucide-react` | Icônes SVG. |
+| `clsx` | Concaténation conditionnelle de noms de classes. |
+| `tailwind-merge` | Fusion des classes Tailwind sans doublons contradictoires. |
+
+## Dépendances de développement (`devDependencies`)
+
+| Paquet | Rôle |
+|--------|------|
+| `next` | Framework (installé comme dépendance transitive via l’écosystème Next / ESLint ; version figée dans le lockfile). |
+| `react` / `react-dom` | Installés avec Next (versions dans le lockfile). |
+| `typescript` | Typage (souvent amené par Next selon le template). |
+| `tailwindcss` | Moteur Tailwind v4. |
+| `@tailwindcss/postcss` | Plugin PostCSS pour Tailwind 4. |
+| `postcss` | Pipeline CSS. |
+| `eslint` | Lint JavaScript/TypeScript. |
+| `eslint-config-next` | Règles ESLint alignées sur la version de Next utilisée. |
+
+> **Note** : Le fichier `package.json` ne liste pas explicitement `next` ni `react` : ils sont tirés par les outils (p. ex. `eslint-config-next`) et le scaffold Next ; les versions réellement installées sont celles du **lockfile**.
+
+## Infrastructure (hors `node_modules`)
+
+| Composant | Détail |
+|-----------|--------|
+| **Node.js** | Ligne de base des images : **20** (variante **Alpine** dans le `Dockerfile`). |
+| **npm** | Utilisé pour `npm ci` et les scripts (`build`, `start`, etc.). |
+| **Docker** | Build multi-étapes : `deps` → `builder` → `runner`. |
+| **PostgreSQL** | Attendu via `DATABASE_URI` ; non défini dans le compose minimal du repo. |
+| **Caddy** | Fichier `Caddyfile` à la racine : reverse proxy vers `app:3000`, logs, TLS. |
+
+## Fichiers de configuration utiles
+
+- `package.json` / `package-lock.json` — dépendances npm.
+- `next.config.ts` — Next + `withPayload`, standalone, en-têtes, alias Webpack.
+- `tsconfig.json` — chemins `@/*` et `@payload-config`.
+- `postcss.config.mjs` — Tailwind via PostCSS.
+- `src/payload.config.ts` — collections, Lexical, Postgres.
+- `Dockerfile` — image de production.
+- `docker-compose.yml` — service `app`, volume médias, `env_file: .env.local`.
+- `Caddyfile` — exposition HTTPS et proxy.
+
+## Flux Git de déploiement (mémo)
+
+Ce flux est déjà décrit en détail dans `DEPLOY.md`. Rappel opérationnel rapide :
+
+### 1) Depuis le poste de dev (push vers Chillka)
+
+```bash
+git add .
+git commit -m "message"
+git push origin main
+```
+
+### 2) Sur Huitral (pull + redéploiement)
+
+```bash
+ssh toshiro@huitral
+cd /var/www/der-topogo
+git pull origin main
+docker compose up -d --build
+```
+
+### 3) Vérification rapide
+
+```bash
+docker compose ps
+curl -Ik https://dt.arauco.online
+curl -Ik https://dt.huitral.ruka.lan
+```
+
+Si le certificat local est auto-signé, utiliser `curl -Ik` (avec `-k`) sur le domaine LAN.
+
+---
+
+*Document généré pour décrire l’état du dépôt ; mettre à jour ce fichier lors d’ajouts ou de montées de version majeures des dépendances.*