# Runtime isolé par release

> Archive historique conservée côté `TTM_API`.
>
> Source de vérité active : `C:\Users\VT\PhpstormProjects\ttm-dev-tools\docs\DEV_TOOLS_DEPLOYMENT_AUDIT.md` et `C:\Users\VT\PhpstormProjects\ttm-dev-tools\docs\README_DEV_TOOLS_UI.md`.
>
> Ce document reflète une réflexion antérieure à l’extraction du `dev-tools` vers `ttm-dev-tools`. À utiliser seulement comme contexte d’archive.

## Objectif

Permettre à un release sélectionné d’utiliser un **runtime dédié** au lieu de rester branché sur `current`.

Concrètement, quand `releaseRuntime.enabled=true` et qu’un release non-actif est ciblé :

- la page `Runtime` peut piloter un runtime API dédié au release ;
- la page `Base de données` peut viser une DB dédiée au release ;
- les commandes CLI runtime/DB acceptant `--release` utilisent les overrides `releaseRuntime` ;
- la preview front peut continuer à servir le build du release sans toucher au live.

## Emplacement

Ajouter la section au niveau du profil dans `deploy/config/deploy.targets.json` ou dans la surcharge locale.

```json
{
  "profiles": {
    "preprod": {
      "releaseRuntime": {
        "enabled": true,
        "api": {
          "portTemplate": "31{releaseTail2}",
          "workdirTemplate": "/home/pluma/web/stackpos/releases/{releaseName}/TTM_API",
          "healthUrlTemplate": "http://pluma-preprod.com:31{releaseTail2}/health",
          "publicUrlTemplate": "https://release-{release}-api.pluma-preprod.com",
          "socketUrlTemplate": "https://release-{release}-api.pluma-preprod.com",
          "pidFilePathTemplate": "/tmp/ttm-api-{releaseShort}.pid",
          "logFilePathTemplate": "/tmp/ttm-api-{releaseShort}.log",
          "runtimeEnv": {
            "DATABASE_URL": "mysql://stackpos:secret@127.0.0.1:3306/stackpos_rel_{releaseTail4}"
          }
        },
        "database": {
          "databaseNameTemplate": "stackpos_rel_{releaseTail4}",
          "defaultsExtraFileTemplate": "/home/pluma/.config/ttm/mysql-{releaseShort}.cnf"
        },
        "front": {
          "publicUrlTemplate": "https://release-{release}-front.pluma-preprod.com/",
          "documentRootTemplate": "/var/www/html/stackpos/releases/{releaseName}/ttm-shop-front/dist"
        }
      }
    }
  }
}
```

## Tokens disponibles

Les champs template supportent :

- `{releaseName}` : nom brut du release
- `{release}` / `{releaseSlug}` : slug normalisé
- `{releaseShort}` : slug court
- `{releaseDigits}` : uniquement les chiffres
- `{releaseTail2}` / `{releaseTail3}` / `{releaseTail4}` : suffixes numériques pratiques pour ports / noms courts

## Effets principaux

### Runtime API

Les éléments suivants peuvent être isolés par release :

- port
- workdir
- health URL
- URL publique API/socket
- pid/log files
- service/container ciblé
- variables d’environnement runtime

### Base de données

Les éléments suivants peuvent être isolés par release :

- nom de base
- host/port/user/password
- defaults-extra-file
- backup directory
- conteneur DB
- runtime env DB

## Commandes concernées

Les commandes suivantes savent maintenant exploiter `--release` avec `releaseRuntime` :

- `diagnose-api-runtime`
- `bootstrap-api-runtime`
- `diagnose-prisma-runtime`
- `prepare-release`
- `database-migrate-release`
- `backup-db-diagnose`
- `backup-db-install-defaults-file`
- `backup-db-prepare-dir`
- `backup-db`
- `database-clone-read-target`
- `database-clone-restore-target`

## Remarques

- Si `releaseRuntime` n’est pas configuré, le comportement reste inchangé : runtime distant lié à `current`.
- Le front peut continuer à s’appuyer sur la preview/vhost par release ; `releaseRuntime.front` sert surtout à clarifier l’URL et le `DocumentRoot` visés.
- Pour un vrai runtime isolé, il faut éviter de réutiliser le **même port** et la **même DB** que `current`.
