# Auto-deploy et conteneur Bun

> Image Docker du runtime Aphrody, sonde prod sur dbfr, file de build sur le VPS et service Windows bun-winsvc

## Release

`aphrody-v1.4.3-aphrody.4` (commit `41211b56872`) fournit `bun-linux-x64.zip` (glibc 2.43 ou plus récent) et `bun-linux-x64-musl.zip`, construits sur le VPS dans `aphrody/build-linux:26.04` et `aphrody/build-alpine:3.24`, `bun-windows-x64.zip`, `aphrody-bun-windows-service.zip` et `SHA256SUMS.txt`. GitHub Actions est désactivé sur le dépôt : la release est construite à la main puis envoyée avec `gh release create`. L'image Docker et la prod dbfr restent sur `aphrody-v1.4.3-aphrody.3`.

## Image

`scripts/aphrody/deploy/docker/Dockerfile` (contexte `scripts/aphrody/deploy`) : Ubuntu 26.04, Bun de la release (somme vérifiée), git, ssh, gh, rsync et le pipeline `queue.ts`/`activate.ts`. Rôles de l'entrée : `build`, `prod`, `health`, ou toute commande bun.

## Services

| Hôte        | Service                                                                                                                                                                      | Contenu                                                                                                                                                                                                                                                      |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| dbfr (prod) | service `bun-prod` de `~/apps/aphrody-bun/compose.yaml`, inclus par `~/apps/compose.yaml` (projet unique `aphrody`) : `docker compose -f ~/apps/compose.yaml up -d bun-prod` | conteneur `aphrody-bun-prod-1` : `bun-probe` de la release courante de `~/apps/aphrody-bun` sur `127.0.0.1:47660` (`/healthz`, `/version`) ; `APP_BIN` vide : `probe.ts` de l'image ; `APP_SCRIPT` pour une autre app                                        |
| vps (build) | `bun install-host.ts --role build`, timer actif                                                                                                                              | file `aphrody-deploy` ; `apps.bun-probe.json` compile `probe.ts` dans un worktree éphémère de `~/src/bun`, le transfère dans `~/apps/aphrody-bun/releases` sur dbfr et l'active avec l'unité `docker:aphrody-bun-prod-1` (`docker restart`, santé sur 47660) |
| PC Windows  | service `AphrodyBun`                                                                                                                                                         | `bun install-windows.ts` en administrateur : `bun-winsvc.exe` (packages/bun-winsvc) lance `bun.exe service.ts`, relance en cas de sortie, tue l'arbre à l'arrêt                                                                                              |

Sur un autre PC Windows, son propriétaire lance lui-même `bun install-windows.ts` en administrateur : le service n'est jamais installé à distance.

## Docker sur les trois hôtes

Le PC (Docker Desktop, VMM libkrun) ainsi que le vps et dbfr (Docker Engine) partagent le magasin d'images containerd (`"containerd-snapshotter": true` dans `/etc/docker/daemon.json`), compose, buildx, le réseau host, Model Runner (API OpenAI sur `localhost:12434`, modèle `ai/smollm2`) et Kubernetes. Sur le PC, c'est le Kubernetes de Docker Desktop ; sur le vps et dbfr, un cluster kind `aphrody`. La sonde y tourne via `docker/k8s.yaml`. Sur le PC, les contextes `vps` et `dbfr` (`docker --context vps …`) pilotent les moteurs distants par ssh.

- `bun scripts/aphrody/docker-sync.ts [--force] [--from pc|vps|dbfr]` copie les images manquantes entre les hôtes (`docker save | docker load`).
- `bun scripts/aphrody/docker-doctor.ts [hôte…]` vérifie chaque fonction sur chaque hôte.
