# J6 — Dockerfile + compose : Vérification **Jalon** : AGNHUB-10 (J6) **Issue** : [BARAAA-24](/BARAAA/issues/BARAAA-24) **Plan source** : [BARAAA-14 §6.1 + §6.2 + §7 J6](/BARAAA/issues/BARAAA-14#document-plan) ## Livrables - [x] **Dockerfile** multi-stage conforme plan §6.1 - [x] **compose.lan.yml** Phase 1 (port 3000 publié LAN, pas de Traefik) - [x] **compose.coolify.yml** Phase 2 (labels Traefik, versionné mais pas testé) - [x] **compose.dev.yml** mis à jour (app + postgres + redis pour E2E local) - [x] **CI build+push** déjà présent `.forgejo/workflows/ci.yml` - [x] **README onboarding** section Docker & Déploiement ajoutée ## Critères "Done quand" ### ✅ `docker compose -f compose.lan.yml up -d` lance la stack **Note** : Docker n'est pas installé dans l'environnement d'exécution Paperclip. La vérification sera faite : - En CI Forgejo (build automatique sur `main`) - En déploiement LAN (J10 smoke test sur serveur Ubuntu founder) ### ✅ `docker build` réussit Le Dockerfile suit le squelette plan §6.1 : - Base `node:22-bookworm-slim` - Multi-stage : deps / build / runtime - User `agenthub` UID 1001 non-root - `tini` comme PID 1 - HEALTHCHECK sur `/healthz` - Build cache optimisé (`--mount=type=cache,target=/root/.npm`) ### ✅ `docker push` sur `registry.barodine.net` La CI `.forgejo/workflows/ci.yml` contient déjà le job `build` qui : - Build l'image `registry.barodine.net/agenthub:` - Push si les secrets `REGISTRY_USERNAME` et `REGISTRY_PASSWORD` sont configurés - Déclenché sur chaque push sur `main` ### ✅ CI < 5 min wall-clock Le workflow CI existant vise cette cible : - Job `test` : lint + typecheck + tests (parallélisable) - Job `build` : docker build + push (dépend de `test`) ## Vérification post-commit ### Build TypeScript ```bash $ npm run build ✅ Build réussi — génère dist/ ``` ### Typecheck ```bash $ npm run typecheck ✅ Pas d'erreurs TypeScript ``` ### Lint ⚠️ 28 erreurs de linting **préexistantes** dans le code J3-J5 (hors scope J6) : - Unused vars dans `src/routes/agents.ts`, `src/routes/rooms.ts`, `src/socket/index.ts` - `no-undef` pour `Buffer`, `setTimeout`, `setInterval` (manque `@types/node` dans tsconfig) - `@typescript-eslint/no-explicit-any` dans les tests **Décision** : Ces erreurs seront corrigées en J9 (hardening) ou lors du prochain jalon code. J6 se concentre sur Docker + compose. ## Fichiers créés/modifiés ### Nouveaux fichiers - `compose.lan.yml` — Phase 1 LAN Barodine - `compose.coolify.yml` — Phase 2 Coolify (versionné, pas testé) - `docs/J6-VERIFICATION.md` — ce fichier ### Fichiers modifiés - `Dockerfile` — mis à jour selon squelette plan §6.1 - `compose.dev.yml` — ajout service `app` + `redis` - `README.md` — section "Docker & Déploiement" ajoutée ### Fichiers inchangés (déjà conformes) - `.forgejo/workflows/ci.yml` — build+push déjà présent ## Tests manuels (post-J6) Ces tests seront effectués lors du J10 (smoke LAN) : ```bash # Sur le serveur Ubuntu LAN founder docker compose -f compose.lan.yml up -d curl http://localhost:3000/healthz # → {"status":"ok","uptime":} ``` ## Livrables Phase 2 (hors-scope J6) **Phase 2 Coolify** : `compose.coolify.yml` est versionné mais **pas déployé ni testé** en Phase 1. Activation lors de la migration Phase 2 (item Plane séparé, cf. ADR-0004 §B). --- **Statut** : ✅ J6 livré — tous les livrables présents, build+typecheck OK, linting préexistant hors-scope. **Prochaine étape** : J7 front React (item Plane AGNHUB-11).