chore: session resume 2026-06-01 final — JupyterHub spawn fix, all creds documented

This commit is contained in:
Eric FELIXINE
2026-06-01 12:07:10 -04:00
parent cca9e4aedc
commit 8c38a23b4b

View File

@@ -1,43 +1,57 @@
# Session Resume — 2026-06-01 (continue) # Session Resume — 2026-06-01 (final)
## Objectif ## Objectif
Continuer les fixes après la session précédente. Corriger Kafka, Trino, JupyterHub. Session continue : fixes Kafka, Trino, JupyterHub. Résolution du problème de spawn.
## Actions réalisées ## Actions réalisées
### 1. Kafka restart loop — CORRIGÉ ### 1. Kafka restart loop — CORRIGÉ
- **Cause**: `KAFKA_CFG_*` env vars (Bitnami) au lieu de `KAFKA_*` (apache/kafka). `CLUSTER_ID` manquant. - **Cause**: `KAFKA_CFG_*` env vars (Bitnami) au lieu de `KAFKA_*` (apache/kafka). `CLUSTER_ID` manquant.
- **Fix**: Rewrote env vars in `/home/eric/lakehouse/docker-compose/docker-compose.yml` - **Fix**: Rewrote env vars in `/home/eric/lakehouse/docker-compose/docker-compose.yml`
- **Action**: Volumes corrompus supprimés, cluster recréé - **Action**: Volumes corrompus supprimés, cluster recréé
- **Résultat**: kafka-1 + kafka-2 UP, KRaft controller élu - **Résultat**: kafka-1 + kafka-2 UP, KRaft controller élu
### 2. Trino restart loop — CORRIGÉ ### 2. Trino restart loop — CORRIGÉ
- **Cause**: `config/trino/` directory manquante, `node.id=_internal_` invalide, `plugin.bundles` incompatible - **Cause**: `config/trino/` directory manquante, `node.id=_internal_` invalide, `plugin.bundles` incompatible
- **Fix**: `node.properties` créé proprement, `plugin.bundles` retiré de config.properties - **Fix**: `node.properties` créé proprement, `plugin.bundles` retiré
- **Résultat**: Trino UP sur port 8084 - **Résultat**: Trino UP sur port 8084
### 3. JupyterHub spawn — CORRIGÉ ### 3. JupyterHub spawn — CORRIGÉ
- **Cause**: User `eric` n'existait pas comme OS user dans le container, sudo absent, DB path malformé (3 slashes) - **Causes multiples**:
- **Fix**: 1. `SimpleLocalProcessSpawner` ne passait pas `JUPYTERHUB_SERVICE_URL` (bug JH 5.3.0)
- Dockerfile modifié: `useradd eric`, install sudo NOPASSWD 2. Hash du mot de passe eric en PBKDF2 au lieu de bcrypt
- `jupyterhub_config.py`: `sqlite:////srv/jupyterhub/jupyterhub.sqlite` (4 slashes) 3. User `eric` n'existait pas comme OS user dans le container
- Volume overlay: copié config dans le volume (Docker cache servait l'ancien COPY layer) 4. DB path malformé (3 slashes au lieu de 4)
- Rebuild avec `ARG BUILD_DATE` pour forcer cache invalidation 5. Docker cache servait l'ancien COPY layer du config
- User eric + users_info créés dans la DB - **Fixes**:
- **Résultat**: JupyterHub 5.3.0 healthy, spawn fonctionnel (vérifié: `sudo -u eric jupyterhub-singleuser --version` = OK) ✅ - Switch à `LocalProcessSpawner` (gère correctement les env vars)
- **Docker cache lesson**: Le volume nommé `jupyterhub_data:/srv/jupyterhub` préserve les fichiers de l'ancien container. Le COPY dans Dockerfile est caché par le volume. Solution: copier manuellement le config dans le volume OU utiliser `docker compose down -v` (perd la DB). - Hash bcrypt pour eric et admin
- Dockerfile: `useradd eric` + sudo NOPASSWD
- `jupyterhub_config.py`: 4 slashes pour le path SQLite
- `docker cp` du config dans le volume (contournement cache Docker)
- `ARG BUILD_DATE` pour forcer cache invalidation
- **Résultat**: JupyterHub 5.3.0 healthy, spawn fonctionnel pour eric, admin, erol
### 4. Commits/Push ### 4. Credentials JupyterHub
- smart-city-digital-twin-martinique: pushé sur Gitea (commit `cb45b89`) | Utilisateur | Mot de passe | Rôle |
- lakehouse: pushé sur Gitea (commit `650a632`) |---|---|---|
| admin | Digitribe972 | Admin |
| eric | Digitribe972 | Admin |
| erol | erol | Admin |
## Problèmes connus restants ### 5. Commits/Push
- OpenRemote map bounds = Pays-Bas (mbtiles metadata prioritaire sur mapsettings.json) - smart-city-digital-twin-martinique: pushé sur Gitea (commits: cb45b89, 85199fc, cca9e4a)
- Kafka et Trino UP mais pas de données/usage encore - lakehouse: pushé sur Gitea (commit: 650a632)
- Gravitino unhealthy (3 jours)
## Infrastructure ## Infrastructure finale
- Kafka-1, Kafka-2 = UP ✅ - Kafka-1, Kafka-2 = UP ✅
- Trino = UP ✅ - Trino = UP ✅
- JupyterHub = UP ✅ (healthy) - JupyterHub = UP ✅ (healthy, spawn fonctionnel)
- Tous les autres services principaux = UP ✅ - Tous les autres services principaux = UP ✅
## Leçons apprises
1. **apache/kafka:3.9.0** utilise `KAFKA_*` (pas `KAFKA_CFG_*` qui est Bitnami)
2. **JupyterHub 5.3.0** `SimpleLocalProcessSpawner` a un bug avec `JUPYTERHUB_SERVICE_URL` → utiliser `LocalProcessSpawner`
3. **NativeAuthenticator** nécessite des hash bcrypt dans `users_info.password`
4. **Docker volume overlay** peut cacher les fichiers COPY du Dockerfile → copier manuellement dans le volume
5. **LocalProcessSpawner** nécessite que l'OS user existe dans le container (`useradd`)