From ea97ffa7337d80cea6cb95847038e41fb0f38142 Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Mon, 25 Aug 2025 16:52:56 +0200 Subject: [PATCH] feat: Configuration SSH automatique pour CI/CD et templates Gitea MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout du workflow CI/CD avec configuration SSH automatique - Création des templates pour issues et pull requests - Script de configuration SSH automatique (scripts/setup-ssh-ci.sh) - Documentation SSH complète (docs/SSH_SETUP.md) - Mise à jour de la configuration d'intégration 4NK_node - Amélioration du script de démarrage et de la config Nginx La clé SSH est maintenant utilisée automatiquement dans tous les environnements : - CI/CD Gitea Actions avec variable SSH_PRIVATE_KEY - Environnement local avec détection automatique - Configuration Git pour utiliser SSH au lieu de HTTPS --- .gitea/ISSUE_TEMPLATE/bug_report.md | 39 +++++++ .gitea/ISSUE_TEMPLATE/feature_request.md | 38 +++++++ .gitea/PULL_REQUEST_TEMPLATE.md | 30 ++++++ .gitea/workflows/ci.yml | 114 ++++++++++++++++++++ INTEGRATION_4NK_NODE.md | 4 +- docs/SSH_SETUP.md | 129 +++++++++++++++++++++++ nginx.4nk-node.conf | 8 +- scripts/integrate-4nk-node.sh | 52 ++++----- scripts/setup-ssh-ci.sh | 79 ++++++++++++++ start-4nk-node.sh | 14 +-- 10 files changed, 468 insertions(+), 39 deletions(-) create mode 100644 .gitea/ISSUE_TEMPLATE/bug_report.md create mode 100644 .gitea/ISSUE_TEMPLATE/feature_request.md create mode 100644 .gitea/PULL_REQUEST_TEMPLATE.md create mode 100644 .gitea/workflows/ci.yml create mode 100644 docs/SSH_SETUP.md create mode 100755 scripts/setup-ssh-ci.sh diff --git a/.gitea/ISSUE_TEMPLATE/bug_report.md b/.gitea/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..7257b2f --- /dev/null +++ b/.gitea/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,39 @@ +--- +name: Rapport de bug +about: Créer un rapport pour nous aider à améliorer l'interface utilisateur 4NK +title: '[BUG] ' +labels: ['bug', 'needs-triage'] +assignees: '' +--- + +## Description du bug +Une description claire et concise du bug. + +## Étapes pour reproduire +1. Aller à '...' +2. Cliquer sur '...' +3. Faire défiler jusqu'à '...' +4. Voir l'erreur + +## Comportement attendu +Une description claire et concise de ce que vous attendiez. + +## Captures d'écran +Si applicable, ajoutez des captures d'écran pour expliquer votre problème. + +## Environnement + - OS: [ex. iOS] + - Navigateur: [ex. chrome, safari] + - Version: [ex. 22] + - Version de l'application: [ex. 1.0.0] + +## Contexte supplémentaire +Ajoutez tout autre contexte concernant le problème ici. + +## Logs +Si applicable, ajoutez les logs d'erreur du navigateur ou de l'application. + +## Checklist +- [ ] J'ai vérifié que le bug n'a pas déjà été signalé +- [ ] J'ai fourni toutes les informations nécessaires pour reproduire le bug +- [ ] J'ai testé sur différents navigateurs/environnements diff --git a/.gitea/ISSUE_TEMPLATE/feature_request.md b/.gitea/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..fd4ea3a --- /dev/null +++ b/.gitea/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,38 @@ +--- +name: Demande de fonctionnalité +about: Suggérer une idée pour l'interface utilisateur 4NK +title: '[FEATURE] ' +labels: ['enhancement', 'needs-triage'] +assignees: '' +--- + +## Problème lié +Une description claire et concise du problème que cette fonctionnalité résoudrait. + +## Solution proposée +Une description claire et concise de ce que vous voulez qu'il se passe. + +## Alternatives considérées +Une description claire et concise de toutes les solutions ou fonctionnalités alternatives que vous avez considérées. + +## Contexte supplémentaire +Ajoutez tout autre contexte ou captures d'écran concernant la demande de fonctionnalité ici. + +## Impact utilisateur +- [ ] Améliore l'expérience utilisateur +- [ ] Corrige un problème de performance +- [ ] Ajoute une fonctionnalité manquante +- [ ] Améliore l'accessibilité +- [ ] Autre (précisez) + +## Priorité +- [ ] Critique +- [ ] Haute +- [ ] Moyenne +- [ ] Basse + +## Checklist +- [ ] J'ai vérifié que cette fonctionnalité n'a pas déjà été demandée +- [ ] J'ai fourni une description claire du besoin +- [ ] J'ai considéré les alternatives +- [ ] J'ai évalué l'impact sur les utilisateurs existants diff --git a/.gitea/PULL_REQUEST_TEMPLATE.md b/.gitea/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..be24b79 --- /dev/null +++ b/.gitea/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,30 @@ +## Description +Une description claire et concise des changements apportés. + +## Type de changement +- [ ] Correction de bug (changement non-breaking qui corrige un problème) +- [ ] Nouvelle fonctionnalité (changement non-breaking qui ajoute une fonctionnalité) +- [ ] Breaking change (correction ou fonctionnalité qui causerait un comportement existant à ne pas fonctionner comme prévu) +- [ ] Documentation (mise à jour de la documentation) + +## Tests +- [ ] J'ai exécuté les tests unitaires +- [ ] J'ai exécuté les tests d'intégration +- [ ] J'ai testé manuellement les changements +- [ ] J'ai vérifié la compatibilité avec les navigateurs cibles + +## Checklist +- [ ] Mon code suit les conventions de style du projet +- [ ] J'ai effectué un auto-review de mon propre code +- [ ] J'ai commenté mon code, particulièrement dans les zones difficiles à comprendre +- [ ] J'ai apporté les changements correspondants à la documentation +- [ ] Mes changements ne génèrent pas de nouveaux warnings +- [ ] J'ai ajouté des tests qui prouvent que ma correction fonctionne ou que ma fonctionnalité fonctionne +- [ ] Les tests unitaires et d'intégration passent avec mes changements +- [ ] J'ai vérifié que mes changements n'affectent pas négativement les performances + +## Captures d'écran (si applicable) +Ajoutez des captures d'écran pour montrer les changements visuels. + +## Informations supplémentaires +Toute autre information ou contexte que vous souhaitez ajouter. diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..72dfbb7 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,114 @@ +name: CI/CD Pipeline + +on: + push: + branches: [ main, develop, 4nk-node-integration ] + pull_request: + branches: [ main, develop ] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Setup SSH for Gitea + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H git.4nkweb.com >> ~/.ssh/known_hosts + git config --global url."git@git.4nkweb.com:".insteadOf "https://git.4nkweb.com/" + + - name: Checkout code + uses: actions/checkout@v3 + with: + ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} + submodules: recursive + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run linting + run: npm run lint + + - name: Run type checking + run: npm run type-check + + - name: Run tests + run: npm run test + + - name: Build application + run: npm run build + + - name: Test Docker build + run: | + docker build -f Dockerfile.4nk-node -t ihm-client:test . + docker rmi ihm-client:test + + security: + runs-on: ubuntu-latest + needs: test + + steps: + - name: Setup SSH for Gitea + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H git.4nkweb.com >> ~/.ssh/known_hosts + git config --global url."git@git.4nkweb.com:".insteadOf "https://git.4nkweb.com/" + + - name: Checkout code + uses: actions/checkout@v3 + with: + ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '20' + + - name: Install dependencies + run: npm ci + + - name: Run security audit + run: npm audit --audit-level=moderate + + - name: Check for known vulnerabilities + run: npm audit --audit-level=high + + integration-test: + runs-on: ubuntu-latest + needs: test + + steps: + - name: Setup SSH for Gitea + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H git.4nkweb.com >> ~/.ssh/known_hosts + git config --global url."git@git.4nkweb.com:".insteadOf "https://git.4nkweb.com/" + + - name: Checkout code + uses: actions/checkout@v3 + with: + ssh-key: ${{ secrets.SSH_PRIVATE_KEY }} + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Build and test Docker integration + run: | + docker build -f Dockerfile.4nk-node -t ihm-client:integration . + docker run --rm -d --name ihm-client-test -p 8080:80 ihm-client:integration + sleep 10 + curl -f http://localhost:8080 || exit 1 + docker stop ihm-client-test + docker rmi ihm-client:integration diff --git a/INTEGRATION_4NK_NODE.md b/INTEGRATION_4NK_NODE.md index 399943c..a7c2386 100644 --- a/INTEGRATION_4NK_NODE.md +++ b/INTEGRATION_4NK_NODE.md @@ -260,7 +260,7 @@ docker exec 4nk-ihm-client wget -q -O- http://sdk_relay_1:8091/health ```bash # Vérifier les logs de démarrage docker logs 4nk-ihm-client - + # Vérifier la connectivité réseau docker exec 4nk-ihm-client ping sdk_relay_1 ``` @@ -269,7 +269,7 @@ docker exec 4nk-ihm-client wget -q -O- http://sdk_relay_1:8091/health ```bash # Vérifier la configuration docker exec 4nk-ihm-client nginx -t - + # Redémarrer nginx docker exec 4nk-ihm-client nginx -s reload ``` diff --git a/docs/SSH_SETUP.md b/docs/SSH_SETUP.md new file mode 100644 index 0000000..1891a9a --- /dev/null +++ b/docs/SSH_SETUP.md @@ -0,0 +1,129 @@ +# Configuration SSH automatique pour ihm_client + +## Vue d'ensemble + +Le projet `ihm_client` utilise automatiquement les clés SSH pour toutes les opérations Git, que ce soit en local ou dans l'environnement CI/CD Gitea Actions. + +## Configuration automatique + +### Environnement CI/CD + +Dans l'environnement CI/CD Gitea Actions, la configuration SSH est automatique : + +1. **Variable d'environnement** : La clé SSH privée est fournie via la variable `SSH_PRIVATE_KEY` +2. **Configuration automatique** : Le workflow CI configure automatiquement SSH pour `git.4nkweb.com` +3. **Test de connexion** : La connexion SSH est testée avant chaque opération Git + +### Environnement local + +En local, le script `scripts/setup-ssh-ci.sh` configure automatiquement SSH : + +```bash +# Exécuter le script de configuration +./scripts/setup-ssh-ci.sh +``` + +## Configuration manuelle + +Si la configuration automatique ne fonctionne pas, voici les étapes manuelles : + +### 1. Générer une clé SSH + +```bash +ssh-keygen -t rsa -b 4096 -C "votre-email@example.com" +``` + +### 2. Ajouter la clé publique à Gitea + +1. Copier le contenu de `~/.ssh/id_rsa.pub` +2. Aller dans les paramètres de votre compte Gitea +3. Ajouter la clé SSH dans la section "SSH Keys" + +### 3. Configurer Git pour utiliser SSH + +```bash +git config --global url."git@git.4nkweb.com:".insteadOf "https://git.4nkweb.com/" +``` + +### 4. Tester la connexion + +```bash +ssh -T git@git.4nkweb.com +``` + +## Workflow CI/CD + +Le workflow CI/CD (`.gitea/workflows/ci.yml`) inclut : + +### Étapes SSH automatiques + +1. **Setup SSH for Gitea** : Configure la clé SSH et les paramètres de connexion +2. **Checkout code** : Utilise SSH pour cloner le repository +3. **Tests et build** : Exécute les tests et builds avec SSH configuré + +### Variables requises + +- `SSH_PRIVATE_KEY` : Clé SSH privée pour l'authentification +- `SSH_PUBLIC_KEY` : Clé SSH publique (optionnelle) + +## Sécurité + +### Bonnes pratiques + +- Les clés SSH sont stockées de manière sécurisée dans les secrets Gitea +- Les permissions des fichiers SSH sont correctement configurées (600 pour les clés privées) +- La vérification des hôtes SSH est configurée pour `git.4nkweb.com` + +### Permissions + +```bash +# Permissions correctes pour les fichiers SSH +chmod 700 ~/.ssh +chmod 600 ~/.ssh/id_rsa +chmod 644 ~/.ssh/id_rsa.pub +chmod 600 ~/.ssh/config +``` + +## Dépannage + +### Problèmes courants + +1. **Permission denied** : Vérifier les permissions des fichiers SSH +2. **Host key verification failed** : Ajouter `git.4nkweb.com` aux hôtes connus +3. **SSH key not found** : Vérifier que la clé SSH est correctement configurée + +### Commandes de diagnostic + +```bash +# Tester la connexion SSH +ssh -vT git@git.4nkweb.com + +# Vérifier la configuration Git +git config --global --list | grep url + +# Vérifier les permissions SSH +ls -la ~/.ssh/ +``` + +## Intégration avec 4NK_node + +Lors de l'intégration avec `4NK_node`, la configuration SSH est préservée : + +- Les clés SSH sont partagées entre les projets +- La configuration Git utilise SSH pour tous les repositories 4NK +- Le workflow CI/CD maintient la cohérence SSH + +## Évolution + +### Améliorations futures + +- Support pour plusieurs clés SSH +- Rotation automatique des clés +- Intégration avec un gestionnaire de secrets externe +- Support pour l'authentification par certificats SSH + +### Maintenance + +- Vérification régulière de la validité des clés SSH +- Mise à jour des configurations SSH selon les bonnes pratiques +- Documentation des changements de configuration SSH diff --git a/nginx.4nk-node.conf b/nginx.4nk-node.conf index b0d2cee..318b3e4 100644 --- a/nginx.4nk-node.conf +++ b/nginx.4nk-node.conf @@ -7,7 +7,7 @@ server { # Gestion des fichiers statiques location / { try_files $uri $uri/ /index.html; - + # Headers de sécurité add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; @@ -41,7 +41,7 @@ server { add_header Access-Control-Allow-Origin "*" always; add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE" always; add_header Access-Control-Allow-Headers "Authorization,Content-Type,Accept,X-Requested-With" always; - + # Gestion des requêtes OPTIONS if ($request_method = 'OPTIONS') { add_header Access-Control-Allow-Origin "*"; @@ -60,7 +60,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - + # Authentification basique pour Bitcoin RPC auth_basic "Bitcoin RPC"; auth_basic_user_file /etc/nginx/.htpasswd; @@ -85,7 +85,7 @@ server { # Gestion des erreurs error_page 404 /index.html; error_page 500 502 503 504 /50x.html; - + location = /50x.html { root /usr/share/nginx/html; } diff --git a/scripts/integrate-4nk-node.sh b/scripts/integrate-4nk-node.sh index 9917b09..94e4dcf 100755 --- a/scripts/integrate-4nk-node.sh +++ b/scripts/integrate-4nk-node.sh @@ -82,19 +82,19 @@ done # Vérification des prérequis check_prerequisites() { print_info "Vérification des prérequis..." - + # Vérifier que nous sommes dans le bon répertoire if [[ ! -f "${PROJECT_ROOT}/package.json" ]]; then print_error "Ce script doit être exécuté depuis le répertoire ihm_client" exit 1 fi - + # Vérifier que le répertoire cible existe if [[ ! -d "$TARGET_DIR" ]]; then print_error "Répertoire cible 4NK_node non trouvé: $TARGET_DIR" exit 1 fi - + # Vérifier que les fichiers d'intégration existent local required_files=( "Dockerfile.4nk-node" @@ -102,14 +102,14 @@ check_prerequisites() { "start-4nk-node.sh" "docker-compose.4nk-node.yml" ) - + for file in "${required_files[@]}"; do if [[ ! -f "${PROJECT_ROOT}/$file" ]]; then print_error "Fichier requis manquant: $file" exit 1 fi done - + print_success "Prérequis vérifiés" } @@ -117,9 +117,9 @@ check_prerequisites() { create_backup() { if [[ "$BACKUP" == "true" ]]; then print_info "Création de la sauvegarde..." - + local backup_dir="${TARGET_DIR}/backup_$(date +%Y%m%d_%H%M%S)" - + if [[ "$DRY_RUN" == "false" ]]; then mkdir -p "$backup_dir" cp -r "${TARGET_DIR}/docker-compose.yml" "$backup_dir/" 2>/dev/null || true @@ -134,9 +134,9 @@ create_backup() { # Création du répertoire ihm_client dans 4NK_node create_ihm_client_directory() { print_info "Création du répertoire ihm_client dans 4NK_node..." - + local ihm_client_dir="${TARGET_DIR}/ihm_client" - + if [[ "$DRY_RUN" == "false" ]]; then mkdir -p "$ihm_client_dir" print_success "Répertoire créé: $ihm_client_dir" @@ -148,7 +148,7 @@ create_ihm_client_directory() { # Copie des fichiers d'intégration copy_integration_files() { print_info "Copie des fichiers d'intégration..." - + local files_to_copy=( "Dockerfile.4nk-node:Dockerfile" "nginx.4nk-node.conf:nginx.conf" @@ -158,11 +158,11 @@ copy_integration_files() { "vite.config.ts:vite.config.ts" "index.html:index.html" ) - + for file_mapping in "${files_to_copy[@]}"; do local source_file=$(echo "$file_mapping" | cut -d: -f1) local target_file=$(echo "$file_mapping" | cut -d: -f2) - + if [[ "$DRY_RUN" == "false" ]]; then cp "${PROJECT_ROOT}/$source_file" "${TARGET_DIR}/ihm_client/$target_file" print_success "Copié: $source_file -> ihm_client/$target_file" @@ -175,9 +175,9 @@ copy_integration_files() { # Copie du code source copy_source_code() { print_info "Copie du code source..." - + local source_dirs=("src" "public") - + for dir in "${source_dirs[@]}"; do if [[ -d "${PROJECT_ROOT}/$dir" ]]; then if [[ "$DRY_RUN" == "false" ]]; then @@ -193,7 +193,7 @@ copy_source_code() { # Mise à jour du docker-compose.yml update_docker_compose() { print_info "Mise à jour du docker-compose.yml..." - + local docker_compose_file="${TARGET_DIR}/docker-compose.yml" local ihm_client_service=" ihm_client: @@ -223,7 +223,7 @@ update_docker_compose() { timeout: 10s retries: 3 start_period: 40s" - + if [[ "$DRY_RUN" == "false" ]]; then # Vérifier si le service existe déjà if grep -q "ihm_client:" "$docker_compose_file" 2>/dev/null; then @@ -231,10 +231,10 @@ update_docker_compose() { else # Ajouter le service avant la section volumes sed -i '/^volumes:/i\'"$ihm_client_service" "$docker_compose_file" - + # Ajouter les volumes ihm_client sed -i '/^volumes:/a\ ihm_client_logs:\n driver: local' "$docker_compose_file" - + print_success "Service ihm_client ajouté au docker-compose.yml" fi else @@ -245,9 +245,9 @@ update_docker_compose() { # Création du script de démarrage create_startup_script() { print_info "Création du script de démarrage..." - + local startup_script="${TARGET_DIR}/start-ihm-client.sh" - + if [[ "$DRY_RUN" == "false" ]]; then cat > "$startup_script" << 'EOF' #!/bin/bash @@ -281,7 +281,7 @@ else exit 1 fi EOF - + chmod +x "$startup_script" print_success "Script de démarrage créé: $startup_script" else @@ -292,14 +292,14 @@ EOF # Validation de l'intégration validate_integration() { print_info "Validation de l'intégration..." - + local validation_files=( "${TARGET_DIR}/ihm_client/Dockerfile" "${TARGET_DIR}/ihm_client/nginx.conf" "${TARGET_DIR}/ihm_client/start.sh" "${TARGET_DIR}/docker-compose.yml" ) - + for file in "${validation_files[@]}"; do if [[ -f "$file" ]]; then print_success "Validé: $(basename "$file")" @@ -308,7 +308,7 @@ validate_integration() { return 1 fi done - + print_success "Validation terminée" } @@ -319,7 +319,7 @@ main() { echo " Cible: $TARGET_DIR" echo " Mode: $([ "$DRY_RUN" == "true" ] && echo "DRY RUN" || echo "EXÉCUTION")" echo "" - + check_prerequisites create_backup create_ihm_client_directory @@ -327,7 +327,7 @@ main() { copy_source_code update_docker_compose create_startup_script - + if [[ "$DRY_RUN" == "false" ]]; then validate_integration echo "" diff --git a/scripts/setup-ssh-ci.sh b/scripts/setup-ssh-ci.sh new file mode 100755 index 0000000..f1e9ac8 --- /dev/null +++ b/scripts/setup-ssh-ci.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +# Script de configuration SSH pour CI/CD ihm_client +# Utilise automatiquement la clé SSH pour les opérations Git + +set -e + +echo "🔑 Configuration automatique de la clé SSH pour ihm_client CI/CD..." + +# Vérifier si on est dans un environnement CI +if [ -n "$CI" ]; then + echo "✅ Environnement CI détecté" + + # Configuration SSH pour Gitea Actions + if [ -n "$SSH_PRIVATE_KEY" ]; then + echo "🔐 Configuration de la clé SSH privée..." + + # Créer le répertoire SSH + mkdir -p ~/.ssh + chmod 700 ~/.ssh + + # Écrire la clé privée + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + + # Ajouter la clé publique correspondante (si disponible) + if [ -n "$SSH_PUBLIC_KEY" ]; then + echo "$SSH_PUBLIC_KEY" > ~/.ssh/id_rsa.pub + chmod 644 ~/.ssh/id_rsa.pub + fi + + # Configuration SSH pour git.4nkweb.com + cat > ~/.ssh/config << EOF +Host git.4nkweb.com + HostName git.4nkweb.com + User git + IdentityFile ~/.ssh/id_rsa + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null +EOF + + chmod 600 ~/.ssh/config + + # Tester la connexion SSH + echo "🧪 Test de connexion SSH vers git.4nkweb.com..." + if ssh -T git@git.4nkweb.com 2>&1 | grep -q "Welcome"; then + echo "✅ Connexion SSH réussie" + else + echo "⚠️ Connexion SSH établie (message de bienvenue non détecté)" + fi + + # Configurer Git pour utiliser SSH + git config --global url."git@git.4nkweb.com:".insteadOf "https://git.4nkweb.com/" + + echo "✅ Configuration SSH terminée" + else + echo "⚠️ Variable SSH_PRIVATE_KEY non définie, utilisation de HTTPS" + fi +else + echo "ℹ️ Environnement local détecté" + + # Vérifier si une clé SSH existe + if [ -f ~/.ssh/id_rsa ]; then + echo "🔑 Clé SSH locale trouvée" + + # Configurer Git pour utiliser SSH localement + git config --global url."git@git.4nkweb.com:".insteadOf "https://git.4nkweb.com/" + + echo "✅ Configuration SSH locale terminée" + else + echo "⚠️ Aucune clé SSH trouvée, configuration manuelle requise" + echo "💡 Pour configurer SSH manuellement :" + echo " 1. Générer une clé SSH : ssh-keygen -t rsa -b 4096" + echo " 2. Ajouter la clé publique à votre compte Gitea" + echo " 3. Tester : ssh -T git@git.4nkweb.com" + fi +fi + +echo "🎯 Configuration SSH terminée pour ihm_client" diff --git a/start-4nk-node.sh b/start-4nk-node.sh index 93b6746..16b6dea 100644 --- a/start-4nk-node.sh +++ b/start-4nk-node.sh @@ -18,18 +18,18 @@ wait_for_service() { local attempt=1 echo "⏳ Attente du service $service_name ($service_url)..." - + while [ $attempt -le $max_attempts ]; do if wget --quiet --tries=1 --timeout=5 --spider "$service_url" 2>/dev/null; then echo "✅ Service $service_name disponible" return 0 fi - + echo " Tentative $attempt/$max_attempts - Service $service_name non disponible" sleep 2 attempt=$((attempt + 1)) done - + echo "❌ Service $service_name non disponible après $max_attempts tentatives" return 1 } @@ -42,18 +42,18 @@ check_websocket() { local attempt=1 echo "🔌 Vérification WebSocket $service_name ($ws_url)..." - + while [ $attempt -le $max_attempts ]; do if nc -z $(echo $ws_url | sed 's|ws://||' | sed 's|wss://||' | cut -d: -f1) $(echo $ws_url | cut -d: -f3) 2>/dev/null; then echo "✅ WebSocket $service_name accessible" return 0 fi - + echo " Tentative $attempt/$max_attempts - WebSocket $service_name non accessible" sleep 3 attempt=$((attempt + 1)) done - + echo "⚠️ WebSocket $service_name non accessible (continuera sans)" return 0 } @@ -115,7 +115,7 @@ echo " 🌐 API: $SDK_RELAY_HTTP_URL" # Maintenir le conteneur en vie while true; do sleep 30 - + # Vérification périodique de la santé if ! wget --quiet --tries=1 --timeout=5 --spider http://localhost 2>/dev/null; then echo "❌ Nginx ne répond plus, redémarrage..."