Debian Dev4 24698b0b64 fix: replace hardcoded localhost:8080 with environment variables
- Fix IdNot API calls to use FrontendVariables instead of hardcoded localhost:8080
- Fix Customers API calls to use FrontendVariables instead of hardcoded localhost:8080
- Add missing FrontendVariables import in Customers.ts
- Resolves API calls using localhost:8080 instead of configured HTTPS endpoints
2025-09-16 21:51:59 +00:00

90 lines
5.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### CI/CD — Fonctionnement observé et architecture de déploiement
Cette documentation décrit le pipeline CI/CD tel quil peut être déduit des artefacts présents dans le dépôt: `Dockerfile`, `package.json`, et les manifestes Kubernetes rendus dans `temp.yaml`. Aucune configuration de pipeline explicite nest présente dans le dépôt (pas de `.gitea/`, `.github/workflows/`, `.gitlab-ci.yml`, `.drone.yml`). Le flux ci-dessous sappuie donc sur ces éléments pour décrire le fonctionnement attendu.
### Portée
- **Build applicatif**: Next.js (Node 19-alpine) avec dépendance privée `le-coffre-resources` via SSH.
- **Image Docker**: construction multi-étapes, publication attendue vers un registre Scaleway Container Registry.
- **Déploiement Kubernetes**: namespace `lecoffre`, intégration Vault Agent pour linjection dENV, `ExternalSecret` pour le secret de pull Docker, `Ingress` TLS via cert-manager, ressources de `Deployment`/`Service`.
### Chaîne de build
- **Dépendances**
- `package.json` indique Next.js 14, TypeScript 4.9, ESLint 8.36, etc.
- La dépendance privée `le-coffre-resources` est récupérée depuis `git.4nkweb.com` via SSH (`git+ssh`).
- **Dockerfile** (multi-étapes, Node 19-alpine)
- Étape `deps`: installation des dépendances avec `npm install` en utilisant BuildKit et le forward dagent SSH pour accéder au dépôt privé.
- Étape `development`: copie du code, exécution sous un utilisateur non-root, commande par défaut `npm run dev` (pour le développement local). Pour la prod, limage utilisée en cluster exécute `npm run start` (cf. manifeste).
- **Build Next.js**
- Script `build`: `NEXT_TELEMETRY_DISABLED=1 next build --no-lint`
- Script `start`: `next start`
- Le lint nest pas bloquant au build (flag `--no-lint`).
### Image, registre et version
- **Image utilisée en cluster**: `rg.fr-par.scw.cloud/lecoffre/front:v0.1.9` (cf. `temp.yaml`).
- **Registre**: Scaleway Container Registry (région `fr-par`).
- **Tagging**: la version dexemple observée est `v0.1.9`. Lorigine du tag (automatique via CI, ou manuel) nest pas dans le dépôt.
### Déploiement Kubernetes (extrait de `temp.yaml`)
- **Namespace**: `lecoffre`
- **ServiceAccount**: `lecoffre-front-sa` avec `Secret` token associé.
- **ExternalSecret**: création de `imagePullSecret` à partir de Vault via `external-secrets.io` en lisant `secret/data/lecoffre-front-stg/config/dockerpullsecret` (clé `.dockerconfigjson`).
- **Deployment**: `apps/v1` nommé `lecoffre-front` avec:
- `image`: `rg.fr-par.scw.cloud/lecoffre/front:v0.1.9`
- `imagePullPolicy`: `Always`
- `resources`: `requests` (cpu 200m, ram 1Gi), `limits` (ram 2Gi)
- **Vault Agent Injector**: annotations pour injecter des variables denvironnement depuis `secret/data/lecoffre-front-stg/config/envs` en exportant chaque paire `clé=valeur` dans `/vault/secrets/envs`.
- **Commande de démarrage**: `['sh','-c', '. /vault/secrets/envs && npm run start']`
- **Service**: type ClusterIP exposant le port 80 vers le `targetPort` 3000 du conteneur Next.js.
- **Ingress**: classe `nginx` avec TLS géré par `cert-manager` (ClusterIssuer `letsencrypt-prod`) pour `app.stg.lecoffre.smart-chain.fr`.
### Flux CI/CD attendu (déduit)
1. **Checkout + préparation**
- Récupération du code et configuration de lagent SSH (accès à `git.4nkweb.com`).
2. **Installation des dépendances**
- `npm install` avec BuildKit (`--mount=type=ssh`) pour la dépendance privée.
3. **Build applicatif**
- `npm run build` (désactive la télémétrie et le lint bloquant).
4. **Construction de limage**
- `docker build` avec BuildKit et forward dagent SSH.
- Taggage semver (ex. `v0.1.9`) et éventuellement `latest`/environnement (non constaté ici).
5. **Push au registre**
- `docker push rg.fr-par.scw.cloud/lecoffre/front:<tag>`.
6. **Déploiement Kubernetes**
- Application des manifestes (ou rendu Helm) dans le namespace `lecoffre`.
- Les secrets de pull sont fournis via `ExternalSecret` connecté à Vault.
- Au runtime, Vault Agent injecte les variables denvironnement nécessaires avant `npm run start`.
### Sécurité et secrets
- **Build**: le forward dagent SSH évite décrire la clé privée dans limage.
- **Runtime**: aucune variable sensible nest stockée dans limage; elles sont injectées à lexécution par Vault.
- **Pull de limage**: la config Docker (`.dockerconfigjson`) est fournie par `ExternalSecret` à partir de Vault.
### Points à confirmer
- Outil CI utilisé (Gitea Actions, Woodpecker/Drone, GitLab CI, autre) et fichiers de pipeline hébergés ailleurs.
- Règles de nommage des tags dimage et gouvernance de version (`vX.Y.Z`, tags denvironnement).
- Stratégie de déploiement (Helm chart source exact, commandes dapply, gestion multi-env: dev/stg/prod).
- Politique de lint/test avant build (actuellement `--no-lint` au build Next.js).
### Bonnes pratiques recommandées
- Activer un job de lint et tests unitaires avant build dimage.
- Signer les images (Cosign) et activer des scans SCA/Container.
- Gérer explicitement les tags et le changelog en CI.
- Déployer via Helm chart versionné, avec valeurs par environnement (`values.{env}.yaml`).