API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com
Python 60.9%
HTML 21%
TypeScript 7.3%
JavaScript 5.2%
CSS 4.8%
Shell 0.8%
1#!/usr/bin/env bash2# ============================================3# Projet : API-KA4# Fichier : scripts/deploy_m3u96b.sh5# Node : m3u96b6# Author : Simon-Pierre Boucher7# Contact : contact@spboucher.ai8# Date : 2026-08-169# ============================================10# Déploiement complet d'API-KA sur le node m3u96b (/opt/api-ka).11# À exécuter depuis le laptop, à la racine du projet.1213set -euo pipefail1415NODE="m3u96b"16REMOTE_DIR="/opt/api-ka"17PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"1819echo "==> [1/6] Déploiement API-KA vers ${NODE}:${REMOTE_DIR}"20ssh "$NODE" "sudo mkdir -p '$REMOTE_DIR' && sudo chown \"\$(whoami)\" '$REMOTE_DIR'"2122echo "==> [2/6] Synchronisation des fichiers (rsync)"23rsync -az --delete \24 --exclude '.env' \25 --exclude 'venv/' \26 --exclude '__pycache__/' \27 --exclude '.pytest_cache/' \28 --exclude '.ruff_cache/' \29 --exclude '.git/' \30 --exclude 'logs/' \31 --exclude 'data/' \32 "$PROJECT_DIR/" "$NODE:$REMOTE_DIR/"3334echo "==> [3/6] Environnement virtuel + dépendances"35ssh "$NODE" "cd '$REMOTE_DIR' \36 && mkdir -p logs data/backups \37 && (python3.11 -m venv venv 2>/dev/null || python3 -m venv venv) \38 && ./venv/bin/pip install --quiet --upgrade pip \39 && ./venv/bin/pip install --quiet -r requirements.txt"4041echo "==> [4/6] Vérification du .env"42if ! ssh "$NODE" "test -f '$REMOTE_DIR/.env'"; then43 echo "⚠️ $REMOTE_DIR/.env manquant sur $NODE — copier .env.example et le remplir avant de démarrer les services."44fi4546echo "==> [5/6] Installation des services (systemd si disponible)"47ssh "$NODE" "if command -v systemctl >/dev/null 2>&1; then \48 sudo cp '$REMOTE_DIR'/systemd/apika-*.service /etc/systemd/system/ \49 && sudo systemctl daemon-reload \50 && sudo systemctl enable --now apika-api apika-scheduler apika-ngrok \51 && sudo systemctl restart apika-api apika-scheduler apika-ngrok; \52else \53 echo '⚠️ systemd indisponible sur ce node (macOS) — démarrer les services manuellement :'; \54 echo ' cd $REMOTE_DIR && ./venv/bin/uvicorn src.api.main:app --host 127.0.0.1 --port 8000 &'; \55 echo ' cd $REMOTE_DIR && ./venv/bin/python -m src.scheduler.daily_job &'; \56 echo ' bash $REMOTE_DIR/scripts/start_ngrok.sh &'; \57fi"5859echo "==> [6/6] Healthcheck"60sleep 361if ssh "$NODE" "curl -fsS --max-time 10 http://127.0.0.1:8000/health" >/dev/null 2>&1; then62 echo "✅ API-KA déployée et en bonne santé sur $NODE."63else64 echo "⚠️ /health ne répond pas encore sur $NODE — vérifier les services (systemctl status apika-*)."65 exit 166fi67