Complete implementation ready for Coolify: - Node.js 22 + Fastify + socket.io backend - PostgreSQL 16 + Redis 7 services - Docker Compose configuration - Deployment scripts and documentation Co-Authored-By: Paperclip <noreply@paperclip.ing>
108 lines
3.5 KiB
Markdown
108 lines
3.5 KiB
Markdown
# 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:<sha>`
|
|
- 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":<seconds>}
|
|
```
|
|
|
|
## 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).
|