# Configurer et exploiter Flexway

> Chaque page dit ce qui en est construit et depuis quelle version. Les versions citées sont des jalons de la feuille de route, pas des tags de release : une…

Concept - Depuis la version 0.1.0 - Flexway v1.6.3 - https://flexway.io/docs/operations-overview/

> Guide d'exploitation : configurer, déployer et observer la passerelle. Ce que fait la capacité côté produit : [guide produit](https://flexway.io/docs/product-overview/) ; l'appeler : [guide développeur](https://flexway.io/docs/developer-overview/).

> Chaque page dit ce qui en est construit et depuis quelle version. Les versions citées sont des
> **jalons de la feuille de route**, pas des tags de release : une release livre tous les jalons
> fusionnés avant elle, et le contenu d'un tag se lit dans les [releases](https://github.com/flexwiz/flexway/releases).

## 1. Prérequis

> - Un contrat **OpenAPI 3.1** valide. C'est la seule entrée obligatoire.
> - Un moteur de conteneurs, **ou** le binaire seul - avec [`cosign`](https://docs.sigstore.dev/cosign/system_config/installation/)
>   pour vérifier ce que vous téléchargez.
> - Pour l'identité : l'URL de découverte de votre fournisseur OIDC.
> - Pour des débits partagés entre répliques et des quotas de tenant : un Redis, Dragonfly ou
>   Valkey. **Facultatif** - sans lui, les compteurs sont locaux à chaque réplique et aucun quota
>   de tenant ne se déclare.

Rien d'autre. Pas de base de données, pas de plan de contrôle, pas d'inscription préalable.

**Le binaire** (VM, bare métal) : chaque release porte `flexway_<version>_linux_<arch>.tar.gz`
(`amd64`, `arm64`) - les octets mêmes de son image, copiés depuis elle - et `SHA256SUMS`, signé.

```bash
v=$(gh release view -R flexwiz/flexway --json tagName -q .tagName | sed 's/^v//'); arch=amd64   # la dernière
gh release download "v$v" -R flexwiz/flexway -p "flexway_${v}_linux_${arch}.tar.gz" -p 'SHA256SUMS*'
cosign verify-blob --bundle SHA256SUMS.sigstore.json \
  --certificate-identity-regexp '^https://github.com/flexwiz/flexway/.github/workflows/release.yml@' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
tar -xzf "flexway_${v}_linux_${arch}.tar.gz" && sudo install "flexway_${v}_linux_${arch}/flexway" /usr/local/bin/
```

Une fois un `flexway.yaml` écrit ([Servir sa première API](https://flexway.io/docs/operations-first-api/)), le binaire est le service - sous systemd ou tout
superviseur, configuré par son seul environnement :

| Variable | Défaut | Rôle |
| --- | --- | --- |
| `FLEXWAY_CONFIG` | - (**obligatoire**) | Le `flexway.yaml` à servir ; sans lui, le processus refuse de démarrer |
| `FLEXWAY_ADDR` | `:8080` | Écouteur de trafic |
| `FLEXWAY_ADMIN_ADDR` | `:9090` | Écouteur d'administration : `/healthz`, `/readyz`, `/metrics`, `/config` - jamais routable de l'extérieur |
| `FLEXWAY_TLS_ADDR` | `:8443` | L'écouteur TLS propre à la passerelle, quand `server.tls` est posé |

```bash
FLEXWAY_CONFIG=/etc/flexway/flexway.yaml flexway     # SIGTERM draine, SIGHUP recharge
```

## 2. La séquence

```mermaid
%%{init: {'theme':'base','themeVariables':{'fontSize':'13px','lineColor':'#94a3b8'}}}%%
sequenceDiagram
  participant U as Vous
  participant C as flexway (CLI)
  participant G as flexway (service)
  participant A as Amont

  U->>C: flexway validate
  Note over C: hors ligne - contrat + configuration
  C-->>U: chaque opération a un amont, ou échec
  U->>G: démarrage
  Note over G: mêmes contrôles, refus de démarrer si partiel
  U->>G: appel d'une opération déclarée
  G->>A: relais
  A-->>G: réponse
  G-->>U: réponse + trace + métriques
```

> Cette séquence **tourne** depuis `0.2.0` : `flexway validate` hors ligne, refus de démarrer sur une
> configuration partielle, relais sans tampon, trace et métriques, et depuis `0.3.0` l'identité.
> La ligne d'audit du plan API est le journal chaîné des décisions, livré en `1.0.0` (
> `audit.decisions`) ; sans lui, les refus sont journalisés avec un sujet haché.
