# Publier les images Restora pour l'installation locale

`docker-compose.local.yml` (le fichier que les clients téléchargent pour
installer Restora sur leur propre serveur) ne construit jamais depuis le
code source — il référence trois images déjà construites
(`RESTORA_API_IMAGE`, `RESTORA_WEB_IMAGE`, `RESTORA_WORKER_IMAGE`). Ce
document explique comment les construire et les publier, une fois par
version.

Aucun registre n'est configuré par défaut — choisissez-en un (GitHub
Container Registry, Docker Hub, ou un registre privé) et suivez les
commandes ci-dessous en remplaçant `ghcr.io/votre-org` par votre propre
chemin.

## 1. Se connecter au registre

```bash
# GitHub Container Registry (nécessite un token avec le scope write:packages)
echo "$GHCR_TOKEN" | docker login ghcr.io -u votre-utilisateur --password-stdin

# ou Docker Hub
docker login
```

## 2. Construire les trois images

Depuis la racine du dépôt (les `Dockerfile` sont déjà prêts pour la
production — multi-stage, aucun fichier source dans l'image finale, voir
`infrastructure/docker/*.Dockerfile`) :

```bash
VERSION=1.0.0   # convention : version sémantique de la release

docker build -f infrastructure/docker/api.Dockerfile \
  -t ghcr.io/votre-org/restora-api:$VERSION \
  -t ghcr.io/votre-org/restora-api:latest .

docker build -f infrastructure/docker/worker.Dockerfile \
  -t ghcr.io/votre-org/restora-worker:$VERSION \
  -t ghcr.io/votre-org/restora-worker:latest .

# Le build du web a besoin des URLs d'API par défaut au moment du build
# (Next.js les fige dans le bundle) — laissez localhost: le mécanisme de
# résolution runtime (apps/web/src/lib/runtime-endpoints.ts) réécrit
# automatiquement ces URLs vers l'hôte réel utilisé par le navigateur, donc
# une seule image fonctionne correctement quelle que soit l'IP LAN du
# serveur du client — ne construisez pas une image par client.
docker build -f infrastructure/docker/web.Dockerfile \
  --build-arg NEXT_PUBLIC_API_URL=http://localhost:3000/api \
  --build-arg NEXT_PUBLIC_WS_URL=ws://localhost:3000 \
  -t ghcr.io/votre-org/restora-web:$VERSION \
  -t ghcr.io/votre-org/restora-web:latest .
```

## 3. Publier

```bash
docker push ghcr.io/votre-org/restora-api:$VERSION
docker push ghcr.io/votre-org/restora-api:latest
docker push ghcr.io/votre-org/restora-worker:$VERSION
docker push ghcr.io/votre-org/restora-worker:latest
docker push ghcr.io/votre-org/restora-web:$VERSION
docker push ghcr.io/votre-org/restora-web:latest
```

Si le registre est privé (recommandé pour ne pas exposer les images
publiquement), les clients devront aussi faire `docker login` avant de
lancer `install-local.sh` — à documenter dans les identifiants que vous leur
fournissez.

## 4. Mettre à jour les téléchargements du site

Une fois les images publiées, mettez à jour les valeurs par défaut dans :

- `.env.local.example` (racine du dépôt et `apps/web/public/downloads/`)
- Le fichier zip servi par la page `/download`
  (`apps/web/public/downloads/restora-local.zip`) — à régénérer :
  ```bash
  cd apps/web/public/downloads
  zip -q restora-local.zip docker-compose.local.yml .env.local.example install-local.sh
  ```

## Automatiser (optionnel, plus tard)

Une fois ce flux validé manuellement, il peut être automatisé via une
GitHub Action déclenchée sur un tag `v*` qui répète exactement les
commandes ci-dessus — non fait dans cette session (nécessite un compte de
registre déjà existant pour configurer les secrets CI).
