SPB Git forge

spb/job-ka

Public
229commits 1branches 0releases
38.1 MBsize
maindefault branch
4 h agolast push
HTML 82.1% Python 14.6% TypeScript 1.9% CSS 1% JavaScript 0.5%
3.4 KB · 85 lines markdown
Rendered Raw Blame History
1<!--2=============================================================================3Job·Ka — Groupe KA4Auteur  : Simon-Pierre Boucher5Contact : contact@spboucher.ai6Fichier : docs/deploiement.md7Rôle    : Procédure de déploiement sur m3u96a + ngrok www.job-ka.com8Créé    : 2026-08-17   Modifié : 2026-08-179=============================================================================10-->1112# Déploiement Job·Ka — nœud m3u96a1314## Cible1516- **Nœud** : `M3U96a.maclustr.io` (Mac Studio, 32 cœurs, 96 Go) — imposé par le17  CLAUDE.md du projet (§6). Dérogation assumée à la règle « M3U96a = staging » :18  demande explicite du projet, comme `vrai-prix` et `sorti-ka` déjà sur ce nœud.19- **Répertoire** : `~/apps/job-ka` (convention des projets Ka remote-first)20- **Port interne** : `8096` (8095 = lou-ka ; vérifier les conflits avec21  `pick-node.py`/`lsof` avant de démarrer)22- **Exposition** : ngrok, domaine réservé `www.job-ka.com`23- **Superviseur** : PM2 (3 processus)2425## Processus PM22627```28job-ka-web    .venv/bin/python run.py serve 8096     # API + frontend29job-ka-sync   .venv/bin/python run.py watch 60       # resync horaire30job-ka-ngrok  ngrok http --url=www.job-ka.com 8096   # tunnel supervisé31```3233## Procédure3435```bash36# 1. Pousser le code (jamais les données : data/*.db, dist/, .env restent locaux au nœud)37ssh M3U96a 'mkdir -p ~/apps'38rsync -a --delete \39  --exclude .venv --exclude node_modules --exclude dist \40  --exclude 'data/*.db' --exclude .env --exclude .git \41  ~/Desktop/job-ka/ M3U96a:~/apps/job-ka/4243# 2. Sur le nœud : runtime + build + secrets44ssh M3U96a 'cd ~/apps/job-ka \45  && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt \46  && cd frontend && npm install && npm run build'47# .env : créer sur le nœud (SCRAPFLY_API_KEY) — jamais commité ni rsyncé4849# 3. Amorçage des données50ssh M3U96a 'cd ~/apps/job-ka && .venv/bin/python run.py sync && .venv/bin/python run.py geocode'5152# 4. PM253ssh M3U96a 'cd ~/apps/job-ka \54  && pm2 start ".venv/bin/python run.py serve 8096" --name job-ka-web \55  && pm2 start ".venv/bin/python run.py watch 60"  --name job-ka-sync \56  && pm2 start "ngrok http --url=www.job-ka.com 8096" --name job-ka-ngrok \57  && pm2 save'58```5960## Vérifications post-déploiement61621. `curl https://www.job-ka.com/health` → `{"status":"ok", ...}` avec63   `last_sync_age_s` < 7200 ;642. `https://www.job-ka.com` répond (frontend) ;653. `https://www.job-ka.com/api/sources` → `last_sync` récents sur chaque source ;664. `pm2 ls` : les 3 processus `online` ;675. Mettre à jour `~/Desktop/cluster-skill/cluster-deployments.json` (registre68   cross-session : app, node, port, domain, process_manager, dir, start, deployed).6970## Règles7172- Jamais d'interface d'admin ni de BD exposée par le tunnel (seuls `/`,73  `/api/*`, `/health` existent ; `POST /api/sync` est le seul point mutateur —74  il ne fait que déclencher une resynchronisation).75- Les mises à jour de code passent par rsync (ou git sur le nœud, protocole76  remote-first des projets Ka) puis `pm2 restart job-ka-web job-ka-sync`.7778## Variations par rapport à Lou·Ka7980- Carte : **MapLibre GL + fond Carto libre** au lieu de Mapbox/ka-maps — aucun81  jeton requis, aucun paquet lié à builder à côté du dépôt.82- `dedup.run()` s'exécute aussi après `run.py sync` (pas seulement dans83  `watch`) ; `geocode_failed` est remis à 0 quand l'adresse d'une offre change.84- Endpoint `/health` dédié (Lou·Ka n'en a pas).85