Créa·Ka — annuaire public cross-plateforme des créateurs de contenu québécois (crea-ka.com)
Python 73.6%
HTML 13.2%
TypeScript 6%
JavaScript 4.5%
CSS 1.7%
Dockerfile 0.6%
1#!/bin/zsh2# ==============================================================================3# Author: Simon-Pierre Boucher <contact@spboucher.ai>4# File: scripts/deploy-m3u96b.sh5# Desc: Déploiement/redéploiement de Créa-Ka sur le node M3U96b —6# rsync + venv + PM2 (web :8160, sync watch 24 h, ngrok www.crea-ka.com)7# ==============================================================================8set -euo pipefail910NODE=M3U96b11# ⚠️ openrsync (macOS) : TOUJOURS un chemin distant ABSOLU — la forme12# « hôte:chemin/relatif » est interprétée comme un chemin LOCAL (bug silencieux)13APP_DIR=/Users/simon-pierreboucher/apps/crea-ka14SRC="$(cd "$(dirname "$0")/.." && pwd)"15PORT=816016DOMAIN=www.crea-ka.com1718echo "[deploy] rsync → $NODE:$APP_DIR"19ssh "$NODE" "mkdir -p ~/apps/crea-ka"20# .env et base de données du node préservés (--update pour la DB seulement au 1er envoi)21rsync -az --delete \22 --exclude '.venv' --exclude '__pycache__' --exclude '.pytest_cache' \23 --exclude '.env' --exclude 'data/creaka.db*' \24 --exclude 'data/optout.json' --exclude 'data/optout_requests.jsonl' \25 "$SRC/" "$NODE:$APP_DIR/"2627echo "[deploy] venv + dépendances"28ssh "$NODE" "cd ~/apps/crea-ka && \29 ([ -d .venv ] || python3 -m venv .venv) && \30 .venv/bin/pip -q install -r requirements.txt"3132echo "[deploy] PM2 (web :$PORT + sync + ngrok $DOMAIN)"33ssh "$NODE" "cd ~/apps/crea-ka && \34 pm2 delete crea-ka-web crea-ka-sync crea-ka-ngrok 2>/dev/null; \35 pm2 start .venv/bin/python --name crea-ka-web --interpreter none --cwd ~/apps/crea-ka -- run.py serve $PORT && \36 PYTHONUNBUFFERED=1 pm2 start .venv/bin/python --name crea-ka-sync --interpreter none --cwd ~/apps/crea-ka -- run.py watch 24 && \37 pm2 start /opt/homebrew/bin/ngrok --name crea-ka-ngrok --interpreter none -- http --url=$DOMAIN $PORT && \38 pm2 save"3940echo "[deploy] healthcheck"41sleep 442ssh "$NODE" "curl -sf localhost:$PORT/healthz" && echo " ← local OK"43curl -sf "https://$DOMAIN/healthz" && echo " ← https://$DOMAIN OK"44