#!/bin/zsh # ============================================================================== # Author: Simon-Pierre Boucher # File: scripts/deploy-m3u96b.sh # Desc: Déploiement/redéploiement de Créa-Ka sur le node M3U96b — # rsync + venv + PM2 (web :8160, sync watch 24 h, ngrok www.crea-ka.com) # ============================================================================== set -euo pipefail NODE=M3U96b # ⚠️ openrsync (macOS) : TOUJOURS un chemin distant ABSOLU — la forme # « hôte:chemin/relatif » est interprétée comme un chemin LOCAL (bug silencieux) APP_DIR=/Users/simon-pierreboucher/apps/crea-ka SRC="$(cd "$(dirname "$0")/.." && pwd)" PORT=8160 DOMAIN=www.crea-ka.com echo "[deploy] rsync → $NODE:$APP_DIR" ssh "$NODE" "mkdir -p ~/apps/crea-ka" # .env et base de données du node préservés (--update pour la DB seulement au 1er envoi) rsync -az --delete \ --exclude '.venv' --exclude '__pycache__' --exclude '.pytest_cache' \ --exclude '.env' --exclude 'data/creaka.db*' \ --exclude 'data/optout.json' --exclude 'data/optout_requests.jsonl' \ "$SRC/" "$NODE:$APP_DIR/" echo "[deploy] venv + dépendances" ssh "$NODE" "cd ~/apps/crea-ka && \ ([ -d .venv ] || python3 -m venv .venv) && \ .venv/bin/pip -q install -r requirements.txt" echo "[deploy] PM2 (web :$PORT + sync + ngrok $DOMAIN)" ssh "$NODE" "cd ~/apps/crea-ka && \ pm2 delete crea-ka-web crea-ka-sync crea-ka-ngrok 2>/dev/null; \ pm2 start .venv/bin/python --name crea-ka-web --interpreter none --cwd ~/apps/crea-ka -- run.py serve $PORT && \ PYTHONUNBUFFERED=1 pm2 start .venv/bin/python --name crea-ka-sync --interpreter none --cwd ~/apps/crea-ka -- run.py watch 24 && \ pm2 start /opt/homebrew/bin/ngrok --name crea-ka-ngrok --interpreter none -- http --url=$DOMAIN $PORT && \ pm2 save" echo "[deploy] healthcheck" sleep 4 ssh "$NODE" "curl -sf localhost:$PORT/healthz" && echo " ← local OK" curl -sf "https://$DOMAIN/healthz" && echo " ← https://$DOMAIN OK"