Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 51.9%
TypeScript 32.7%
JavaScript 4.8%
CSS 4.1%
Shell 2.9%
HTML 1.8%
SQL 1.5%
1#!/bin/sh2# Trouve-KA — réplication croisée des sauvegardes (modèle pull)3# Author: Simon-Pierre Boucher4# Contact: contact@spboucher.ai5#6# Chaque node de données TIRE les sauvegardes de l'autre via une clé ssh à7# commande forcée (le détenteur de la clé ne peut QUE recevoir le tar du8# dossier de backups distant — aucun shell, aucun autre accès).9# hub (M2M32) : tire les snapshots OpenSearch de M2M32b10# search (M2M32b) : tire les dumps Postgres de M2M3211# Ainsi la perte totale d'un node laisse toujours une copie ≤ 24 h sur l'autre.1213PATH="$HOME/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"14export PATH15ROLE=$(cat "$HOME/.trouveka-role" 2>/dev/null || echo crawler)16LOG="$HOME/trouveka-backups/backup.log"17KEY="$HOME/.ssh/trouveka_pull"1819mkdir -p "$HOME/trouveka-backups"20log() { echo "$(date '+%F %T') [pull-$ROLE] $*" >> "$LOG"; }2122pull() { # $1 = hôte distant, $2 = dossier local de destination23 mkdir -p "$2"24 if /usr/bin/ssh -i "$KEY" -o ControlMaster=no -o ControlPath=none -o IdentitiesOnly=yes -o IdentityAgent=none -o ForwardAgent=no -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new \25 "simon-pierreboucher@$1" pull 2>>"$LOG" | tar -xf - -C "$2" 2>>"$LOG"; then26 log "réplication depuis $1 OK ($(ls "$2" | wc -l | tr -d ' ') fichiers)"27 else28 log "ÉCHEC réplication depuis $1"29 fi30 # Rotation locale du miroir (garder 14 jours de fichiers)31 find "$2" -type f -mtime +14 -delete 2>/dev/null32}3334case "$ROLE" in35 hub) pull 192.168.2.77 "$HOME/trouveka-backups/os-mirror" ;;36 search) pull 192.168.2.90 "$HOME/trouveka-backups/pg-mirror" ;;37 *) log "aucun rôle de réplication" ;;38esac39exit 040