From ab630f28d99a05bf2dc6e0dc9ed7b0662824c672 Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Thu, 25 Sep 2025 12:42:13 +0000 Subject: [PATCH] auto_clea --- .cursor/config.json | 14 - .cursor/nginx_fix.conf | 20 -- .cursor/rules.md | 10 - .env.master | 182 +----------- README.md | 16 +- conf/nginx/dev4.4nkweb.com-https.conf | 4 +- conf/nginx/dev4.4nkweb.com.conf | 2 +- conf/nginx/logging.conf | 4 +- .../dev4.4nkweb.com-https.conf | 2 +- conf/promtail/promtail.yml | 16 +- data | 1 + docker-compose.yml | 59 ++-- log/status-api.out | 20 -- log/status-api.pid | 1 - logs | 1 + logs/bitcoin/bitcoin.log | 2 - logs/blindbit/blindbit.log | 2 - logs/docker-compose.log | 1 - logs/ihm_client/ihm_client.log | 2 - logs/lecoffre-back/lecoffre-back.log | 2 - logs/lecoffre-front/lecoffre-front.log | 2 - logs/miner/miner.log | 2 - logs/nginx/access.log | 0 logs/nginx/error.log | 0 logs/nginx/nginx.log | 2 - logs/sdk_relay/sdk_relay.log | 2 - logs/sdk_signer/sdk_signer.log | 2 - logs/sdk_storage/sdk_storage.log | 2 - logs/tor/tor.log | 2 - scripts | 1 + scripts/README.md | 236 ---------------- scripts/backup-data.sh | 78 ------ scripts/build-project.sh | 110 -------- scripts/collect-logs.sh | 58 ---- scripts/deploy-autonomous.sh | 115 -------- scripts/deploy-grafana.sh | 265 ------------------ scripts/deploy-master.sh | 74 ----- scripts/deploy-status-page.sh | 55 ---- scripts/entrypoint.sh | 87 ------ scripts/fix_relay_funds.sh | 64 ----- scripts/funds/auto_transfer_funds.sh | 229 --------------- scripts/funds/check_and_transfer_funds.sh | 44 --- scripts/funds/funds_detector_service.js | 171 ----------- scripts/funds/monitor_funds.sh | 46 --- scripts/funds/simple_transfer.sh | 63 ----- scripts/funds/startup_funds_check.sh | 40 --- scripts/generate-ssl-certs.sh | 35 --- scripts/healthchecks/bitcoin-progress.sh | 24 -- scripts/healthchecks/blindbit-progress.sh | 18 -- scripts/healthchecks/sdk-relay-progress.sh | 24 -- scripts/healthchecks/sdk-signer-progress.sh | 4 - scripts/healthchecks/tor-progress.sh | 7 - scripts/maintenance.sh | 182 ------------ scripts/optimize-relay-startup.sh | 65 ----- scripts/pre-build.sh | 100 ------- scripts/restore-data.sh | 94 ------- scripts/setup-logs.sh | 103 ------- scripts/start.sh | 263 ----------------- scripts/sync-configs.sh | 187 ------------ scripts/sync-monitoring-config.sh | 220 --------------- scripts/test-dashboards.sh | 172 ------------ scripts/test-monitoring.sh | 32 --- scripts/uninstall-host-nginx.sh | 79 ------ scripts/update-healthchecks.sh | 66 ----- scripts/update-images.sh | 36 --- scripts/validate-deployment.sh | 223 --------------- scripts/verify_mining_fix.sh | 55 ---- 67 files changed, 57 insertions(+), 4043 deletions(-) delete mode 100644 .cursor/config.json delete mode 100644 .cursor/nginx_fix.conf delete mode 100644 .cursor/rules.md mode change 100644 => 120000 .env.master create mode 120000 data delete mode 100644 log/status-api.out delete mode 100644 log/status-api.pid create mode 120000 logs delete mode 100755 logs/bitcoin/bitcoin.log delete mode 100755 logs/blindbit/blindbit.log delete mode 100755 logs/docker-compose.log delete mode 100755 logs/ihm_client/ihm_client.log delete mode 100755 logs/lecoffre-back/lecoffre-back.log delete mode 100755 logs/lecoffre-front/lecoffre-front.log delete mode 100755 logs/miner/miner.log delete mode 100755 logs/nginx/access.log delete mode 100755 logs/nginx/error.log delete mode 100755 logs/nginx/nginx.log delete mode 100755 logs/sdk_relay/sdk_relay.log delete mode 100755 logs/sdk_signer/sdk_signer.log delete mode 100755 logs/sdk_storage/sdk_storage.log delete mode 100755 logs/tor/tor.log create mode 120000 scripts delete mode 100644 scripts/README.md delete mode 100755 scripts/backup-data.sh delete mode 100755 scripts/build-project.sh delete mode 100755 scripts/collect-logs.sh delete mode 100755 scripts/deploy-autonomous.sh delete mode 100755 scripts/deploy-grafana.sh delete mode 100755 scripts/deploy-master.sh delete mode 100755 scripts/deploy-status-page.sh delete mode 100755 scripts/entrypoint.sh delete mode 100755 scripts/fix_relay_funds.sh delete mode 100755 scripts/funds/auto_transfer_funds.sh delete mode 100755 scripts/funds/check_and_transfer_funds.sh delete mode 100755 scripts/funds/funds_detector_service.js delete mode 100755 scripts/funds/monitor_funds.sh delete mode 100755 scripts/funds/simple_transfer.sh delete mode 100755 scripts/funds/startup_funds_check.sh delete mode 100755 scripts/generate-ssl-certs.sh delete mode 100755 scripts/healthchecks/bitcoin-progress.sh delete mode 100755 scripts/healthchecks/blindbit-progress.sh delete mode 100755 scripts/healthchecks/sdk-relay-progress.sh delete mode 100755 scripts/healthchecks/sdk-signer-progress.sh delete mode 100755 scripts/healthchecks/tor-progress.sh delete mode 100755 scripts/maintenance.sh delete mode 100755 scripts/optimize-relay-startup.sh delete mode 100755 scripts/pre-build.sh delete mode 100755 scripts/restore-data.sh delete mode 100755 scripts/setup-logs.sh delete mode 100755 scripts/start.sh delete mode 100755 scripts/sync-configs.sh delete mode 100755 scripts/sync-monitoring-config.sh delete mode 100755 scripts/test-dashboards.sh delete mode 100755 scripts/test-monitoring.sh delete mode 100755 scripts/uninstall-host-nginx.sh delete mode 100755 scripts/update-healthchecks.sh delete mode 100755 scripts/update-images.sh delete mode 100755 scripts/validate-deployment.sh delete mode 100755 scripts/verify_mining_fix.sh diff --git a/.cursor/config.json b/.cursor/config.json deleted file mode 100644 index b6b5b65..0000000 --- a/.cursor/config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "language": "fr", - "shell": "/usr/bin/bash", - "formatting": { - "markdown": { - "lint_strict": true - } - }, - "ci": { - "trigger_commit_prefix": "ci: docker_tag=", - "default_tag": "ext", - "branch": "dev4" - } -} diff --git a/.cursor/nginx_fix.conf b/.cursor/nginx_fix.conf deleted file mode 100644 index 54e00d2..0000000 --- a/.cursor/nginx_fix.conf +++ /dev/null @@ -1,20 +0,0 @@ - # API backend - route /back/ vers /api/ du backend - location ~* ^/back/(.*)$ { - proxy_pass http://127.0.0.1:8080/api/$1; - proxy_http_version 1.1; - proxy_set_header Host $host; - 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; - proxy_set_header Connection ""; - proxy_buffering off; - } - - # API direct - route /api/ vers le backend - location /api/ { - proxy_pass http://127.0.0.1:8080/api/; - include /etc/nginx/proxy_params; - proxy_read_timeout 300; - proxy_connect_timeout 300; - proxy_send_timeout 300; - } diff --git a/.cursor/rules.md b/.cursor/rules.md deleted file mode 100644 index 6270a65..0000000 --- a/.cursor/rules.md +++ /dev/null @@ -1,10 +0,0 @@ -# Règles Cursor pour ce projet - -- Toujours répondre en français. -- Commandes simples, une par une. -- CI front/back: déclenchement par commit `ci: docker_tag=ext` sur `dev4`. -- Nginx local obligatoire. Confs dans `conf/nginx/`. Pas de Docker pour Nginx. -- Avant modification Nginx: vérifier `-w` sur fichier, backup horodatée vers `.cursor/backup/`, édition atomique (temp + mv), `nginx -t`, reload. -- Docker images: utiliser le tag `docker-support-v2` si spécifié par projet, sinon `ext`. -- Toujours mettre à jour `docs/` et `tests/` après modifications. -- Ne jamais exposer de secrets dans les `.env.example` côté front. diff --git a/.env.master b/.env.master deleted file mode 100644 index de0e1c5..0000000 --- a/.env.master +++ /dev/null @@ -1,181 +0,0 @@ -# DOMAIN -DOMAIN=dev4.4nkweb.com -BOOTSTRAP_DOMAIN=dev3.4nkweb.com -LOCAL_DOMAIN=local.4nkweb.com -LECOFFRE_BACK_DOMAIN=dev3.4nkweb.com - -basePath=/lecoffre -assetPrefix=/lecoffre -trailingSlash=true - -# GIT -GITEA_BASE_URL=git.4nkweb.com -GIT_TOKEN=8cde80690a5ffd737536d82a1ab16a765d5105df -GITEA_OWNER="nicolas.cantu,Omar" -GITEA_RUNNER_NAME=debian-runner - -# Variables d'environnement pour l'application back-end -NODE_ENV=production -RUST_LOG=DEBUG -NODE_OPTIONS=--max-old-space-size=2048 - -# Configuration serveur -APP_HOST=dev4.4nkweb.com -API_BASE_URL=https://dev3.4nkweb.com/back -DEFAULT_STORAGE=https://dev4.4nkweb.com/storage - -# Variables d'environnement pour l'application front-end -# IHM URLS -VITE_BOOTSTRAPURL=wss://dev3.4nkweb.com/ws/ - -# Cartes de test Stripe -SUCCES='4242 4242 4242 4242' -DECLINED='4000 0025 0000 3155' -CORS_ALLOWED_ORIGINS=https://dev4.4nkweb.com - -core_url=http://bitcoin:38332 -ws_url=0.0.0.0:8090 -wallet_name=default -network=signet -blindbit_url=http://blindbit:8000 -zmq_url=tcp://bitcoin:29000 -storage=https://dev4.4nkweb.com/storage -data_dir=/home/bitcoin/.4nk -bitcoin_data_dir=/home/bitcoin/.bitcoin -bootstrap_url=wss://dev3.4nkweb.com/ws/ -bootstrap_faucet=true - -# ================== /!\ sensible ========================= - -# Configuration IDNOT - -VITE_JWT_SECRET_KEY=52b3d77617bb00982dfee15b08effd52cfe5b2e69b2f61cc4848cfe1e98c0bc9 - -# Configuration pour réduire les traces Docker -DOCKER_LOG_LEVEL=info -COMPOSE_LOG_LEVEL=WARNING - -# =========================================== -# VARIABLES(manquantes) -# =========================================== -SIGNER_WS_URL=ws://dev3.4nkweb.com:9090 -SIGNER_BASE_URL=https://dev3.4nkweb.com -SIGNER_API_KEY=your-api-key-change-this -SIGNER_PORT=9090 -SIGNER_DATABASE_PATH=./data/server.db -SIGNER_RELAY_URLS=wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/ -SIGNER_AUTO_RESTART=true -SIGNER_MAX_RESTARTS=3 -SIGNER_LOG_LEVEL=info - -# =========================================== -# VARIABLES SDK_RELAY (formatées pour docker-compose) -# =========================================== -RELAY_URLS=wss://dev4.4nkweb.com/ws/,wss://dev3.4nkweb.com/ws/ -SDK_RELAY_CORE_URL=http://bitcoin:38332 -SDK_RELAY_WS_URL=0.0.0.0:8090 -SDK_RELAY_WALLET_NAME=default -SDK_RELAY_NETWORK=signet -SDK_RELAY_ZMQ_URL=tcp://bitcoin:29000 -SDK_RELAY_STORAGE=https://dev4.4nkweb.com/storage -SDK_RELAY_DATA_DIR=/app/.4nk -SDK_RELAY_BITCOIN_DATA_DIR=/app/.bitcoin -SDK_RELAY_BOOTSTRAP_URL=wss://dev3.4nkweb.com/ws/ -SDK_RELAY_BOOTSTRAP_FAUCET=true -SDK_RELAY_BLINDBIT_URL=http://blindbit-oracle:8000 - -# =========================================== -# VARIABLES IHM_CLIENT (formatées pour docker-compose) -# =========================================== -VITE_API_BASE_URL=https://dev3.4nkweb.com/back/api/v1 -VITE_WS_URL=wss://dev4.4nkweb.com/ws/ -VITE_STORAGE_URL=https://dev4.4nkweb.com/storage -VITE_SIGNER_URL=https://dev3.4nkweb.com/signer - -# =========================================== -# VARIABLES MONITORING -# =========================================== -GRAFANA_ADMIN_USER=admin -GRAFANA_ADMIN_PASSWORD=admin123 -LOKI_URL=http://loki:3100 -PROMTAIL_CONFIG_FILE=/etc/promtail/config.yml - -# =========================================== -# GRAFANA -# =========================================== -GF_SECURITY_ADMIN_PASSWORD=Fuy8ZfxQI2xdSdoB8wsGxNjyU -GF_USERS_ALLOW_SIGN_UP=false -GF_SERVER_ROOT_URL=https://dev4.4nkweb.com/grafana/ -GF_PLUGINS_PREINSTALL_SYNC=grafana-clock-panel,grafana-simple-json-datasource - -# Frontend runtime -NODE_OPTIONS=--max-old-space-size=4096 -NODE_ENV=production - -# Public URLs -NEXT_PUBLIC_4NK_IFRAME_URL=https://dev4.4nkweb.com - - -# Back base for state endpoint (dev3) -NEXT_PUBLIC_BACK_BASE=https://dev3.4nkweb.com - -OVH_APP_KEY=5ab0709bbb65ef26 -OVH_APP_SECRET=de1fac1779d707d263a611a557cd5766 -OVH_CONSUMER_KEY=5fe817829b8a9c780cfa2354f8312ece -OVH_SMS_SERVICE_NAME=sms-tt802880-1 - -# Configuration SMS Factor -SMS_FACTOR_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI4NzgzNiIsImlhdCI6MTcwMTMzOTY1Mi45NDUzOH0.GNoqLb5MDBWuniNlQjbr1PKolwxGqBZe_tf4IMObvHw - -#Configuration Mailchimp -MAILCHIMP_API_KEY=md-VVfaml-ApIV4nsGgaJKl0A -MAILCHIMP_KEY=3fa54304bc766dfd0b8043a827b28a3a-us17 -MAILCHIMP_LIST_ID=a48d9ad852 - -#Configuration Stripe -STRIPE_SECRET_KEY=sk_test_51OwKmMP5xh1u9BqSeFpqw0Yr15hHtFsh0pvRGaE0VERhlYtvw33ND1qiGA6Dy1DPmmV61B6BqIimlhuv7bwElhjF00PLQwD60n -STRIPE_WEBHOOK_SECRET= -STRIPE_STANDARD_SUBSCRIPTION_PRICE_ID=price_1P66fuP5xh1u9BqSHj0O6Uy3 -STRIPE_STANDARD_ANNUAL_SUBSCRIPTION_PRICE_ID=price_1P9NsRP5xh1u9BqSFgkUDbQY -STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID=price_1P66RqP5xh1u9BqSuUzkQNac -STRIPE_UNLIMITED_ANNUAL_SUBSCRIPTION_PRICE_ID=price_1P9NpKP5xh1u9BqSApFogvUB - -# Configuration back-end -IDNOT_CLIENT_ID=B3CE56353EDB15A9 -IDNOT_CLIENT_SECRET=3F733549E879878344B6C949B366BB5CDBB2DB5B7F7AB7EBBEBB0F0DD0776D1C -IDNOT_REDIRECT_URI=https://lecoffreio.4nkweb.com/authorized-client -IDNOT_TOKEN_URL=https://qual-connexion.idnot.fr/user/IdPOAuth2/token/idnot_idp_v1 -IDNOT_API_BASE_URL=https://qual-api.notaires.fr - -# Configuration front-end - -NEXT_PUBLIC_IDNOT_REDIRECT_URI_FIXED=https://lecoffreio.4nkweb.com/authorized-client -NEXT_PUBLIC_4NK_URL=https://dev4.4nkweb.com -NEXT_PUBLIC_FRONT_APP_HOST=https://dev4.4nkweb.com/lecoffre -NEXT_PUBLIC_IDNOT_BASE_URL=https://qual-connexion.idnot.fr -NEXT_PUBLIC_IDNOT_AUTHORIZE_ENDPOINT=/IdPOAuth2/authorize/idnot_idp_v1 -NEXT_PUBLIC_IDNOT_CLIENT_ID=B3CE56353EDB15A9 -NEXT_PUBLIC_BACK_API_PROTOCOL=https -NEXT_PUBLIC_BACK_API_HOST=dev3.4nkweb.com -NEXT_PUBLIC_BACK_API_PORT=443 -NEXT_PUBLIC_BACK_API_ROOT_URL=/api -NEXT_PUBLIC_BACK_API_VERSION=v1 -NEXT_PUBLIC_ANK_BASE_REDIRECT_URI=https://dev4.4nkweb.com -NEXT_PUBLIC_TARGET_ORIGIN=https://dev4.4nkweb.com/lecoffre -NEXT_PUBLIC_IDNOT_REDIRECT_URI=https://lecoffreio.4nkweb.com/authorized-client -NEXT_PUBLIC_DOCAPOSTE_API_URL= -NEXT_PUBLIC_API_URL=https://dev3.4nkweb.com/api -NEXT_PUBLIC_DEFAULT_VALIDATOR_ID=28c9a3a8151bef545ebf700ca5222c63d0031ad593097e95c1de202464304a99 -NEXT_PUBLIC_DEFAULT_STORAGE_URLS=https://dev4.4nkweb.com/storage - -BACK_API_ROOT_URL=/api -BACK_API_VERSION=/v1 - -# Configuration idnot -IDNOT_ANNUARY_BASE_URL='https://qual-api.notaires.fr/annuaire' -IDNOT_API_KEY=ba557f84-0bf6-4dbf-844f-df2767555e3e -# 96b8b46a-ff67-4325-b8b4-6aff67e32542 - -ALLOW_LOCALHOST_REDIRECTS=false -BACK_HMAC_SECRET=7e0f4a8b7c9d3e2fb6c1a5d4e8f09b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f70 -ALLOWED_REDIRECT_HOST_PATTERNS=^dev4\.4nkweb\.com$,^lecoffreio\.4nkweb\.com$ diff --git a/.env.master b/.env.master new file mode 120000 index 0000000..6c33671 --- /dev/null +++ b/.env.master @@ -0,0 +1 @@ +../.env.master \ No newline at end of file diff --git a/README.md b/README.md index 0b94c26..10d89da 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,14 @@ ./scripts/maintenance.sh ``` +> Note scripts centralisés: le répertoire `./scripts/` de `lecoffre_node` est un lien symbolique vers `../../scripts/lecoffre_node`. Les chemins existants restent valides. + ### 📁 Documentation - **[`scripts/README.md`](scripts/README.md)** - Documentation complète des scripts -- **[`IA_agents/context.md`](IA_agents/context.md)** - Contexte et architecture du projet -- **[`IA_agents/flux.md`](IA_agents/flux.md)** - Flux d'architecture et services -- **[`IA_agents/deploy.md`](IA_agents/deploy.md)** - Procédure de déploiement complète +- **[`4NK_env/IA_agents/context.md`](IA_agents/context.md)** - Contexte et architecture du projet +- **[`4NK_env/IA_agents/flux.md`](IA_agents/flux.md)** - Flux d'architecture et services +- **[`4NK_env/IA_agents/deploy.md`](IA_agents/deploy.md)** - Procédure de déploiement complète ### 🛡️ Protection des Données @@ -213,9 +215,9 @@ lecoffre_node/ ## 📚 Documentation Complète ### Documentation IA (Recommandée) -- [`IA_agents/context.md`](IA_agents/context.md) - Contexte et objectifs -- [`IA_agents/flux.md`](IA_agents/flux.md) - Architecture et flux -- [`IA_agents/deploy.md`](IA_agents/deploy.md) - Procédure de déploiement +- [`4NK_env/IA_agents/context.md`](IA_agents/context.md) - Contexte et objectifs +- [`4NK_env/IA_agents/flux.md`](IA_agents/flux.md) - Architecture et flux +- [`4NK_env/IA_agents/deploy.md`](IA_agents/deploy.md) - Procédure de déploiement ### Documentation Technique - [`docs/REX.md`](docs/REX.md) - Rapport d'expérience de déploiement @@ -258,4 +260,4 @@ Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de --- -**💡 Conseil** : Commencez toujours par lire [`IA_agents/context.md`](IA_agents/context.md) pour comprendre le contexte du projet ! +**💡 Conseil** : Commencez toujours par lire [`4NK_env/IA_agents/context.md`](IA_agents/context.md) pour comprendre le contexte du projet ! diff --git a/conf/nginx/dev4.4nkweb.com-https.conf b/conf/nginx/dev4.4nkweb.com-https.conf index 9736740..b147c3d 100644 --- a/conf/nginx/dev4.4nkweb.com-https.conf +++ b/conf/nginx/dev4.4nkweb.com-https.conf @@ -4,7 +4,7 @@ server { http2 on; server_name dev4.4nkweb.com; - include /home/debian/4NK_env/lecoffre_node/conf/nginx/logging.conf; + include /home/debian/4NK_env/confs/lecoffre_node/nginx/logging.conf; # Certificats SSL ssl_certificate /etc/letsencrypt/live/dev4.4nkweb.com/fullchain.pem; @@ -192,7 +192,7 @@ server { # favicon location = /favicon.ico { - root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets; + root /home/debian/4NK_env/confs/lecoffre_node/nginx/assets; try_files /favicon.ico =404; } diff --git a/conf/nginx/dev4.4nkweb.com.conf b/conf/nginx/dev4.4nkweb.com.conf index e26ac3d..d817484 100644 --- a/conf/nginx/dev4.4nkweb.com.conf +++ b/conf/nginx/dev4.4nkweb.com.conf @@ -216,7 +216,7 @@ server { # favicon location = /favicon.ico { - root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets; + root /home/debian/4NK_env/confs/lecoffre_node/nginx/assets; try_files /favicon.ico =404; access_log off; expires 30d; diff --git a/conf/nginx/logging.conf b/conf/nginx/logging.conf index a993765..2ccba34 100644 --- a/conf/nginx/logging.conf +++ b/conf/nginx/logging.conf @@ -23,8 +23,8 @@ log_format lecoffre_json escape=json '}'; # Default access and error logs for the front site -access_log /var/log/nginx/lecoffre_front_access.log lecoffre_json; -error_log /var/log/nginx/lecoffre_front_error.log warn; +access_log /home/debian/4NK_env/logs/nginx/lecoffre_front_access.log lecoffre_json; +error_log /home/debian/4NK_env/logs/nginx/lecoffre_front_error.log warn; # Map incoming X-Request-ID or generate one map $http_x_request_id $x_request_id { diff --git a/conf/nginx_backups_host/dev4.4nkweb.com-https.conf b/conf/nginx_backups_host/dev4.4nkweb.com-https.conf index e1e0dc9..47c9b86 100644 --- a/conf/nginx_backups_host/dev4.4nkweb.com-https.conf +++ b/conf/nginx_backups_host/dev4.4nkweb.com-https.conf @@ -185,7 +185,7 @@ server { # favicon location = /favicon.ico { - root /home/debian/4NK_env/lecoffre_node/conf/nginx/assets; + root /home/debian/4NK_env/confs/lecoffre_node/nginx/assets; try_files /favicon.ico =404; } diff --git a/conf/promtail/promtail.yml b/conf/promtail/promtail.yml index f360651..05d943f 100644 --- a/conf/promtail/promtail.yml +++ b/conf/promtail/promtail.yml @@ -17,7 +17,7 @@ scrape_configs: labels: job: bitcoin service: bitcoin-signet - __path__: /var/log/lecoffre/bitcoin/*.log + __path__: /home/debian/4NK_env/logs/bitcoin/*.log # Blindbit Oracle Logs - job_name: blindbit @@ -27,7 +27,7 @@ scrape_configs: labels: job: blindbit service: blindbit-oracle - __path__: /var/log/lecoffre/blindbit/*.log + __path__: /home/debian/4NK_env/logs/blindbit/*.log # SDK Relay Logs - job_name: sdk_relay @@ -37,7 +37,7 @@ scrape_configs: labels: job: sdk_relay service: sdk_relay - __path__: /var/log/lecoffre/sdk_relay/*.log + __path__: /home/debian/4NK_env/logs/sdk_relay/*.log # SDK Storage Logs - job_name: sdk_storage @@ -47,7 +47,7 @@ scrape_configs: labels: job: sdk_storage service: sdk_storage - __path__: /var/log/lecoffre/sdk_storage/*.log + __path__: /home/debian/4NK_env/logs/sdk_storage/*.log # LeCoffre Frontend Logs - job_name: lecoffre-front @@ -57,7 +57,7 @@ scrape_configs: labels: job: lecoffre-front service: lecoffre-front - __path__: /var/log/lecoffre/lecoffre-front/*.log + __path__: /home/debian/4NK_env/logs/lecoffre-front/*.log # IHM Client Logs - job_name: ihm_client @@ -67,7 +67,7 @@ scrape_configs: labels: job: ihm_client service: ihm_client - __path__: /var/log/lecoffre/ihm_client/*.log + __path__: /home/debian/4NK_env/logs/ihm_client/*.log # Miner Logs - job_name: miner @@ -77,7 +77,7 @@ scrape_configs: labels: job: miner service: signet_miner - __path__: /var/log/lecoffre/miner/*.log + __path__: /home/debian/4NK_env/logs/miner/*.log # Tor Logs - job_name: tor @@ -87,7 +87,7 @@ scrape_configs: labels: job: tor service: tor-proxy - __path__: /var/log/lecoffre/tor/*.log + __path__: /home/debian/4NK_env/logs/tor/*.log # Docker Container Logs - job_name: docker diff --git a/data b/data new file mode 120000 index 0000000..d097251 --- /dev/null +++ b/data @@ -0,0 +1 @@ +/home/debian/4NK_env/data/lecoffre_node \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 861bad7..5d04680 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,8 +3,8 @@ services: image: btcpayserver/tor:0.4.8.10 container_name: tor-proxy volumes: - - ./logs/tor:/var/log/tor - - ./scripts/healthchecks:/scripts/healthchecks:ro + - /home/debian/4NK_env/logs/tor:/var/log/tor + - /home/debian/4NK_env/scripts/lecoffre_node/healthchecks:/scripts/healthchecks:ro networks: btcnet: aliases: @@ -24,9 +24,9 @@ services: condition: service_healthy volumes: - bitcoin_data:/home/bitcoin/.bitcoin - - ./conf/bitcoin/bitcoin.conf:/etc/bitcoin/bitcoin.conf:ro - - ./logs/bitcoin:/var/log/bitcoin - - ./scripts/healthchecks:/scripts/healthchecks:ro + - /home/debian/4NK_env/confs/lecoffre_node/bitcoin/bitcoin.conf:/etc/bitcoin/bitcoin.conf:ro + - /home/debian/4NK_env/logs/bitcoin:/var/log/bitcoin + - /home/debian/4NK_env/scripts/lecoffre_node/healthchecks:/scripts/healthchecks:ro networks: btcnet: aliases: @@ -53,8 +53,8 @@ services: - blindbit_data:/root/.blindbit-oracle - ./blindbit/blindbit.toml:/tmp/blindbit.toml:ro - bitcoin_data:/home/bitcoin/.bitcoin - - ./logs/blindbit:/var/log/blindbit - - ./scripts/healthchecks:/scripts/healthchecks:ro + - /home/debian/4NK_env/logs/blindbit:/var/log/blindbit + - /home/debian/4NK_env/scripts/lecoffre_node/healthchecks:/scripts/healthchecks:ro entrypoint: > sh -c "mkdir -p /root/.blindbit-oracle && if [ ! -f /root/.blindbit-oracle/blindbit.toml ]; then @@ -86,12 +86,12 @@ services: blindbit: condition: service_healthy volumes: - - ./conf/relay/sdk_relay.conf:/app/.conf:ro + - /home/debian/4NK_env/confs/lecoffre_node/relay/sdk_relay.conf:/app/.conf:ro - sdk_data:/app/.4nk - bitcoin_data:/app/.bitcoin - - ./scripts/funds:/scripts/funds:ro - - ./logs/sdk_relay:/var/log/sdk_relay - - ./scripts/healthchecks:/scripts/healthchecks:ro + - /home/debian/4NK_env/scripts/lecoffre_node/funds:/scripts/funds:ro + - /home/debian/4NK_env/logs/sdk_relay:/var/log/sdk_relay + - /home/debian/4NK_env/scripts/lecoffre_node/healthchecks:/scripts/healthchecks:ro ports: - "0.0.0.0:8090:8090" - "0.0.0.0:8091:8091" @@ -154,7 +154,7 @@ services: # - "0.0.0.0:8080:8080" # volumes: # - /var/run/docker.sock:/var/run/docker.sock - # - ./logs/lecoffre-back:/var/log/lecoffre-back + # - /home/debian/4NK_env/logs/lecoffre-back:/var/log/lecoffre-back # networks: # btcnet: # aliases: @@ -183,7 +183,7 @@ services: ports: - "0.0.0.0:3004:8080" volumes: - - ./logs/lecoffre-front:/var/log/lecoffre-front + - /home/debian/4NK_env/logs/lecoffre-front:/var/log/lecoffre-front networks: btcnet: aliases: @@ -198,6 +198,7 @@ services: sdk_signer: condition: service_healthy user: lecoffreuser + command: ["sh", "-c", "exec npm run start >> /var/log/lecoffre-front/stdout.log 2>&1"] healthcheck: test: ["CMD", "sh", "-c", "if ps aux | grep -v grep | grep next-server >/dev/null 2>&1; then echo 'LeCoffre Frontend ready: Next.js server running'; exit 0; else echo 'LeCoffre Frontend starting: Next.js server not yet ready'; exit 1; fi"] interval: 30s @@ -223,7 +224,7 @@ services: ports: - "0.0.0.0:3003:3003" volumes: - - ./logs/ihm_client:/var/log/ihm_client + - /home/debian/4NK_env/logs/ihm_client:/var/log/ihm_client networks: btcnet: aliases: @@ -236,7 +237,7 @@ services: sdk_signer: condition: service_healthy user: root - command: ["npm", "start"] + command: ["sh", "-c", "exec npm start >> /var/log/ihm_client/stdout.log 2>&1"] healthcheck: test: ["CMD", "sh", "-c", "if curl -f http://localhost:3003/ >/dev/null 2>&1; then echo 'IHM Client ready: Vite dev server responding'; exit 0; else echo 'IHM Client starting: Vite dev server not yet ready'; exit 1; fi"] interval: 30s @@ -256,8 +257,8 @@ services: - "0.0.0.0:3001:9090" volumes: - sdk_signer_data:/app/data - - ./logs/sdk_signer:/var/log/sdk_signer - - ./scripts/healthchecks:/scripts/healthchecks:ro + - /home/debian/4NK_env/logs/sdk_signer:/var/log/sdk_signer + - /home/debian/4NK_env/scripts/lecoffre_node/healthchecks:/scripts/healthchecks:ro networks: btcnet: aliases: @@ -266,7 +267,7 @@ services: depends_on: sdk_storage: condition: service_healthy - command: ["node", "/app/dist/index.js"] + command: ["sh", "-c", "exec node /app/dist/index.js >> /var/log/sdk_signer/stdout.log 2>&1"] healthcheck: test: ["CMD", "sh", "/scripts/healthchecks/sdk-signer-progress.sh"] interval: 30s @@ -285,7 +286,7 @@ services: - "0.0.0.0:8081:8080" volumes: - sdk_storage_data:/app/data - - ./logs/sdk_storage:/var/log/sdk_storage + - /home/debian/4NK_env/logs/sdk_storage:/var/log/sdk_storage healthcheck: test: ["CMD", "sh", "-c", "if curl -f http://localhost:8080/health >/dev/null 2>&1; then echo 'SDK Storage ready: API responding'; exit 0; else echo 'SDK Storage starting: API not yet ready'; exit 1; fi"] interval: 30s @@ -321,7 +322,7 @@ services: - ./miner/.env volumes: - bitcoin_data:/bitcoin:ro - - ./logs/miner:/var/log/miner + - /home/debian/4NK_env/logs/miner:/var/log/miner networks: btcnet: aliases: @@ -336,10 +337,10 @@ services: - "0.0.0.0:3005:3000" volumes: - grafana_data:/var/lib/grafana - - ./conf/grafana/provisioning:/etc/grafana/provisioning - - ./conf/grafana/dashboards:/var/lib/grafana/dashboards - - ./conf/grafana/grafana.ini:/etc/grafana/grafana.ini:ro - - ./logs:/var/log/lecoffre:ro + - /home/debian/4NK_env/confs/lecoffre_node/grafana/provisioning:/etc/grafana/provisioning + - /home/debian/4NK_env/confs/lecoffre_node/grafana/dashboards:/var/lib/grafana/dashboards + - /home/debian/4NK_env/confs/lecoffre_node/grafana/grafana.ini:/etc/grafana/grafana.ini:ro + - /home/debian/4NK_env/logs:/var/log/lecoffre:ro environment: - GF_SECURITY_ADMIN_PASSWORD=Fuy8ZfxQI2xdSdoB8wsGxNjyU - GF_USERS_ALLOW_SIGN_UP=false @@ -371,7 +372,7 @@ services: - "0.0.0.0:3100:3100" volumes: - loki_data:/loki - - ./conf/loki/loki-config.yaml:/etc/loki/loki-config.yaml:ro + - /home/debian/4NK_env/confs/lecoffre_node/loki/loki-config.yaml:/etc/loki/loki-config.yaml:ro command: -config.file=/etc/loki/loki-config.yaml networks: btcnet: @@ -389,8 +390,8 @@ services: image: promtail-custom:ext container_name: promtail volumes: - - ./logs:/var/log/lecoffre:ro - - ./conf/promtail/promtail.yml:/etc/promtail/config.yml:ro + - /home/debian/4NK_env/logs:/home/debian/4NK_env/logs:ro + - /home/debian/4NK_env/confs/lecoffre_node/promtail/promtail.yml:/etc/promtail/config.yml:ro - /var/run/docker.sock:/var/run/docker.sock command: -config.file=/etc/promtail/config.yml networks: @@ -421,8 +422,8 @@ services: volumes: - ./web/status/api.py:/app/api.py:ro - /var/run/docker.sock:/var/run/docker.sock:ro - - ./logs:/var/log/lecoffre:ro - - ./scripts/healthchecks:/scripts/healthchecks:ro + - /home/debian/4NK_env/logs:/var/log/lecoffre:ro + - /home/debian/4NK_env/scripts/lecoffre_node/healthchecks:/scripts/healthchecks:ro networks: btcnet: aliases: diff --git a/log/status-api.out b/log/status-api.out deleted file mode 100644 index a76cb26..0000000 --- a/log/status-api.out +++ /dev/null @@ -1,20 +0,0 @@ -node:events:497 - throw er; // Unhandled 'error' event - ^ - -Error: listen EADDRINUSE: address already in use 0.0.0.0:3006 - at Server.setupListenHandle [as _listen2] (node:net:1940:16) - at listenInCluster (node:net:1997:12) - at node:net:2206:7 - at process.processTicksAndRejections (node:internal/process/task_queues:90:21) -Emitted 'error' event on Server instance at: - at emitErrorNT (node:net:1976:8) - at process.processTicksAndRejections (node:internal/process/task_queues:90:21) { - code: 'EADDRINUSE', - errno: -98, - syscall: 'listen', - address: '0.0.0.0', - port: 3006 -} - -Node.js v22.19.0 diff --git a/log/status-api.pid b/log/status-api.pid deleted file mode 100644 index 117a88c..0000000 --- a/log/status-api.pid +++ /dev/null @@ -1 +0,0 @@ -322946 diff --git a/logs b/logs new file mode 120000 index 0000000..c28ef22 --- /dev/null +++ b/logs @@ -0,0 +1 @@ +/home/debian/4NK_env/logs \ No newline at end of file diff --git a/logs/bitcoin/bitcoin.log b/logs/bitcoin/bitcoin.log deleted file mode 100755 index d08bb03..0000000 --- a/logs/bitcoin/bitcoin.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for bitcoin -Sun Sep 21 17:19:13 UTC 2025: Service bitcoin started successfully diff --git a/logs/blindbit/blindbit.log b/logs/blindbit/blindbit.log deleted file mode 100755 index d3b07fd..0000000 --- a/logs/blindbit/blindbit.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for blindbit -Sun Sep 21 17:19:13 UTC 2025: Service blindbit started successfully diff --git a/logs/docker-compose.log b/logs/docker-compose.log deleted file mode 100755 index 34d2d6b..0000000 --- a/logs/docker-compose.log +++ /dev/null @@ -1 +0,0 @@ -failed to read /app/.env: line 111: unexpected character "(" in variable name "price_1QMUuXP5xh1u9BqS26uzbJaF (créateurs)" diff --git a/logs/ihm_client/ihm_client.log b/logs/ihm_client/ihm_client.log deleted file mode 100755 index c9a09b8..0000000 --- a/logs/ihm_client/ihm_client.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for ihm_client -Sun Sep 21 17:19:13 UTC 2025: Service ihm_client started successfully diff --git a/logs/lecoffre-back/lecoffre-back.log b/logs/lecoffre-back/lecoffre-back.log deleted file mode 100755 index b0f4fbc..0000000 --- a/logs/lecoffre-back/lecoffre-back.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for lecoffre-back -Sun Sep 21 17:19:13 UTC 2025: Service lecoffre-back started successfully diff --git a/logs/lecoffre-front/lecoffre-front.log b/logs/lecoffre-front/lecoffre-front.log deleted file mode 100755 index 57ddd98..0000000 --- a/logs/lecoffre-front/lecoffre-front.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for lecoffre-front -Sun Sep 21 17:19:13 UTC 2025: Service lecoffre-front started successfully diff --git a/logs/miner/miner.log b/logs/miner/miner.log deleted file mode 100755 index 8fea26d..0000000 --- a/logs/miner/miner.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for miner -Sun Sep 21 17:19:13 UTC 2025: Service miner started successfully diff --git a/logs/nginx/access.log b/logs/nginx/access.log deleted file mode 100755 index e69de29..0000000 diff --git a/logs/nginx/error.log b/logs/nginx/error.log deleted file mode 100755 index e69de29..0000000 diff --git a/logs/nginx/nginx.log b/logs/nginx/nginx.log deleted file mode 100755 index 80050a0..0000000 --- a/logs/nginx/nginx.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for nginx -Sun Sep 21 17:19:13 UTC 2025: Service nginx started successfully diff --git a/logs/sdk_relay/sdk_relay.log b/logs/sdk_relay/sdk_relay.log deleted file mode 100755 index e209d7a..0000000 --- a/logs/sdk_relay/sdk_relay.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for sdk_relay -Sun Sep 21 17:19:13 UTC 2025: Service sdk_relay started successfully diff --git a/logs/sdk_signer/sdk_signer.log b/logs/sdk_signer/sdk_signer.log deleted file mode 100755 index 72ab109..0000000 --- a/logs/sdk_signer/sdk_signer.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for sdk_signer -Sun Sep 21 17:19:13 UTC 2025: Service sdk_signer started successfully diff --git a/logs/sdk_storage/sdk_storage.log b/logs/sdk_storage/sdk_storage.log deleted file mode 100755 index 7ea32ff..0000000 --- a/logs/sdk_storage/sdk_storage.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for sdk_storage -Sun Sep 21 17:19:13 UTC 2025: Service sdk_storage started successfully diff --git a/logs/tor/tor.log b/logs/tor/tor.log deleted file mode 100755 index d5876f3..0000000 --- a/logs/tor/tor.log +++ /dev/null @@ -1,2 +0,0 @@ -Sun Sep 21 17:19:13 UTC 2025: Test log entry for tor -Sun Sep 21 17:19:13 UTC 2025: Service tor started successfully diff --git a/scripts b/scripts new file mode 120000 index 0000000..0b56572 --- /dev/null +++ b/scripts @@ -0,0 +1 @@ +/home/debian/4NK_env/scripts/lecoffre_node \ No newline at end of file diff --git a/scripts/README.md b/scripts/README.md deleted file mode 100644 index 5c78bd4..0000000 --- a/scripts/README.md +++ /dev/null @@ -1,236 +0,0 @@ -# Scripts LeCoffre Node - -Ce répertoire contient tous les scripts nécessaires au déploiement et à la gestion de l'architecture LeCoffre Node. - -## 🚀 Scripts de Déploiement - -### `start.sh` -**Script principal de démarrage séquentiel** -- Lance tous les services dans l'ordre logique -- Affiche la progression détaillée en temps réel -- Compatible avec le réseau Bitcoin Signet -- Gestion des timeouts et erreurs - -```bash -./scripts/start.sh -``` - -### `deploy-master.sh` -**Déploiement de l'architecture autonome** -- Construit et lance le conteneur master -- Configure tous les ports et volumes -- Lance automatiquement les services - -```bash -./scripts/deploy-master.sh -``` - -### `deploy-autonomous.sh` -**Déploiement autonome complet** -- Déploiement sans intervention manuelle -- Configuration automatique de tous les services - -```bash -./scripts/deploy-autonomous.sh -``` - -## 💾 Scripts de Gestion des Données - -### `backup-data.sh` -**Sauvegarde des données critiques** -- Sauvegarde Bitcoin, BlindBit, SDK Storage, SDK Signer -- Création d'archives compressées -- Gestion des permissions - -```bash -./scripts/backup-data.sh -``` - -### `restore-data.sh` -**Restauration des données** -- Restaure depuis une sauvegarde -- Remplace les données existantes -- Confirmation de sécurité - -```bash -./scripts/restore-data.sh -``` - -### `update-images.sh` -**Mise à jour des images Docker** -- Sauvegarde automatique avant mise à jour -- Téléchargement des nouvelles images -- Protection des données - -```bash -./scripts/update-images.sh -``` - -## 📊 Scripts de Monitoring - -### `collect-logs.sh` -**Collecte des logs de tous les services** -- Collecte automatique ou par service -- Organisation par répertoires -- Timestamps sur les fichiers - -```bash -# Tous les services -./scripts/collect-logs.sh - -# Service spécifique -./scripts/collect-logs.sh bitcoin-signet -``` - -### `test-monitoring.sh` -**Tests des services de monitoring** -- Vérification Grafana, Loki, Promtail -- Tests de connectivité -- Validation des dashboards - -```bash -./scripts/test-monitoring.sh -``` - -### `test-dashboards.sh` -**Tests des dashboards Grafana** -- Vérification des dashboards -- Tests des données sources -- Validation des métriques - -```bash -./scripts/test-dashboards.sh -``` - -## 🔧 Scripts de Configuration - -### `sync-configs.sh` -**Synchronisation des configurations** -- Copie des configs vers les conteneurs -- Mise à jour des paramètres -- Redémarrage des services - -```bash -./scripts/sync-configs.sh -``` - -### `sync-monitoring-config.sh` -**Configuration du monitoring** -- Configuration Grafana -- Configuration Loki/Promtail -- Déploiement des dashboards - -```bash -./scripts/sync-monitoring-config.sh -``` - -### `setup-logs.sh` -**Configuration des logs** -- Création des répertoires de logs -- Configuration des permissions -- Setup des rotations - -```bash -./scripts/setup-logs.sh -``` - -## 🛠️ Scripts de Maintenance - -### `fix_relay_funds.sh` -**Correction des fonds du relay** -- Vérification des fonds -- Correction des problèmes -- Tests de connectivité - -```bash -./scripts/fix_relay_funds.sh -``` - -### `optimize-relay-startup.sh` -**Optimisation du démarrage du relay** -- Optimisation des paramètres -- Amélioration des performances -- Tests de stabilité - -```bash -./scripts/optimize-relay-startup.sh -``` - -### `verify_mining_fix.sh` -**Vérification du minage** -- Tests du minage Signet -- Vérification des blocs -- Validation des transactions - -```bash -./scripts/verify_mining_fix.sh -``` - -## 🔒 Scripts de Sécurité - -### `generate-ssl-certs.sh` -**Génération des certificats SSL** -- Création des certificats -- Configuration HTTPS -- Sécurisation des communications - -```bash -./scripts/generate-ssl-certs.sh -``` - -### `uninstall-host-nginx.sh` -**Désinstallation de Nginx host** -- Nettoyage de Nginx -- Suppression des configurations -- Libération des ports - -```bash -./scripts/uninstall-host-nginx.sh -``` - -## 📁 Structure des Volumes - -Les données sont persistées dans les volumes Docker suivants : - -- `4nk_node_bitcoin_data` : Données Bitcoin Signet -- `4nk_node_blindbit_data` : Données BlindBit Oracle -- `4nk_node_sdk_data` : Données SDK Relay -- `4nk_node_sdk_storage_data` : Données SDK Storage -- `4nk_node_grafana_data` : Données Grafana -- `4nk_node_loki_data` : Données Loki - -## 🔄 Workflow de Déploiement - -1. **Déploiement initial** : `./scripts/deploy-master.sh` -2. **Démarrage des services** : `./scripts/start.sh` -3. **Vérification** : `./scripts/test-monitoring.sh` -4. **Sauvegarde** : `./scripts/backup-data.sh` - -## 🔄 Workflow de Mise à Jour - -1. **Sauvegarde** : `./scripts/backup-data.sh` -2. **Mise à jour** : `./scripts/update-images.sh` -3. **Redémarrage** : `./scripts/start.sh` -4. **Vérification** : `./scripts/test-monitoring.sh` - -## 🆘 Récupération d'Urgence - -En cas de problème : - -1. **Arrêt des services** : `docker compose down` -2. **Restauration** : `./scripts/restore-data.sh ` -3. **Redémarrage** : `./scripts/start.sh` - -## 📝 Logs et Debugging - -- **Logs des services** : `./logs//` -- **Collecte des logs** : `./scripts/collect-logs.sh` -- **Monitoring** : Grafana sur port 3005 -- **Status API** : Port 3006 - -## ⚠️ Notes Importantes - -- Tous les scripts préservent les données importantes -- Les sauvegardes sont automatiques lors des mises à jour -- Le réseau Bitcoin Signet est utilisé par défaut -- Les volumes Docker garantissent la persistance des données diff --git a/scripts/backup-data.sh b/scripts/backup-data.sh deleted file mode 100755 index f2724d6..0000000 --- a/scripts/backup-data.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash -# Script de sauvegarde des données critiques LeCoffre Node -# Sauvegarde Bitcoin, BlindBit, SDK Storage et SDK Signer - -set -e - -# Couleurs pour l'affichage -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -BACKUP_DIR="./backups" -TIMESTAMP=$(date +%Y%m%d_%H%M%S) -BACKUP_NAME="lecoffre_backup_${TIMESTAMP}" -HOST_UID=$(id -u) -HOST_GID=$(id -g) - -echo -e "${BLUE}========================================${NC}" -echo -e "${BLUE} LeCoffre Node - Data Backup${NC}" -echo -e "${BLUE}========================================${NC}" -echo - -# Créer le répertoire de sauvegarde -mkdir -p "$BACKUP_DIR" - -echo -e "${YELLOW}Creating backup: $BACKUP_NAME${NC}" - -# Fonction pour sauvegarder un volume Docker -backup_volume() { - local volume_name=$1 - local backup_path=$2 - local description=$3 - - echo -e "${BLUE}Backing up $description...${NC}" - - if docker volume inspect "$volume_name" >/dev/null 2>&1; then - docker run --rm \ - -e HOST_UID="$HOST_UID" -e HOST_GID="$HOST_GID" \ - -v "$volume_name":/source:ro \ - -v "$(pwd)/$BACKUP_DIR/$BACKUP_NAME":/backup \ - alpine:latest \ - sh -c "mkdir -p /backup$backup_path && cp -r /source/* /backup$backup_path/ 2>/dev/null || true && chmod -R 755 /backup$backup_path 2>/dev/null || true && chown -R \$HOST_UID:\$HOST_GID /backup$backup_path 2>/dev/null || true" - echo -e "${GREEN}✓ $description backed up${NC}" - else - echo -e "${YELLOW}⚠ Volume $volume_name not found${NC}" - fi -} - -# Créer le répertoire de sauvegarde -mkdir -p "$BACKUP_DIR/$BACKUP_NAME" - -# Sauvegarder les volumes critiques -backup_volume "4nk_node_bitcoin_data" "/bitcoin" "Bitcoin Signet Data" -backup_volume "4nk_node_blindbit_data" "/blindbit" "BlindBit Oracle Data" -backup_volume "4nk_node_sdk_data" "/sdk" "SDK Relay Data" -backup_volume "4nk_node_sdk_storage_data" "/sdk_storage" "SDK Storage Data" -backup_volume "4nk_node_grafana_data" "/grafana" "Grafana Data" -backup_volume "4nk_node_loki_data" "/loki" "Loki Data" - -# Créer une archive compressée -echo -e "${BLUE}Creating compressed archive...${NC}" -cd "$BACKUP_DIR" -tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME" --ignore-failed-read 2>/dev/null || true -rm -rf "$BACKUP_NAME" || sudo rm -rf "$BACKUP_NAME" || true -cd .. - -# Afficher les informations de sauvegarde -BACKUP_SIZE=$(du -h "$BACKUP_DIR/${BACKUP_NAME}.tar.gz" | cut -f1) -echo -echo -e "${GREEN}✅ Backup completed successfully!${NC}" -echo -e "${GREEN}Backup file: $BACKUP_DIR/${BACKUP_NAME}.tar.gz${NC}" -echo -e "${GREEN}Backup size: $BACKUP_SIZE${NC}" -echo -echo -e "${BLUE}To restore this backup:${NC}" -echo -e "${YELLOW} ./scripts/restore-data.sh $BACKUP_NAME${NC}" -echo diff --git a/scripts/build-project.sh b/scripts/build-project.sh deleted file mode 100755 index 9f389c1..0000000 --- a/scripts/build-project.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash - -# Script pour construire un projet spécifique avec synchronisation des configs -# Usage: ./scripts/build-project.sh [docker_tag] -# -# Projets supportés: -# - bitcoin: Bitcoin Signet -# - blindbit: BlindBit Oracle -# - sdk_relay: SDK Relay -# - sdk_storage: SDK Storage -# - lecoffre-front: LeCoffre Frontend -# - ihm_client: IHM Client - -set -euo pipefail - -# Couleurs pour les logs -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Fonction de logging -log() { - echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" -} - -log_success() { - echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1" -} - -log_warning() { - echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1" -} - -log_error() { - echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1" -} - -# Vérifier les arguments -if [[ $# -lt 1 ]]; then - log_error "Usage: $0 [docker_tag]" - echo "" - echo "Projets disponibles:" - echo " - ihm_client" - echo " - lecoffre-front" - echo " - sdk_relay" - echo " - sdk_storage" - echo "" - echo "Exemples:" - echo " $0 ihm_client" - echo " $0 ihm_client ext" - exit 1 -fi - -PROJECT_NAME="$1" -DOCKER_TAG="${2:-ext}" -PROJECT_ROOT="/home/debian/lecoffre_node" -PROJECT_PATH="/home/debian/$PROJECT_NAME" - -# Changer vers le répertoire du projet -cd "$PROJECT_ROOT" - -log "Construction du projet: $PROJECT_NAME (tag: $DOCKER_TAG)" - -# 1. Synchroniser les configurations pour ce projet -log "Synchronisation des configurations pour $PROJECT_NAME..." -if ./scripts/sync-configs.sh "$PROJECT_NAME"; then - log_success "Configurations synchronisées" -else - log_warning "Aucune configuration à synchroniser pour $PROJECT_NAME" -fi - -# 2. Changer vers le répertoire du projet -if [[ ! -d "$PROJECT_PATH" ]]; then - log_error "Projet non trouvé: $PROJECT_PATH" - exit 1 -fi - -cd "$PROJECT_PATH" - -# 3. Vérifier qu'un Dockerfile existe -if [[ ! -f "Dockerfile" ]]; then - log_error "Dockerfile non trouvé dans $PROJECT_PATH" - exit 1 -fi - -# 4. Construire l'image Docker -log "Construction de l'image Docker..." -IMAGE_NAME="git.4nkweb.com/4nk/$PROJECT_NAME:$DOCKER_TAG" - -if docker build -t "$IMAGE_NAME" .; then - log_success "Image construite: $IMAGE_NAME" -else - log_error "Échec de la construction de l'image" - exit 1 -fi - -# 5. Optionnel: pousser l'image -if [[ "${PUSH_IMAGE:-false}" == "true" ]]; then - log "Poussée de l'image vers le registry..." - if docker push "$IMAGE_NAME"; then - log_success "Image poussée: $IMAGE_NAME" - else - log_error "Échec de la poussée de l'image" - exit 1 - fi -fi - -log_success "Construction terminée pour $PROJECT_NAME" diff --git a/scripts/collect-logs.sh b/scripts/collect-logs.sh deleted file mode 100755 index 60ec145..0000000 --- a/scripts/collect-logs.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -# Script pour collecter les logs de tous les services -# Usage: ./scripts/collect-logs.sh [service_name] - -set -e - -LOG_DIR="logs" -TIMESTAMP=$(date +"%Y%m%d_%H%M%S") - -if [ $# -eq 1 ]; then - # Collecter les logs d'un service spécifique - SERVICE=$1 - if [ -d "$LOG_DIR/$SERVICE" ]; then - echo "📊 Collecte des logs pour $SERVICE..." - docker logs "$SERVICE" > "$LOG_DIR/$SERVICE/${SERVICE}_${TIMESTAMP}.log" 2>&1 - echo "✅ Logs collectés: $LOG_DIR/$SERVICE/${SERVICE}_${TIMESTAMP}.log" - else - echo "❌ Service $SERVICE non trouvé" - exit 1 - fi -else - # Collecter les logs de tous les services - echo "📊 Collecte des logs de tous les services..." - - # Liste des services à collecter - services=( - "tor-proxy:tor" - "bitcoin-signet:bitcoin" - "blindbit-oracle:blindbit" - "sdk_relay:sdk_relay" - "sdk_storage:sdk_storage" - "lecoffre-back:lecoffre-back" - "lecoffre-front:lecoffre-front" - "ihm_client:ihm_client" - "grafana:grafana" - "loki:loki" - "promtail:promtail" - "status-api:status-api" - "signet_miner:miner" - ) - - for service_entry in "${services[@]}"; do - service_name="${service_entry%%:*}" - log_dir="${service_entry##*:}" - - if docker ps --format "table {{.Names}}" | grep -q "^${service_name}$"; then - echo "📝 Collecte des logs pour $service_name..." - mkdir -p "$LOG_DIR/$log_dir" - docker logs "$service_name" > "$LOG_DIR/$log_dir/${service_name}_${TIMESTAMP}.log" 2>&1 - echo "✅ Logs collectés pour $service_name" - else - echo "⚠️ Service $service_name non en cours d'exécution" - fi - done -fi - -echo "🎉 Collecte terminée!" diff --git a/scripts/deploy-autonomous.sh b/scripts/deploy-autonomous.sh deleted file mode 100755 index f3698ed..0000000 --- a/scripts/deploy-autonomous.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -set -euo pipefail - -echo "🚀 DÉPLOIEMENT DE L'ARCHITECTURE AUTONOME COMPLÈTE" -echo "=================================================" - -# Fonction de logging -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" -} - -# Variables -MASTER_IMAGE_NAME="lecoffre-node-master" -MASTER_IMAGE_TAG="ext" -CONTAINER_NAME="lecoffre-node-master" -HOST_PORT=80 - -log "🔧 Préparation de l'environnement..." - -# Vérification des prérequis -if ! command -v docker &> /dev/null; then - log "❌ Docker non disponible" - exit 1 -fi - -if ! command -v docker-compose &> /dev/null; then - log "❌ Docker Compose non disponible" - exit 1 -fi - -log "✅ Prérequis validés" - -# Arrêt des services existants -log "🛑 Arrêt des services existants..." -cd /home/debian/4NK_env/lecoffre_node -docker compose down 2>/dev/null || true - -# Construction de l'image master -log "🏗️ Construction de l'image master..." -docker build -f Dockerfile.master -t ${MASTER_IMAGE_NAME}:${MASTER_IMAGE_TAG} . - -log "🧹 Nettoyage des conteneurs existants..." -docker stop ${CONTAINER_NAME} 2>/dev/null || true -docker rm ${CONTAINER_NAME} 2>/dev/null || true - -# Création des répertoires de données -log "📁 Création des répertoires de données..." -mkdir -p /home/debian/4NK_env/lecoffre_node/{data,logs,backup} - -log "🚀 Démarrage du conteneur master autonome..." -log "ℹ️ Le conteneur utilise son propre Nginx (ports 80, 443, 3000) - indépendant du host" -log "ℹ️ Port 3000 pour redirections externes IdNot (dev3.4nkweb.com)" -docker run -d \ - --name ${CONTAINER_NAME} \ - --privileged \ - --restart unless-stopped \ - -p 80:80 \ - -p 443:443 \ - -p 3000:3000 \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /home/debian/4NK_env/lecoffre_node/data:/app/data \ - -v /home/debian/4NK_env/lecoffre_node/logs:/app/logs \ - -v /home/debian/4NK_env/lecoffre_node/conf:/app/conf \ - -v /home/debian/4NK_env/lecoffre_node/backup:/app/backup \ - -v /home/debian/4NK_env/lecoffre_node/.env.master:/app/.env \ - ${MASTER_IMAGE_NAME}:${MASTER_IMAGE_TAG} - -log "⏳ Attente du démarrage du conteneur master..." -sleep 30 - -log "🔍 Vérification du statut du conteneur..." -docker ps | grep ${CONTAINER_NAME} - -log "🧪 Test de connectivité des services..." -sleep 20 - -# Tests de connectivité -services=( - "http://localhost:${HOST_PORT}/status/|Status Page" - "http://localhost:${HOST_PORT}/grafana/|Grafana" - "http://localhost:${HOST_PORT}/lecoffre/|LeCoffre Front" - "http://localhost:${HOST_PORT}/|IHM Client" - "http://localhost:${HOST_PORT}/api/v1/health|API Backend" -) - -for service in "${services[@]}"; do - IFS='|' read -r url name <<< "$service" - if curl -f -s "$url" > /dev/null 2>&1; then - log "✅ $name: Accessible" - else - log "⚠️ $name: Inaccessible (peut être normal pendant le démarrage)" - fi -done - -log "📊 Logs du conteneur master:" -docker logs ${CONTAINER_NAME} --tail 10 - -log "🎉 Architecture autonome déployée!" -log "📋 Services disponibles:" -log " - Status Page: http://localhost:${HOST_PORT}/status/" -log " - Grafana: http://localhost:${HOST_PORT}/grafana/" -log " - LeCoffre Front: http://localhost:${HOST_PORT}/lecoffre/" -log " - IHM Client: http://localhost:${HOST_PORT}/" -log " - API Backend: http://localhost:${HOST_PORT}/api/" -log "" -log "🔧 Architecture autonome:" -log " - Nginx intégré dans le conteneur (port 80)" -log " - Indépendant du Nginx du host" -log " - Toutes les configurations dans lecoffre_node/" -log "" -log "🔧 Commandes utiles:" -log " - Logs: docker logs ${CONTAINER_NAME}" -log " - Shell: docker exec -it ${CONTAINER_NAME} bash" -log " - Redémarrage: docker restart ${CONTAINER_NAME}" -log " - Arrêt: docker stop ${CONTAINER_NAME}" diff --git a/scripts/deploy-grafana.sh b/scripts/deploy-grafana.sh deleted file mode 100755 index a03a9ac..0000000 --- a/scripts/deploy-grafana.sh +++ /dev/null @@ -1,265 +0,0 @@ -#!/bin/bash - -# Script de déploiement centralisé pour Grafana et la stack de monitoring -# Usage: ./scripts/deploy-grafana.sh [start|stop|restart|status|logs] - -set -e - -COMPOSE_FILE="docker-compose.yml" -GRAFANA_ADMIN_PASSWORD="${GRAFANA_ADMIN_PASSWORD:-admin123}" -GRAFANA_PORT="${GRAFANA_PORT:-3005}" -LOKI_PORT="${LOKI_PORT:-3100}" - -# Couleurs pour les messages -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -log_info() { - echo -e "${BLUE}ℹ️ $1${NC}" -} - -log_success() { - echo -e "${GREEN}✅ $1${NC}" -} - -log_warning() { - echo -e "${YELLOW}⚠️ $1${NC}" -} - -log_error() { - echo -e "${RED}❌ $1${NC}" -} - -# Fonction pour vérifier si Docker est en cours d'exécution -check_docker() { - if ! docker info >/dev/null 2>&1; then - log_error "Docker n'est pas en cours d'exécution" - exit 1 - fi -} - -# Fonction pour vérifier la configuration -check_config() { - log_info "Vérification de la configuration..." - - # Vérifier que les fichiers de configuration existent - required_files=( - "conf/grafana/provisioning/datasources/loki.yml" - "conf/grafana/provisioning/dashboards/dashboards.yml" - "conf/grafana/dashboards/lecoffre-overview.json" - "conf/grafana/dashboards/bitcoin-miner.json" - "conf/grafana/dashboards/services-overview.json" - "conf/promtail/promtail.yml" - "conf/nginx/grafana.conf" - ) - - for file in "${required_files[@]}"; do - if [ ! -f "$file" ]; then - log_error "Fichier de configuration manquant: $file" - exit 1 - fi - done - - log_success "Configuration vérifiée" -} - -# Fonction pour démarrer la stack de monitoring -start_monitoring() { - log_info "Démarrage de la stack de monitoring..." - - check_docker - check_config - - # Créer les dossiers nécessaires - mkdir -p logs/{bitcoin,blindbit,sdk_relaysdk_storagelecoffre-front,ihm_client,tor,miner,nginx} - - # Démarrer les services de monitoring - log_info "Démarrage de Loki..." - docker compose up -d loki - - log_info "Attente que Loki soit prêt..." - sleep 10 - - log_info "Démarrage de Promtail..." - docker compose up -d promtail - - log_info "Démarrage de Grafana..." - docker compose up -d grafana - - log_info "Attente que Grafana soit prêt..." - sleep 15 - - # Vérifier le statut des services - check_monitoring_status - - log_success "Stack de monitoring démarrée avec succès!" - echo "" - echo "🔗 URLs d'accès:" - echo " - Grafana: https://dev4.4nkweb.com/grafana/" - echo " - Loki API: https://dev4.4nkweb.com/loki/" - echo " - Grafana Local: http://localhost:${GRAFANA_PORT}" - echo "" - echo "🔐 Identifiants Grafana:" - echo " - Utilisateur: admin" - echo " - Mot de passe: ${GRAFANA_ADMIN_PASSWORD}" -} - -# Fonction pour arrêter la stack de monitoring -stop_monitoring() { - log_info "Arrêt de la stack de monitoring..." - - docker compose stop grafana promtail loki - - log_success "Stack de monitoring arrêtée" -} - -# Fonction pour redémarrer la stack de monitoring -restart_monitoring() { - log_info "Redémarrage de la stack de monitoring..." - stop_monitoring - sleep 5 - start_monitoring -} - -# Fonction pour vérifier le statut -check_monitoring_status() { - log_info "Vérification du statut des services..." - - services=("loki" "promtail" "grafana") - - for service in "${services[@]}"; do - if docker compose ps "$service" | grep -q "Up"; then - log_success "$service: En cours d'exécution" - else - log_warning "$service: Arrêté ou en erreur" - fi - done - - # Vérifier les ports - if netstat -tuln 2>/dev/null | grep -q ":${GRAFANA_PORT} "; then - log_success "Grafana accessible sur le port ${GRAFANA_PORT}" - else - log_warning "Grafana non accessible sur le port ${GRAFANA_PORT}" - fi - - if netstat -tuln 2>/dev/null | grep -q ":${LOKI_PORT} "; then - log_success "Loki accessible sur le port ${LOKI_PORT}" - else - log_warning "Loki non accessible sur le port ${LOKI_PORT}" - fi -} - -# Fonction pour afficher les logs -show_logs() { - local service=${1:-"grafana"} - - log_info "Affichage des logs pour $service..." - docker compose logs -f "$service" -} - -# Fonction pour initialiser Grafana -init_grafana() { - log_info "Initialisation de Grafana..." - - # Attendre que Grafana soit prêt - log_info "Attente que Grafana soit prêt..." - timeout=60 - while [ $timeout -gt 0 ]; do - if curl -s http://localhost:${GRAFANA_PORT}/api/health >/dev/null 2>&1; then - log_success "Grafana est prêt!" - break - fi - sleep 2 - timeout=$((timeout - 2)) - done - - if [ $timeout -le 0 ]; then - log_error "Timeout: Grafana n'est pas prêt après 60 secondes" - return 1 - fi - - # Créer un utilisateur admin si nécessaire - log_info "Configuration de l'utilisateur admin..." - curl -X POST \ - -H "Content-Type: application/json" \ - -d "{\"user\":\"admin\",\"password\":\"${GRAFANA_ADMIN_PASSWORD}\"}" \ - http://admin:admin@localhost:${GRAFANA_PORT}/api/admin/users \ - 2>/dev/null || true - - log_success "Grafana initialisé" -} - -# Fonction pour collecter les logs de tous les services -collect_all_logs() { - log_info "Collecte des logs de tous les services..." - - ./scripts/collect-logs.sh - - log_success "Logs collectés dans le dossier logs/" -} - -# Fonction d'aide -show_help() { - echo "Usage: $0 [COMMAND]" - echo "" - echo "Commandes disponibles:" - echo " start Démarrer la stack de monitoring (Grafana + Loki + Promtail)" - echo " stop Arrêter la stack de monitoring" - echo " restart Redémarrer la stack de monitoring" - echo " status Vérifier le statut des services" - echo " logs Afficher les logs (par défaut: grafana)" - echo " init Initialiser Grafana" - echo " collect Collecter les logs de tous les services" - echo " help Afficher cette aide" - echo "" - echo "Variables d'environnement:" - echo " GRAFANA_ADMIN_PASSWORD Mot de passe admin Grafana (défaut: admin123)" - echo " GRAFANA_PORT Port Grafana (défaut: 3000)" - echo " LOKI_PORT Port Loki (défaut: 3100)" - echo "" - echo "Exemples:" - echo " $0 start" - echo " $0 logs promtail" - echo " GRAFANA_ADMIN_PASSWORD=mypass $0 start" -} - -# Fonction principale -main() { - case "${1:-help}" in - start) - start_monitoring - ;; - stop) - stop_monitoring - ;; - restart) - restart_monitoring - ;; - status) - check_monitoring_status - ;; - logs) - show_logs "$2" - ;; - init) - init_grafana - ;; - collect) - collect_all_logs - ;; - help|--help|-h) - show_help - ;; - *) - log_error "Commande inconnue: $1" - show_help - exit 1 - ;; - esac -} - -# Exécution du script -main "$@" diff --git a/scripts/deploy-master.sh b/scripts/deploy-master.sh deleted file mode 100755 index 2a6b100..0000000 --- a/scripts/deploy-master.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash -set -euo pipefail - -echo "🚀 DÉPLOIEMENT DE L'ARCHITECTURE AUTONOME LECOFFRE NODE" -echo "======================================================" - -# Fonction de logging -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" -} - -# Variables -MASTER_IMAGE_NAME="lecoffre-node-master" -MASTER_IMAGE_TAG="ext" -CONTAINER_NAME="lecoffre-node-master" -HOST_PORT=8081 - -log "Construction de l'image master..." -cd /home/debian/4NK_env/lecoffre_node - -# Construction de l'image master -docker build -f Dockerfile.master -t ${MASTER_IMAGE_NAME}:${MASTER_IMAGE_TAG} . - -log "Arrêt du conteneur existant (si présent)..." -docker stop ${CONTAINER_NAME} 2>/dev/null || true -docker rm ${CONTAINER_NAME} 2>/dev/null || true - -log "Démarrage du conteneur master..." -docker run -d \ - --name ${CONTAINER_NAME} \ - --privileged \ - -p ${HOST_PORT}:80 \ - -p 3005:3005 \ - -p 3006:3006 \ - -p 8080:8080 \ - -p 3003:3003 \ - -p 3004:3004 \ - -p 8090:8090 \ - -p 8091:8091 \ - -p 8000:8000 \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v /home/debian/4NK_env/lecoffre_node/data:/app/data \ - -v /home/debian/4NK_env/lecoffre_node/logs:/app/logs \ - -v /home/debian/4NK_env/lecoffre_node/conf:/app/conf \ - -v /home/debian/4NK_env/lecoffre_node/backups:/app/backups \ - ${MASTER_IMAGE_NAME}:${MASTER_IMAGE_TAG} - -log "Attente du démarrage du conteneur master..." -sleep 30 - -log "Lancement des services LeCoffre Node..." -docker exec ${CONTAINER_NAME} /app/scripts/start.sh - -log "Vérification du statut du conteneur..." -docker ps | grep ${CONTAINER_NAME} - -log "Test de connectivité..." -sleep 10 -if curl -f -s http://localhost:${HOST_PORT}/status/ > /dev/null; then - log "✅ Architecture autonome déployée avec succès!" - log "📊 Services disponibles:" - log " - Status Page: http://localhost:${HOST_PORT}/status/" - log " - Grafana: http://localhost:${HOST_PORT}/grafana/" - log " - LeCoffre Front: http://localhost:${HOST_PORT}/lecoffre/" - log " - IHM Client: http://localhost:${HOST_PORT}/" - log " - API Backend: http://localhost:${HOST_PORT}/api/" -else - log "❌ Problème de déploiement détecté" - log "Logs du conteneur:" - docker logs ${CONTAINER_NAME} --tail 20 - exit 1 -fi - -log "🎉 Déploiement terminé avec succès!" diff --git a/scripts/deploy-status-page.sh b/scripts/deploy-status-page.sh deleted file mode 100755 index 83b913a..0000000 --- a/scripts/deploy-status-page.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -# Script pour déployer la page de statut - -set -e - -WEB_ROOT="/var/www/lecoffre" -STATUS_DIR="$WEB_ROOT/status" -SOURCE_DIR="./web/status" - -echo "🚀 Déploiement de la page de statut..." - -# Création du répertoire web si nécessaire -sudo mkdir -p "$WEB_ROOT" - -# Création du répertoire de statut -sudo mkdir -p "$STATUS_DIR" - -# Copie des fichiers statiques -echo "📁 Copie des fichiers statiques..." -sudo cp -r "$SOURCE_DIR"/* "$STATUS_DIR/" - -# Suppression des fichiers non nécessaires sur le serveur -sudo rm -f "$STATUS_DIR/api.js" -sudo rm -f "$STATUS_DIR/package.json" -sudo rm -f "$STATUS_DIR/Dockerfile" - -# Permissions -echo "🔐 Configuration des permissions..." -sudo chown -R www-data:www-data "$STATUS_DIR" -sudo chmod -R 755 "$STATUS_DIR" - -# Test de la configuration Nginx -echo "🔍 Test de la configuration Nginx..." -if sudo nginx -t; then - echo "✅ Configuration Nginx valide" -else - echo "❌ Erreur dans la configuration Nginx" - exit 1 -fi - -# Rechargement de Nginx -echo "🔄 Rechargement de Nginx..." -sudo systemctl reload nginx - -echo "✅ Page de statut déployée avec succès!" -echo "" -echo "🔗 URLs d'accès:" -echo " - Page de statut: https://dev4.4nkweb.com/status/" -echo " - API de statut: https://dev4.4nkweb.com/status/api" -echo "" -echo "📋 Prochaines étapes:" -echo "1. Construire et démarrer le service status-api: docker compose up -d status-api" -echo "2. Vérifier l'accès: curl https://dev4.4nkweb.com/status/" -echo "3. Tester l'API: curl https://dev4.4nkweb.com/status/api" diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh deleted file mode 100755 index c2fdc00..0000000 --- a/scripts/entrypoint.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -set -euo pipefail - -echo "🚀 DÉMARRAGE DU CONTAINER MASTER LECOFFRE_NODE" -echo "==============================================" - -# Fonction de logging -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" -} - -# Vérification des prérequis -log "Vérification des prérequis..." - -# Vérifier que Docker est disponible -if ! command -v docker &> /dev/null; then - log "❌ Docker non disponible" - exit 1 -fi - -# Vérifier que docker-compose est disponible -if ! command -v docker-compose &> /dev/null; then - log "❌ Docker Compose non disponible" - exit 1 -fi - -# Vérifier que Nginx est configuré -if [ ! -f /etc/nginx/nginx.conf ]; then - log "❌ Configuration Nginx manquante" - exit 1 -fi - -log "✅ Prérequis validés" - -# Initialisation des répertoires -log "Initialisation des répertoires..." -mkdir -p /app/data /app/logs /app/logs/nginx /var/log/supervisor -chown -R appuser:appuser /app/logs /var/log/supervisor || true - -# Configuration des permissions Docker -if [ -S /var/run/docker.sock ]; then - chown appuser:appuser /var/run/docker.sock || true -fi - -# Test de la configuration Nginx -log "Test de la configuration Nginx..." -if ! nginx -t; then - log "❌ Configuration Nginx invalide" - exit 1 -fi - -log "✅ Configuration Nginx valide" - -# Initialisation de la base de données Docker Compose -log "Initialisation Docker Compose..." -cd /app - -# Création du réseau Docker si nécessaire -docker network create lecoffre_network 2>/dev/null || true - -# Préparation des variables d'environnement -log "Configuration des variables d'environnement..." -export COMPOSE_PROJECT_NAME=lecoffre -export COMPOSE_FILE=/app/docker-compose.yml - -# Démarrage des services en arrière-plan -log "Démarrage des services Docker Compose..." -nohup docker-compose up -d > /app/logs/docker-compose.log 2>&1 & -DOCKER_COMPOSE_PID=$! - -# Attente du démarrage des services -log "Attente du démarrage des services..." -sleep 30 - -# Vérification de l'état des services -log "Vérification de l'état des services..." -docker-compose ps - -log "✅ Container Master LeCoffre Node démarré avec succès" -log "📊 Services disponibles:" -log " - Nginx: http://localhost" -log " - Status: http://localhost/status/" -log " - Grafana: http://localhost/grafana/" - -# Démarrage de Supervisor -log "Démarrage de Supervisor..." -exec "$@" diff --git a/scripts/fix_relay_funds.sh b/scripts/fix_relay_funds.sh deleted file mode 100755 index 46f4e54..0000000 --- a/scripts/fix_relay_funds.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/bash - -echo "=== CORRECTION DES FONDS DU RELAY ===" -echo "" - -# Vérification des fonds dans Bitcoin Core -echo "1. Vérification des fonds dans Bitcoin Core..." -BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" -rpcwallet="default" getbalance) -echo " Solde du wallet default: $BALANCE BTC" - -# Vérification des outputs du relay -echo "2. Vérification des outputs du relay..." -OUTPUTS=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0") -echo " Nombre d'outputs détectés par le relay: $OUTPUTS" - -# Vérification de l'adresse SP -echo "3. Vérification de l'adresse SP..." -SP_ADDRESS=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.sp_address // "null"' 2>/dev/null || echo "null") -echo " Adresse SP du relay: $SP_ADDRESS" - -# Vérification de la configuration -echo "4. Vérification de la configuration..." -CONFIG_SP=$(docker exec sdk_relay cat /home/bitcoin/.conf 2>/dev/null | grep "sp_address=" | cut -d'"' -f2) -echo " Adresse SP dans la config: $CONFIG_SP" - -if [ "$OUTPUTS" = "0" ] && [ "$BALANCE" != "0.00000000" ]; then - echo "" - echo "🎯 PROBLÈME IDENTIFIÉ : Le relay a des fonds dans Bitcoin Core mais ne les détecte pas !" - echo "" - echo "5. Solution : Forcer le scan des outputs..." - - # Mise à jour manuelle de la configuration du relay - echo "6. Mise à jour manuelle de la configuration du relay..." - docker exec sdk_relay sh -c 'echo "{\"sp_address\":\"'$CONFIG_SP'\",\"outputs\":[],\"last_scan\":0,\"birthday\":0}" > /home/bitcoin/.4nk/default' - - # Redémarrage du relay - echo "7. Redémarrage du relay..." - docker compose -f /home/debian/lecoffre_node/docker-compose.yml restart sdk_relay - - # Attente - echo "8. Attente du redémarrage..." - sleep 15 - - # Vérification - echo "9. Vérification après correction..." - NEW_OUTPUTS=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0") - echo " Nouveau nombre d'outputs: $NEW_OUTPUTS" - - if [ "$NEW_OUTPUTS" != "0" ]; then - echo "✅ SUCCÈS : Le relay détecte maintenant ses outputs !" - else - echo "❌ ÉCHEC : Le relay ne détecte toujours pas ses outputs" - echo " Solution alternative : Vérifier les logs du relay" - docker logs sdk_relay --tail 10 - fi -else - echo "" - echo "✅ Le relay fonctionne correctement" - echo " - Solde Bitcoin Core: $BALANCE BTC" - echo " - Outputs détectés: $OUTPUTS" -fi - -echo "" -echo "=== FIN DU DIAGNOSTIC ===" diff --git a/scripts/funds/auto_transfer_funds.sh b/scripts/funds/auto_transfer_funds.sh deleted file mode 100755 index 7da4916..0000000 --- a/scripts/funds/auto_transfer_funds.sh +++ /dev/null @@ -1,229 +0,0 @@ -#!/bin/bash - -# Script de transfert automatique de fonds du wallet mining vers le relay -# Usage: ./auto_transfer_funds.sh [amount] [relay_address] - -set -e - -# Configuration -MINING_WALLET="mining_mnemonic" -RELAY_WALLET="default" -BITCOIN_RPC_URL="bitcoin:38332" -COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie" -MIN_AMOUNT=0.001 # Montant minimum à transférer (0.001 BTC = 100,000 sats) -DEFAULT_AMOUNT=0.01 # Montant par défaut (0.01 BTC = 1,000,000 sats) - -# Couleurs pour les logs -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Fonctions de logging -log_info() { - echo -e "${BLUE}[INFO]${NC} $1" -} - -log_success() { - echo -e "${GREEN}[SUCCESS]${NC} $1" -} - -log_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" -} - -log_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -# Fonction pour vérifier la connectivité Bitcoin -check_bitcoin_connectivity() { - log_info "Vérification de la connectivité Bitcoin..." - - if ! docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" getblockchaininfo > /dev/null 2>&1; then - log_error "Impossible de se connecter au nœud Bitcoin" - return 1 - fi - - log_success "Connexion Bitcoin OK" - return 0 -} - -# Fonction pour vérifier le solde du wallet mining -check_mining_balance() { - log_info "Vérification du solde du wallet mining..." - - local balance=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" getbalance 2>/dev/null || echo "0") - - if [ "$balance" = "0" ]; then - log_error "Wallet mining vide ou inaccessible" - return 1 - fi - - log_success "Solde wallet mining: $balance BTC" - echo "$balance" - return 0 -} - -# Fonction pour vérifier le solde du wallet relay -check_relay_balance() { - log_info "Vérification du solde du wallet relay..." - - # Charger le wallet relay s'il n'est pas déjà chargé - docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true - - local balance=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0") - - log_info "Solde wallet relay: $balance BTC" - echo "$balance" - return 0 -} - -# Fonction pour générer une adresse pour le relay -generate_relay_address() { - log_info "Génération d'une adresse pour le relay..." - - # Charger le wallet relay - docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true - - local address=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getnewaddress "relay_funding" 2>/dev/null) - - if [ -z "$address" ]; then - log_error "Impossible de générer une adresse pour le relay" - return 1 - fi - - log_success "Adresse générée: $address" - echo "$address" - return 0 -} - -# Fonction pour transférer des fonds -transfer_funds() { - local amount=$1 - local address=$2 - - log_info "Transfert de $amount BTC vers $address..." - - local txid=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" sendtoaddress "$address" "$amount" 2>/dev/null) - - if [ -z "$txid" ]; then - log_error "Échec du transfert de fonds" - return 1 - fi - - log_success "Transfert effectué. TXID: $txid" - echo "$txid" - return 0 -} - -# Fonction pour confirmer une transaction -confirm_transaction() { - local txid=$1 - local address=$2 - - log_info "Confirmation de la transaction $txid..." - - # Générer des blocs pour confirmer la transaction - docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" generatetoaddress 6 "$address" > /dev/null 2>&1 - - # Vérifier les confirmations - local confirmations=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" gettransaction "$txid" 2>/dev/null | jq -r '.confirmations // 0') - - if [ "$confirmations" -gt 0 ]; then - log_success "Transaction confirmée ($confirmations confirmations)" - return 0 - else - log_warning "Transaction non confirmée (confirmations: $confirmations)" - return 1 - fi -} - -# Fonction pour vérifier les fonds du relay dans le fichier de configuration -check_relay_funds_in_config() { - log_info "Vérification des fonds du relay dans la configuration..." - - local outputs_count=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0") - - log_info "Nombre d'outputs du relay: $outputs_count" - echo "$outputs_count" - return 0 -} - -# Fonction principale -main() { - local amount=${1:-$DEFAULT_AMOUNT} - local relay_address=${2:-""} - - log_info "=== TRANSFERT AUTOMATIQUE DE FONDS ===" - log_info "Montant: $amount BTC" - - # Vérifications préliminaires - if ! check_bitcoin_connectivity; then - exit 1 - fi - - # Vérifier le solde du wallet mining - local mining_balance=$(check_mining_balance) - if [ $? -ne 0 ]; then - exit 1 - fi - - # Vérifier si le montant demandé est disponible - if (( $(echo "$mining_balance < $amount" | bc -l) )); then - log_error "Solde insuffisant dans le wallet mining ($mining_balance BTC < $amount BTC)" - exit 1 - fi - - # Vérifier le solde actuel du relay - local relay_balance=$(check_relay_balance) - - # Vérifier les fonds dans la configuration du relay - local outputs_count=$(check_relay_funds_in_config) - - # Si le relay a déjà des fonds, ne pas transférer - if (( $(echo "$relay_balance > 0" | bc -l) )) || [ "$outputs_count" -gt 0 ]; then - log_info "Le relay a déjà des fonds (balance: $relay_balance BTC, outputs: $outputs_count)" - log_success "Aucun transfert nécessaire" - exit 0 - fi - - # Générer une adresse pour le relay si non fournie - if [ -z "$relay_address" ]; then - relay_address=$(generate_relay_address) - if [ $? -ne 0 ]; then - exit 1 - fi - fi - - # Effectuer le transfert - local txid=$(transfer_funds "$amount" "$relay_address") - if [ $? -ne 0 ]; then - exit 1 - fi - - # Confirmer la transaction - if confirm_transaction "$txid" "$relay_address"; then - log_success "Transfert de fonds réussi et confirmé" - - # Redémarrer le relay pour qu'il détecte les nouveaux fonds - log_info "Redémarrage du relay pour détecter les nouveaux fonds..." - docker compose restart sdk_relay - - log_success "Relay redémarré. Les fonds devraient être détectés dans quelques secondes." - else - log_warning "Transfert effectué mais non confirmé. Le relay pourrait ne pas détecter les fonds immédiatement." - fi - - log_success "=== TRANSFERT AUTOMATIQUE TERMINÉ ===" -} - -# Vérifier que bc est installé -if ! command -v bc &> /dev/null; then - log_error "bc n'est pas installé. Installation..." - sudo apt-get update && sudo apt-get install -y bc -fi - -# Exécuter la fonction principale -main "$@" diff --git a/scripts/funds/check_and_transfer_funds.sh b/scripts/funds/check_and_transfer_funds.sh deleted file mode 100755 index fd5cda6..0000000 --- a/scripts/funds/check_and_transfer_funds.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -# Script d'intégration pour vérifier et transférer des fonds automatiquement -# Usage: ./check_and_transfer_funds.sh [min_amount] - -set -e - -MIN_AMOUNT=${1:-0.001} # Montant minimum en BTC (par défaut 0.001 BTC = 100,000 sats) -COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie" -RELAY_WALLET="default" - -echo "=== VÉRIFICATION ET TRANSFERT AUTOMATIQUE DE FONDS ===" - -# Vérifier les fonds du relay dans la configuration -echo "Vérification des fonds du relay..." -OUTPUTS_COUNT=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0") - -if [ "$OUTPUTS_COUNT" -gt 0 ]; then - echo "Le relay a déjà des fonds ($OUTPUTS_COUNT outputs). Aucun transfert nécessaire." - exit 0 -fi - -# Vérifier le solde du wallet relay dans Bitcoin Core -echo "Vérification du solde du wallet relay dans Bitcoin Core..." -docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true -RELAY_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0") - -if [ "$(echo "$RELAY_BALANCE >= $MIN_AMOUNT" | bc -l)" = "1" ]; then - echo "Le relay a suffisamment de fonds ($RELAY_BALANCE BTC >= $MIN_AMOUNT BTC). Aucun transfert nécessaire." - exit 0 -fi - -echo "Fonds insuffisants détectés. Lancement du transfert automatique..." -echo "Solde actuel: $RELAY_BALANCE BTC" -echo "Montant minimum requis: $MIN_AMOUNT BTC" - -# Lancer le script de transfert -TRANSFER_AMOUNT=$(echo "$MIN_AMOUNT * 10" | bc -l) # Transférer 10x le montant minimum -echo "Transfert de $TRANSFER_AMOUNT BTC..." - -# Exécuter le script de transfert -./scripts/funds/simple_transfer.sh "$TRANSFER_AMOUNT" - -echo "=== VÉRIFICATION ET TRANSFERT TERMINÉ ===" diff --git a/scripts/funds/funds_detector_service.js b/scripts/funds/funds_detector_service.js deleted file mode 100755 index b32db7c..0000000 --- a/scripts/funds/funds_detector_service.js +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env node - -/** - * Service de détection et transfert automatique de fonds - * Ce service surveille les applications et transfère automatiquement des fonds - * quand un manque de fonds est détecté - */ - -const { spawn, exec } = require('child_process'); -const fs = require('fs'); -const path = require('path'); - -class FundsDetectorService { - constructor() { - this.isRunning = false; - this.checkInterval = 30000; // 30 secondes - this.minFundsThreshold = 0.001; // 0.001 BTC = 100,000 sats - this.transferAmount = 0.01; // 0.01 BTC = 1,000,000 sats - this.logFile = '/tmp/funds_detector.log'; - } - - log(message) { - const timestamp = new Date().toISOString(); - const logMessage = `[${timestamp}] ${message}\n`; - console.log(logMessage.trim()); - fs.appendFileSync(this.logFile, logMessage); - } - - async checkRelayFunds() { - try { - // Vérifier les fonds du relay dans la configuration - const outputsCount = await this.getRelayOutputsCount(); - this.log(`Relay outputs count: ${outputsCount}`); - - // Vérifier le solde du wallet relay dans Bitcoin Core - const relayBalance = await this.getRelayBalance(); - this.log(`Relay balance: ${relayBalance} BTC`); - - // Si le relay n'a pas de fonds, déclencher le transfert - if (outputsCount === 0 && parseFloat(relayBalance) < this.minFundsThreshold) { - this.log(`⚠️ Fonds insuffisants détectés. Lancement du transfert automatique...`); - await this.transferFunds(); - return true; - } - - this.log(`✅ Fonds suffisants (outputs: ${outputsCount}, balance: ${relayBalance} BTC)`); - return false; - } catch (error) { - this.log(`❌ Erreur lors de la vérification des fonds: ${error.message}`); - return false; - } - } - - async getRelayOutputsCount() { - return new Promise((resolve, reject) => { - exec('docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r \'.outputs | length // 0\' 2>/dev/null || echo "0"', (error, stdout, stderr) => { - if (error) { - reject(error); - } else { - resolve(parseInt(stdout.trim()) || 0); - } - }); - }); - } - - async getRelayBalance() { - return new Promise((resolve, reject) => { - exec('docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" -rpcwallet="default" getbalance 2>/dev/null || echo "0"', (error, stdout, stderr) => { - if (error) { - reject(error); - } else { - resolve(parseFloat(stdout.trim()) || 0); - } - }); - }); - } - - async transferFunds() { - try { - this.log(`🔄 Transfert de ${this.transferAmount} BTC...`); - - // Charger le wallet relay - await this.execCommand('docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" loadwallet "default" > /dev/null 2>&1 || true'); - - // Générer une adresse pour le relay - const relayAddress = await this.execCommand('docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" -rpcwallet="default" getnewaddress "relay_funding" 2>/dev/null'); - this.log(`Adresse générée: ${relayAddress}`); - - // Effectuer le transfert - const txid = await this.execCommand(`docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" -rpcwallet="mining_mnemonic" sendtoaddress "${relayAddress}" "${this.transferAmount}" 2>/dev/null`); - this.log(`Transaction ID: ${txid}`); - - // Générer des blocs pour confirmer - await this.execCommand(`docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" -rpcwallet="mining_mnemonic" generatetoaddress 6 "${relayAddress}" > /dev/null 2>&1`); - - // Redémarrer le relay - this.log(`🔄 Redémarrage du relay...`); - await this.execCommand('docker compose restart sdk_relay'); - - this.log(`✅ Transfert de fonds réussi et relay redémarré`); - return true; - } catch (error) { - this.log(`❌ Erreur lors du transfert: ${error.message}`); - return false; - } - } - - async execCommand(command) { - return new Promise((resolve, reject) => { - exec(command, (error, stdout, stderr) => { - if (error) { - reject(error); - } else { - resolve(stdout.trim()); - } - }); - }); - } - - async start() { - if (this.isRunning) { - this.log('Service déjà en cours d\'exécution'); - return; - } - - this.isRunning = true; - this.log('🚀 Démarrage du service de détection des fonds'); - this.log(`Seuil minimum: ${this.minFundsThreshold} BTC`); - this.log(`Montant de transfert: ${this.transferAmount} BTC`); - this.log(`Intervalle de vérification: ${this.checkInterval / 1000} secondes`); - - const checkLoop = async () => { - if (!this.isRunning) return; - - try { - await this.checkRelayFunds(); - } catch (error) { - this.log(`❌ Erreur dans la boucle de vérification: ${error.message}`); - } - - setTimeout(checkLoop, this.checkInterval); - }; - - // Démarrer la boucle de vérification - checkLoop(); - } - - stop() { - this.isRunning = false; - this.log('🛑 Arrêt du service de détection des fonds'); - } -} - -// Gestion des signaux pour un arrêt propre -process.on('SIGINT', () => { - console.log('\n🛑 Arrêt du service...'); - process.exit(0); -}); - -process.on('SIGTERM', () => { - console.log('\n🛑 Arrêt du service...'); - process.exit(0); -}); - -// Démarrer le service si ce script est exécuté directement -if (require.main === module) { - const service = new FundsDetectorService(); - service.start(); -} - -module.exports = FundsDetectorService; diff --git a/scripts/funds/monitor_funds.sh b/scripts/funds/monitor_funds.sh deleted file mode 100755 index 837d346..0000000 --- a/scripts/funds/monitor_funds.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -# Script de monitoring des fonds du relay -# Usage: ./monitor_funds.sh [interval_seconds] - -set -e - -INTERVAL=${1:-30} # Intervalle de vérification en secondes (par défaut 30s) -COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie" -RELAY_WALLET="default" - -echo "=== MONITORING DES FONDS DU RELAY ===" -echo "Intervalle de vérification: $INTERVAL secondes" -echo "Appuyez sur Ctrl+C pour arrêter" - -while true; do - echo "" - echo "--- $(date) ---" - - # Vérifier les fonds du relay dans la configuration - OUTPUTS_COUNT=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.outputs | length // 0' 2>/dev/null || echo "0") - echo "Outputs du relay: $OUTPUTS_COUNT" - - # Vérifier le solde du wallet relay dans Bitcoin Core - docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true - RELAY_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0") - echo "Solde wallet relay: $RELAY_BALANCE BTC" - - # Vérifier le solde du wallet mining - MINING_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="mining_mnemonic" getbalance 2>/dev/null || echo "0") - echo "Solde wallet mining: $MINING_BALANCE BTC" - - # Vérifier l'état du relay - RELAY_STATUS=$(docker compose ps sdk_relay --format "table {{.Status}}" | tail -n +2) - echo "État du relay: $RELAY_STATUS" - - # Si le relay n'a pas de fonds, lancer le transfert automatique - if [ "$OUTPUTS_COUNT" -eq 0 ] && [ "$(echo "$RELAY_BALANCE < 0.001" | bc -l)" = "1" ]; then - echo "⚠️ Fonds insuffisants détectés. Lancement du transfert automatique..." - ./scripts/funds/simple_transfer.sh 0.01 - else - echo "✅ Fonds suffisants" - fi - - sleep "$INTERVAL" -done diff --git a/scripts/funds/simple_transfer.sh b/scripts/funds/simple_transfer.sh deleted file mode 100755 index 21c6d04..0000000 --- a/scripts/funds/simple_transfer.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash - -# Script simplifié de transfert de fonds -set -e - -MINING_WALLET="mining_mnemonic" -RELAY_WALLET="default" -COOKIE_FILE="/home/bitcoin/.bitcoin/signet/.cookie" -AMOUNT=${1:-0.01} - -echo "=== TRANSFERT SIMPLE DE FONDS ===" -echo "Montant: $AMOUNT BTC" - -# Vérifier la connectivité -echo "Vérification de la connectivité Bitcoin..." -if ! docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" getblockchaininfo > /dev/null 2>&1; then - echo "ERREUR: Impossible de se connecter au nœud Bitcoin" - exit 1 -fi - -# Vérifier le solde du wallet mining -echo "Vérification du solde du wallet mining..." -MINING_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" getbalance 2>/dev/null || echo "0") -echo "Solde wallet mining: $MINING_BALANCE BTC" - -# Charger le wallet relay -echo "Chargement du wallet relay..." -docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" loadwallet "$RELAY_WALLET" > /dev/null 2>&1 || true - -# Vérifier le solde du wallet relay -echo "Vérification du solde du wallet relay..." -RELAY_BALANCE=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getbalance 2>/dev/null || echo "0") -echo "Solde wallet relay: $RELAY_BALANCE BTC" - -# Si le relay a déjà des fonds, ne pas transférer -if [ "$(echo "$RELAY_BALANCE > 0" | bc -l)" = "1" ]; then - echo "Forçage d'un nouveau transfert pour créer des outputs..." - exit 0 -fi - -# Générer une adresse pour le relay -echo "Génération d'une adresse pour le relay..." -RELAY_ADDRESS=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$RELAY_WALLET" getnewaddress "relay_funding" 2>/dev/null) -echo "Adresse générée: $RELAY_ADDRESS" - -# Effectuer le transfert -echo "Transfert de $AMOUNT BTC vers $RELAY_ADDRESS..." -TXID=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" sendtoaddress "$RELAY_ADDRESS" "$AMOUNT" 2>/dev/null) -echo "Transaction ID: $TXID" - -# Générer des blocs pour confirmer -echo "Génération de blocs pour confirmer la transaction..." -docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" generatetoaddress 6 "$RELAY_ADDRESS" > /dev/null 2>&1 - -# Vérifier les confirmations -CONFIRMATIONS=$(docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="$COOKIE_FILE" -rpcwallet="$MINING_WALLET" gettransaction "$TXID" 2>/dev/null | jq -r '.confirmations // 0') -echo "Confirmations: $CONFIRMATIONS" - -# Redémarrer le relay -echo "Redémarrage du relay..." -docker compose restart sdk_relay - -echo "=== TRANSFERT TERMINÉ ===" diff --git a/scripts/funds/startup_funds_check.sh b/scripts/funds/startup_funds_check.sh deleted file mode 100755 index aaddb0c..0000000 --- a/scripts/funds/startup_funds_check.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# Script de vérification des fonds au démarrage -# Usage: ./startup_funds_check.sh - -set -e - -echo "=== VÉRIFICATION DES FONDS AU DÉMARRAGE ===" - -# Attendre que les services soient prêts -echo "Attente du démarrage des services..." -sleep 30 - -# Vérifier la connectivité Bitcoin -echo "Vérification de la connectivité Bitcoin..." -for i in {1..10}; do - if docker exec bitcoin-signet bitcoin-cli -signet -rpccookiefile="/home/bitcoin/.bitcoin/signet/.cookie" getblockchaininfo > /dev/null 2>&1; then - echo "✅ Connexion Bitcoin OK" - break - fi - echo "⏳ Attente de la connexion Bitcoin... ($i/10)" - sleep 10 -done - -# Vérifier l'état du relay -echo "Vérification de l'état du relay..." -for i in {1..10}; do - if docker exec sdk_relay curl -f http://localhost:8091/ > /dev/null 2>&1; then - echo "✅ Relay opérationnel" - break - fi - echo "⏳ Attente du relay... ($i/10)" - sleep 10 -done - -# Vérifier et transférer les fonds si nécessaire -echo "Vérification des fonds..." -./scripts/funds/check_and_transfer_funds.sh 0.001 - -echo "=== VÉRIFICATION DES FONDS TERMINÉE ===" diff --git a/scripts/generate-ssl-certs.sh b/scripts/generate-ssl-certs.sh deleted file mode 100755 index c4b13bc..0000000 --- a/scripts/generate-ssl-certs.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -set -euo pipefail - -echo "🔐 GÉNÉRATION DES CERTIFICATS SSL AUTO-SIGNÉS" -echo "=============================================" - -# Fonction de logging -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" -} - -# Création des répertoires SSL -log "Création des répertoires SSL..." -mkdir -p /app/ssl - -# Génération de la clé privée -log "Génération de la clé privée..." -openssl genrsa -out /app/ssl/nginx-selfsigned.key 2048 - -# Génération du certificat auto-signé -log "Génération du certificat auto-signé..." -openssl req -new -x509 -key /app/ssl/nginx-selfsigned.key \ - -out /app/ssl/nginx-selfsigned.crt \ - -days 365 \ - -subj "/C=FR/ST=France/L=Paris/O=LeCoffre/OU=Development/CN=dev3.4nkweb.com/emailAddress=admin@lecoffre.io" - -# Configuration des permissions -log "Configuration des permissions..." -chmod 644 /app/ssl/nginx-selfsigned.key -chmod 644 /app/ssl/nginx-selfsigned.crt - -log "✅ Certificats SSL générés avec succès" -log " Certificat: /app/ssl/nginx-selfsigned.crt" -log " Clé privée: /app/ssl/nginx-selfsigned.key" -log " Valide pour: dev3.4nkweb.com" diff --git a/scripts/healthchecks/bitcoin-progress.sh b/scripts/healthchecks/bitcoin-progress.sh deleted file mode 100755 index d0f7e36..0000000 --- a/scripts/healthchecks/bitcoin-progress.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Script de test de progression pour Bitcoin Signet -info=$(bitcoin-cli -signet -conf=/etc/bitcoin/bitcoin.conf getblockchaininfo 2>/dev/null || echo '{}') -blocks=$(echo "$info" | jq -r '.blocks // 0') -headers=$(echo "$info" | jq -r '.headers // 0') -ibd=$(echo "$info" | jq -r '.initialblockdownload // false') -verification_progress=$(echo "$info" | jq -r '.verificationprogress // 0') - -# Bitcoin est considéré comme ready s'il répond aux commandes et a au moins quelques blocs -if [ "$blocks" -gt 0 ]; then - if [ "$ibd" = "false" ] || [ "$blocks" -eq "$headers" ]; then - echo "Bitcoin ready: Synced ($blocks blocks)" - else - remaining=$((headers - blocks)) - progress=$((blocks * 100 / headers)) - verification_percent=$(echo "$verification_progress * 100" | bc -l | cut -d. -f1) - echo "Bitcoin IBD: $blocks/$headers ($remaining remaining) - $progress% - Verification: $verification_percent%" - fi - exit 0 -else - echo "Bitcoin starting: No blocks yet" - exit 1 -fi diff --git a/scripts/healthchecks/blindbit-progress.sh b/scripts/healthchecks/blindbit-progress.sh deleted file mode 100755 index da568e2..0000000 --- a/scripts/healthchecks/blindbit-progress.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# Script de test de progression pour BlindBit -# Vérifier si le processus BlindBit est en cours d'exécution -if pgrep main > /dev/null 2>/dev/null; then - # Vérifier l'API - être plus tolérant - if wget -q --spider http://localhost:8000/tweaks/1 2>/dev/null; then - echo 'BlindBit ready: Oracle service responding' - exit 0 - else - # Vérifier si le processus est en cours d'exécution (même si l'API n'est pas encore prête) - echo 'BlindBit starting: Oracle service initializing' - exit 1 - fi -else - echo 'BlindBit starting: Process not ready' - exit 1 -fi diff --git a/scripts/healthchecks/sdk-relay-progress.sh b/scripts/healthchecks/sdk-relay-progress.sh deleted file mode 100755 index caf0b86..0000000 --- a/scripts/healthchecks/sdk-relay-progress.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Script de test de progression pour SDK Relay -# Vérifier si le processus SDK Relay est en cours d'exécution -if pgrep sdk_relay > /dev/null 2>/dev/null; then - # Vérifier l'API WebSocket - if curl -f http://localhost:8091/ >/dev/null 2>&1; then - echo 'SDK Relay ready: WebSocket server responding' - exit 0 - else - # Récupérer les logs récents pour voir la progression - relay_logs=$(tail -20 /var/log/sdk_relay/sdk_relay.log 2>/dev/null | grep -E "(IBD|blocks|headers|waiting|scanning|connecting)" | tail -1 || echo "") - if [ -n "$relay_logs" ]; then - echo "SDK Relay sync: $relay_logs" - exit 1 - else - echo 'SDK Relay starting: WebSocket server initializing' - exit 1 - fi - fi -else - echo 'SDK Relay starting: Process not ready' - exit 1 -fi diff --git a/scripts/healthchecks/sdk-signer-progress.sh b/scripts/healthchecks/sdk-signer-progress.sh deleted file mode 100755 index d9cc2f9..0000000 --- a/scripts/healthchecks/sdk-signer-progress.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Healthcheck for SDK Signer -# Prefer checking the HTTP endpoint first; fall back to log-based progress hints diff --git a/scripts/healthchecks/tor-progress.sh b/scripts/healthchecks/tor-progress.sh deleted file mode 100755 index c66e603..0000000 --- a/scripts/healthchecks/tor-progress.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Script de test de progression pour Tor -# Test simple : considérer Tor comme prêt après un délai -# Tor a terminé son bootstrap selon les logs Docker -echo 'Tor ready: Bootstrap complete (100%)' -exit 0 diff --git a/scripts/maintenance.sh b/scripts/maintenance.sh deleted file mode 100755 index 6a0f854..0000000 --- a/scripts/maintenance.sh +++ /dev/null @@ -1,182 +0,0 @@ -#!/bin/bash -# Script de maintenance LeCoffre Node -# Nettoyage, optimisation et vérifications de santé - -set -e - -# Couleurs pour l'affichage -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -CYAN='\033[0;36m' -NC='\033[0m' # No Color - -# Fonction pour afficher un message avec timestamp -print_message() { - echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1" -} - -# Fonction pour afficher le menu -show_menu() { - echo -e "${BLUE}========================================${NC}" - echo -e "${BLUE} LeCoffre Node - Maintenance Menu${NC}" - echo -e "${BLUE}========================================${NC}" - echo - echo -e "${CYAN}1.${NC} Validation complète du déploiement" - echo -e "${CYAN}2.${NC} Sauvegarde des données" - echo -e "${CYAN}3.${NC} Nettoyage des logs anciens" - echo -e "${CYAN}4.${NC} Nettoyage des images Docker inutilisées" - echo -e "${CYAN}5.${NC} Vérification de l'espace disque" - echo -e "${CYAN}6.${NC} Redémarrage des services" - echo -e "${CYAN}7.${NC} Mise à jour des images" - echo -e "${CYAN}8.${NC} Collecte des logs" - echo -e "${CYAN}9.${NC} Vérification de la santé des services" - echo -e "${CYAN}0.${NC} Quitter" - echo -} - -# Fonction de validation complète -validate_deployment() { - print_message "Lancement de la validation complète..." - ./scripts/validate-deployment.sh -} - -# Fonction de sauvegarde -backup_data() { - print_message "Création d'une sauvegarde des données..." - ./scripts/backup-data.sh -} - -# Fonction de nettoyage des logs -cleanup_logs() { - print_message "Nettoyage des logs anciens..." - - # Supprimer les logs de plus de 30 jours - find ./logs -name "*.log" -type f -mtime +30 -delete 2>/dev/null || true - - # Nettoyer les logs Docker - docker system prune -f --filter "until=720h" 2>/dev/null || true - - echo -e "${GREEN}✓ Logs anciens nettoyés${NC}" -} - -# Fonction de nettoyage Docker -cleanup_docker() { - print_message "Nettoyage des images Docker inutilisées..." - - # Supprimer les images inutilisées - docker image prune -f 2>/dev/null || true - - # Supprimer les conteneurs arrêtés - docker container prune -f 2>/dev/null || true - - # Supprimer les réseaux inutilisés - docker network prune -f 2>/dev/null || true - - echo -e "${GREEN}✓ Images Docker inutilisées supprimées${NC}" -} - -# Fonction de vérification de l'espace disque -check_disk_space() { - print_message "Vérification de l'espace disque..." - - echo -e "${CYAN}Espace disque disponible:${NC}" - df -h | grep -E "(Filesystem|/dev/)" - - echo - echo -e "${CYAN}Taille des volumes Docker:${NC}" - docker system df - - echo - echo -e "${CYAN}Taille des répertoires de logs:${NC}" - du -sh ./logs/* 2>/dev/null || echo "Aucun log trouvé" - - echo - echo -e "${CYAN}Taille des sauvegardes:${NC}" - du -sh ./backups/* 2>/dev/null || echo "Aucune sauvegarde trouvée" -} - -# Fonction de redémarrage des services -restart_services() { - print_message "Redémarrage des services..." - - echo -e "${YELLOW}Arrêt des services...${NC}" - docker compose --env-file .env.master down - - echo -e "${YELLOW}Démarrage des services...${NC}" - ./scripts/start.sh -} - -# Fonction de mise à jour -update_images() { - print_message "Mise à jour des images Docker..." - ./scripts/update-images.sh -} - -# Fonction de collecte des logs -collect_logs() { - print_message "Collecte des logs de tous les services..." - ./scripts/collect-logs.sh -} - -# Fonction de vérification de santé -check_health() { - print_message "Vérification de la santé des services..." - - echo -e "${CYAN}Statut des conteneurs:${NC}" - docker compose --env-file .env.master ps - - echo - echo -e "${CYAN}Utilisation des ressources:${NC}" - docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}" -} - -# Boucle principale -while true; do - show_menu - echo -n -e "${YELLOW}Choisissez une option (0-9): ${NC}" - read -r choice - - case $choice in - 1) - validate_deployment - ;; - 2) - backup_data - ;; - 3) - cleanup_logs - ;; - 4) - cleanup_docker - ;; - 5) - check_disk_space - ;; - 6) - restart_services - ;; - 7) - update_images - ;; - 8) - collect_logs - ;; - 9) - check_health - ;; - 0) - echo -e "${GREEN}Au revoir!${NC}" - exit 0 - ;; - *) - echo -e "${RED}Option invalide. Veuillez choisir entre 0 et 9.${NC}" - ;; - esac - - echo - echo -e "${YELLOW}Appuyez sur Entrée pour continuer...${NC}" - read -r - clear -done diff --git a/scripts/optimize-relay-startup.sh b/scripts/optimize-relay-startup.sh deleted file mode 100755 index 6ff19c4..0000000 --- a/scripts/optimize-relay-startup.sh +++ /dev/null @@ -1,65 +0,0 @@ -#!/bin/bash -# Script d'optimisation du démarrage du relais -# Évite les scans bloquants en ajustant last_scan si nécessaire - -set -e - -echo "🔧 Optimisation du démarrage du relais..." - -# Vérifier si le conteneur sdk_relay existe -if ! docker ps -a --format "table {{.Names}}" | grep -q "sdk_relay"; then - echo "⚠️ Conteneur sdk_relay non trouvé" - exit 0 -fi - -# Vérifier si le conteneur est en cours d'exécution -if ! docker ps --format "table {{.Names}}" | grep -q "sdk_relay"; then - echo "⚠️ Conteneur sdk_relay non démarré" - exit 0 -fi - -# Obtenir la hauteur actuelle de la blockchain -echo "📊 Récupération de la hauteur de la blockchain..." -CURRENT_HEIGHT=$(docker exec sdk_relay curl -s -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"1.0","id":"test","method":"getblockcount","params":[]}' http://bitcoin:38332/ | jq -r '.result' 2>/dev/null || echo "0") - -if [ "$CURRENT_HEIGHT" = "0" ] || [ "$CURRENT_HEIGHT" = "null" ]; then - echo "⚠️ Impossible de récupérer la hauteur de la blockchain" - exit 0 -fi - -echo "📊 Hauteur actuelle: $CURRENT_HEIGHT" - -# Vérifier le last_scan actuel -LAST_SCAN=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.last_scan' 2>/dev/null || echo "0") - -if [ "$LAST_SCAN" = "0" ] || [ "$LAST_SCAN" = "null" ]; then - echo "⚠️ Impossible de récupérer le last_scan" - exit 0 -fi - -echo "📊 Dernier scan: $LAST_SCAN" - -# Calculer la différence -DIFF=$((CURRENT_HEIGHT - LAST_SCAN)) - -echo "📊 Blocs à scanner: $DIFF" - -# Si plus de 20 blocs à scanner, ajuster pour éviter le blocage -if [ "$DIFF" -gt 20 ]; then - echo "⚠️ Trop de blocs à scanner ($DIFF), ajustement pour éviter le blocage..." - NEW_SCAN=$((CURRENT_HEIGHT - 5)) - - # Sauvegarder la configuration actuelle - docker exec sdk_relay cp /home/bitcoin/.4nk/default /home/bitcoin/.4nk/default.backup - - # Mettre à jour le last_scan - docker exec sdk_relay sh -c "cd /home/bitcoin/.4nk && sed 's/\"last_scan\":$LAST_SCAN/\"last_scan\":$NEW_SCAN/' default > default.new && mv default.new default" - - echo "✅ last_scan ajusté de $LAST_SCAN à $NEW_SCAN" - echo "🔄 Redémarrage du relais..." - docker compose restart sdk_relay -else - echo "✅ Nombre de blocs à scanner acceptable ($DIFF)" -fi - -echo "✅ Optimisation terminée" diff --git a/scripts/pre-build.sh b/scripts/pre-build.sh deleted file mode 100755 index ce711d3..0000000 --- a/scripts/pre-build.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash - -# Script de préparation avant build Docker -# Synchronise les configurations et prépare l'environnement - -set -euo pipefail - -# Couleurs pour les logs -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Fonction de logging -log() { - echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" -} - -log_success() { - echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1" -} - -log_warning() { - echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1" -} - -log_error() { - echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1" -} - -# Répertoire racine du projet -PROJECT_ROOT="/home/debian/lecoffre_node" - -# Changer vers le répertoire du projet -cd "$PROJECT_ROOT" - -log "Préparation avant build Docker..." - -# 1. Synchroniser toutes les configurations -log "Synchronisation des configurations..." -if ./scripts/sync-configs.sh; then - log_success "Configurations synchronisées" -else - log_error "Échec de la synchronisation des configurations" - exit 1 -fi - -# 2. Mettre à jour les dépendances de tous les projets -log "Mise à jour des dépendances..." -if ./scripts/startup-sequence.sh update-deps; then - log_success "Dépendances mises à jour" -else - log_warning "Échec de la mise à jour des dépendances" -fi - -# 3. Vérifier les fichiers ignore -log "Vérification des fichiers ignore..." -if ./scripts/startup-sequence.sh check-ignore; then - log_success "Fichiers ignore vérifiés" -else - log_warning "Problèmes détectés avec les fichiers ignore" -fi - -# 4. Nettoyer les fichiers non suivis -log "Nettoyage des fichiers non suivis..." -if ./scripts/startup-sequence.sh clean-untracked; then - log_success "Fichiers non suivis nettoyés" -else - log_warning "Échec du nettoyage des fichiers non suivis" -fi - -# 5. Vérifier que les services nécessaires sont arrêtés -log "Vérification des services Docker..." -if docker compose ps --services --filter "status=running" | grep -q .; then - log_warning "Certains services sont en cours d'exécution" - log "Arrêt des services pour le build..." - docker compose down - log_success "Services arrêtés" -else - log_success "Aucun service en cours d'exécution" -fi - -# 6. Nettoyer les images Docker obsolètes (optionnel) -if [[ "${CLEAN_DOCKER:-false}" == "true" ]]; then - log "Nettoyage des images Docker obsolètes..." - docker system prune -f - log_success "Nettoyage terminé" -fi - -# 7. Vérifier l'espace disque -log "Vérification de l'espace disque..." -DISK_USAGE=$(df /home/debian | tail -1 | awk '{print $5}' | sed 's/%//') -if [[ $DISK_USAGE -gt 90 ]]; then - log_warning "Espace disque faible: ${DISK_USAGE}% utilisé" -else - log_success "Espace disque OK: ${DISK_USAGE}% utilisé" -fi - -log_success "Préparation terminée - Prêt pour le build Docker" diff --git a/scripts/restore-data.sh b/scripts/restore-data.sh deleted file mode 100755 index f75212c..0000000 --- a/scripts/restore-data.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/bin/bash -# Script de restauration des données LeCoffre Node -# Restaure Bitcoin, BlindBit, SDK Storage et SDK Signer - -set -e - -# Couleurs pour l'affichage -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -BACKUP_DIR="./backups" - -if [ $# -eq 0 ]; then - echo -e "${RED}Usage: $0 ${NC}" - echo -e "${YELLOW}Available backups:${NC}" - ls -la "$BACKUP_DIR"/*.tar.gz 2>/dev/null | awk '{print " " $9}' | sed 's|.*/||' | sed 's|\.tar\.gz||' || echo " No backups found" - exit 1 -fi - -BACKUP_NAME="$1" -BACKUP_FILE="$BACKUP_DIR/${BACKUP_NAME}.tar.gz" - -if [ ! -f "$BACKUP_FILE" ]; then - echo -e "${RED}Error: Backup file $BACKUP_FILE not found${NC}" - exit 1 -fi - -echo -e "${BLUE}========================================${NC}" -echo -e "${BLUE} LeCoffre Node - Data Restore${NC}" -echo -e "${BLUE}========================================${NC}" -echo - -echo -e "${YELLOW}Restoring from: $BACKUP_NAME${NC}" -echo -e "${RED}WARNING: This will overwrite existing data!${NC}" -echo -e "${YELLOW}Are you sure you want to continue? (y/N)${NC}" -read -r response - -if [[ ! "$response" =~ ^[Yy]$ ]]; then - echo -e "${YELLOW}Restore cancelled${NC}" - exit 0 -fi - -# Arrêter les services -echo -e "${BLUE}Stopping services...${NC}" -docker compose --env-file .env.master down >/dev/null 2>&1 || true - -# Extraire la sauvegarde -echo -e "${BLUE}Extracting backup...${NC}" -cd "$BACKUP_DIR" -tar -xzf "${BACKUP_NAME}.tar.gz" -cd .. - -# Fonction pour restaurer un volume Docker -restore_volume() { - local volume_name=$1 - local backup_path=$2 - local description=$3 - - echo -e "${BLUE}Restoring $description...${NC}" - - # Créer le volume s'il n'existe pas - docker volume create "$volume_name" >/dev/null 2>&1 || true - - # Restaurer les données - if [ -d "$BACKUP_DIR/$BACKUP_NAME$backup_path" ]; then - docker run --rm \ - -v "$volume_name":/target \ - -v "$(pwd)/$BACKUP_DIR/$BACKUP_NAME$backup_path":/source:ro \ - alpine:latest \ - sh -c "rm -rf /target/* && cp -r /source/* /target/ 2>/dev/null || true" - echo -e "${GREEN}✓ $description restored${NC}" - else - echo -e "${YELLOW}⚠ No backup data found for $description${NC}" - fi -} - -# Restaurer les volumes critiques -restore_volume "4nk_node_bitcoin_data" "/bitcoin" "Bitcoin Signet Data" -restore_volume "4nk_node_blindbit_data" "/blindbit" "BlindBit Oracle Data" -restore_volume "4nk_node_sdk_data" "/sdk" "SDK Relay Data" -restore_volume "4nk_node_sdk_storage_data" "/sdk_storage" "SDK Storage Data" -restore_volume "4nk_node_grafana_data" "/grafana" "Grafana Data" -restore_volume "4nk_node_loki_data" "/loki" "Loki Data" - -# Nettoyer les fichiers temporaires -rm -rf "$BACKUP_DIR/$BACKUP_NAME" - -echo -echo -e "${GREEN}✅ Data restoration completed successfully!${NC}" -echo -e "${YELLOW}You can now start the services with: ./scripts/start.sh${NC}" -echo diff --git a/scripts/setup-logs.sh b/scripts/setup-logs.sh deleted file mode 100755 index 8ef8952..0000000 --- a/scripts/setup-logs.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash - -# Script pour configurer la centralisation des logs -# Usage: ./scripts/setup-logs.sh - -set -e - -echo "🔧 Configuration de la centralisation des logs..." - -# Créer les dossiers de logs -mkdir -p logs/{bitcoin,blindbit,sdk_relaysdk_storagelecoffre-front,ihm_client,tor,miner,nginx} - -# Créer des fichiers de log de test pour chaque service -echo "📝 Création des fichiers de log de test..." - -for service in bitcoin blindbit sdk_relaysdk_storage lecoffre-front ihm_client tor miner nginx; do - log_file="logs/${service}/${service}.log" - echo "$(date): Test log entry for ${service}" > "$log_file" - echo "$(date): Service ${service} started successfully" >> "$log_file" - echo "✅ Créé: $log_file" -done - -# Créer des fichiers de log avec rotation -echo "🔄 Configuration de la rotation des logs..." - -for service in bitcoin blindbit sdk_relaysdk_storage lecoffre-front ihm_client tor miner nginx; do - logrotate_config="conf/logrotate/${service}.conf" - mkdir -p conf/logrotate - - cat > "$logrotate_config" << EOF -logs/${service}/*.log { - daily - missingok - rotate 7 - compress - delaycompress - notifempty - create 644 root root - postrotate - # Redémarrer le service si nécessaire - docker restart ${service} 2>/dev/null || true - endscript -} -EOF - echo "✅ Créé: $logrotate_config" -done - -# Créer un script de collecte de logs -cat > scripts/collect-logs.sh << 'EOF' -#!/bin/bash - -# Script pour collecter les logs de tous les services -# Usage: ./scripts/collect-logs.sh [service_name] - -set -e - -LOG_DIR="logs" -TIMESTAMP=$(date +"%Y%m%d_%H%M%S") - -if [ $# -eq 1 ]; then - # Collecter les logs d'un service spécifique - SERVICE=$1 - if [ -d "$LOG_DIR/$SERVICE" ]; then - echo "📊 Collecte des logs pour $SERVICE..." - docker logs "$SERVICE" > "$LOG_DIR/$SERVICE/${SERVICE}_${TIMESTAMP}.log" 2>&1 - echo "✅ Logs collectés: $LOG_DIR/$SERVICE/${SERVICE}_${TIMESTAMP}.log" - else - echo "❌ Service $SERVICE non trouvé" - exit 1 - fi -else - # Collecter les logs de tous les services - echo "📊 Collecte des logs de tous les services..." - - for service in bitcoin-signet blindbit-oracle sdk_relaysdk_storage lecoffre-front ihm_client tor-proxy signet_miner; do - if docker ps --format "table {{.Names}}" | grep -q "^${service}$"; then - echo "📝 Collecte des logs pour $service..." - mkdir -p "$LOG_DIR/${service##*-}" # Enlever le préfixe si nécessaire - docker logs "$service" > "$LOG_DIR/${service##*-}/${service}_${TIMESTAMP}.log" 2>&1 - echo "✅ Logs collectés pour $service" - else - echo "⚠️ Service $service non en cours d'exécution" - fi - done -fi - -echo "🎉 Collecte terminée!" -EOF - -chmod +x scripts/collect-logs.sh - -echo "✅ Configuration des logs terminée!" -echo "" -echo "📋 Prochaines étapes:" -echo "1. Redémarrer les services: docker compose restart" -echo "2. Vérifier Grafana: https://dev4.4nkweb.com/grafana/" -echo "3. Collecter les logs: ./scripts/collect-logs.sh" -echo "4. Surveiller les logs: docker compose logs -f" -echo "" -echo "🔗 URLs utiles:" -echo "- Grafana: https://dev4.4nkweb.com/grafana/" -echo "- Loki API: https://dev4.4nkweb.com/loki/" -echo "- Logs locaux: ./logs/" diff --git a/scripts/start.sh b/scripts/start.sh deleted file mode 100755 index 382327b..0000000 --- a/scripts/start.sh +++ /dev/null @@ -1,263 +0,0 @@ -#!/bin/bash -# LeCoffre Node - Script de lancement séquentiel avec progression -# Lance les services dans l'ordre logique avec suivi de l'avancement - -set -e - -# Couleurs pour l'affichage -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -CYAN='\033[0;36m' -NC='\033[0m' # No Color - -# Configuration -START_TIME=$(date +%s) -MAX_WAIT=300 # 5 minutes max par service - -# Fonction pour afficher un message avec timestamp -print_message() { - echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1" -} - -# Fonction pour afficher la progression -show_progress() { - local current=$1 - local total=$2 - local service=$3 - local percent=$((current * 100 / total)) - echo -e "${CYAN}Progress: $current/$total ($percent%) - $service${NC}" -} - -# Fonction pour afficher la progression détaillée -show_detailed_progress() { - local service_name=$1 - - echo -e "${CYAN}=== Detailed Progress ===${NC}" - - # Tor Bootstrap - if docker ps --format '{{.Names}}' | grep -q "tor-proxy"; then - local bootstrap_log=$(docker logs tor-proxy --tail 10 2>/dev/null | grep 'Bootstrapped' | tail -1 || echo "") - if [ -n "$bootstrap_log" ]; then - local progress=$(echo "$bootstrap_log" | grep -o '[0-9]\+%' | tail -1 || echo "0%") - local stage=$(echo "$bootstrap_log" | grep -o '(.*)' | sed 's/[()]//g' || echo "starting") - echo -e " ${YELLOW}Tor Bootstrap: $progress - $stage${NC}" - else - echo -e " ${YELLOW}Tor Bootstrap: Starting...${NC}" - fi - else - echo -e " ${RED}Tor: Not running${NC}" - fi - - # Bitcoin Signet - if docker ps --format '{{.Names}}' | grep -q "bitcoin-signet"; then - local info=$(docker exec bitcoin-signet bitcoin-cli -signet -conf=/etc/bitcoin/bitcoin.conf getblockchaininfo 2>/dev/null || echo '{}') - local blocks=$(echo "$info" | jq -r '.blocks // 0' 2>/dev/null || echo "0") - local headers=$(echo "$info" | jq -r '.headers // 0' 2>/dev/null || echo "0") - local ibd=$(echo "$info" | jq -r '.initialblockdownload // false' 2>/dev/null || echo "true") - local verification_progress=$(echo "$info" | jq -r '.verificationprogress // 0' 2>/dev/null || echo "0") - - if [ "$ibd" = "false" ] || [ "$blocks" -eq "$headers" ]; then - echo -e " ${GREEN}Bitcoin Signet: Synced ($blocks blocks)${NC}" - else - local progress=$((blocks * 100 / headers)) - local ver_percent=$(echo "$verification_progress * 100" | bc -l | cut -d. -f1 2>/dev/null || echo "0") - echo -e " ${YELLOW}Bitcoin IBD: $blocks/$headers ($progress%) - Verification: $ver_percent%${NC}" - fi - else - echo -e " ${RED}Bitcoin Signet: Not running${NC}" - fi - - # BlindBit Oracle - if docker ps --format '{{.Names}}' | grep -q "blindbit-oracle"; then - local api_response=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8000/tweaks/1 2>/dev/null || echo "000") - if [ "$api_response" = "200" ]; then - echo -e " ${GREEN}BlindBit Oracle: Ready${NC}" - else - local scan_logs=$(docker logs blindbit-oracle --tail 5 2>/dev/null | grep -E "(scanning|scan|blocks|tweaks|processing)" | tail -1 || echo "") - if [ -n "$scan_logs" ]; then - echo -e " ${YELLOW}BlindBit Scan: $scan_logs${NC}" - else - echo -e " ${YELLOW}BlindBit: Starting...${NC}" - fi - fi - else - echo -e " ${RED}BlindBit Oracle: Not running${NC}" - fi - - # SDK Relay - if docker ps --format '{{.Names}}' | grep -q "sdk_relay"; then - local ws_response=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8091/ 2>/dev/null || echo "000") - if [ "$ws_response" = "200" ]; then - echo -e " ${GREEN}SDK Relay: Ready${NC}" - else - local relay_logs=$(docker logs sdk_relay --tail 5 2>/dev/null | grep -E "(IBD|blocks|headers|waiting|scanning|connecting)" | tail -1 || echo "") - if [ -n "$relay_logs" ]; then - echo -e " ${YELLOW}SDK Relay Sync: $relay_logs${NC}" - else - echo -e " ${YELLOW}SDK Relay: Starting...${NC}" - fi - fi - else - echo -e " ${RED}SDK Relay: Not running${NC}" - fi - - - # URLs publiques HTTPS - echo -e "${CYAN}Public URLs Status:${NC}" - local urls=( - "https://dev4.4nkweb.com/status/:Status Page" - "https://dev4.4nkweb.com/grafana/:Grafana Dashboard" - "https://dev4.4nkweb.com/:Main Site" - "https://dev4.4nkweb.com/lecoffre/:LeCoffre App" - ) - - for url_entry in "${urls[@]}"; do - local url="${url_entry%%:*}" - local name="${url_entry##*:}" - local response=$(curl -s -o /dev/null -w '%{http_code}' "$url" 2>/dev/null || echo "000") - if [ "$response" = "200" ]; then - echo -e " ${GREEN}$name: Accessible (HTTP $response)${NC}" - else - echo -e " ${YELLOW}$name: Not accessible (HTTP $response)${NC}" - fi - done - - # URLs WebSocket publiques - echo -e "${CYAN}WebSocket URLs Status:${NC}" - local ws_urls=( - "wss://dev3.4nkweb.com/ws/:Bootstrap Relay" - "wss://dev3.4nkweb.com/ws/:Signer Service" - ) - - for ws_entry in "${ws_urls[@]}"; do - local ws_url="${ws_entry%%:*}" - local ws_name="${ws_entry##*:}" - # Test WebSocket avec timeout court - local ws_test=$(timeout 3 wscat -c "$ws_url" --no-color 2>/dev/null && echo "connected" || echo "failed") - if [ "$ws_test" = "connected" ]; then - echo -e " ${GREEN}$ws_name: Connected${NC}" - else - echo -e " ${YELLOW}$ws_name: Not connected${NC}" - fi - done - - echo -e "${CYAN}========================${NC}" -} - -# Fonction pour attendre qu'un service soit healthy -wait_for_healthy() { - local service_name=$1 - local max_wait=${2:-$MAX_WAIT} - local wait_time=0 - - print_message "Waiting for $service_name to be healthy..." - - while [ $wait_time -lt $max_wait ]; do - local status=$(docker inspect --format='{{.State.Health.Status}}' "$service_name" 2>/dev/null || echo "no-healthcheck") - local running=$(docker inspect --format='{{.State.Running}}' "$service_name" 2>/dev/null || echo "false") - - if [ "$running" = "true" ] && [ "$status" = "healthy" ]; then - echo -e "${GREEN}✓ $service_name is healthy${NC}" - return 0 - fi - - # Afficher la progression détaillée - show_detailed_progress "$service_name" - - sleep 5 - wait_time=$((wait_time + 5)) - done - - echo -e "${RED}✗ Timeout waiting for $service_name${NC}" - return 1 -} - -# Fonction pour démarrer un service -start_service() { - local service_name=$1 - local display_name=$2 - - print_message "Starting $display_name..." - docker compose --env-file .env.master up -d "$service_name" - - # Attendre que le conteneur soit créé - sleep 2 - - # Vérifier si le service a un healthcheck - local has_healthcheck=$(docker inspect --format='{{.Config.Healthcheck}}' "$service_name" 2>/dev/null | grep -q "Test" && echo "true" || echo "false") - - if [ "$has_healthcheck" = "true" ]; then - wait_for_healthy "$service_name" - else - # Pour les services sans healthcheck, attendre qu'ils soient running - local wait_time=0 - while [ $wait_time -lt 60 ]; do - local running=$(docker inspect --format='{{.State.Running}}' "$service_name" 2>/dev/null || echo "false") - if [ "$running" = "true" ]; then - echo -e "${GREEN}✓ $display_name is running${NC}" - break - fi - sleep 2 - wait_time=$((wait_time + 2)) - done - fi -} - -echo -e "${BLUE}========================================${NC}" -echo -e "${BLUE} LeCoffre Node - Sequential Startup${NC}" -echo -e "${BLUE}========================================${NC}" -echo - -# Arrêter les services existants -print_message "Stopping existing services..." -docker compose --env-file .env.master down --remove-orphans >/dev/null 2>&1 || true - -# Ordre de démarrage logique -services=( - "tor:Tor Proxy" - "bitcoin:Bitcoin Signet" - "blindbit:BlindBit Oracle" - "sdk_storage:SDK Storage" - "sdk_relay:SDK Relay" - "lecoffre-front:LeCoffre Frontend" - "ihm_client:IHM Client" - "grafana:Grafana" - "status-api:Status API" -) - -total_services=${#services[@]} -current_service=0 - -# Démarrer les services dans l'ordre -for service in "${services[@]}"; do - current_service=$((current_service + 1)) - service_name="${service%%:*}" - display_name="${service##*:}" - - show_progress $current_service $total_services "$display_name" - start_service "$service_name" "$display_name" - echo -done - -# Afficher le statut final -echo -e "${GREEN}🎉 All services started successfully!${NC}" -echo -echo -e "${BLUE}Final status:${NC}" -docker compose --env-file .env.master ps - -# Calculer le temps total -end_time=$(date +%s) -total_time=$((end_time - START_TIME)) -minutes=$((total_time / 60)) -seconds=$((total_time % 60)) - -echo -echo -e "${GREEN}Total startup time: ${minutes}m ${seconds}s${NC}" -echo -echo -e "${BLUE}Useful commands:${NC}" -echo -e " ${YELLOW}docker compose --env-file .env.master logs -f${NC} # Voir les logs" -echo -e " ${YELLOW}docker compose --env-file .env.master down${NC} # Arrêter les services" -echo -e " ${YELLOW}docker compose --env-file .env.master ps${NC} # Voir le statut" -echo diff --git a/scripts/sync-configs.sh b/scripts/sync-configs.sh deleted file mode 100755 index 1696788..0000000 --- a/scripts/sync-configs.sh +++ /dev/null @@ -1,187 +0,0 @@ -#!/bin/bash - -# Script de synchronisation des configurations centralisées -# Usage: ./scripts/sync-configs.sh [project_name] -# Si aucun projet n'est spécifié, synchronise tous les projets - -set -euo pipefail - -# Couleurs pour les logs -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# Fonction de logging -log() { - echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" -} - -log_success() { - echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1" -} - -log_warning() { - echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠${NC} $1" -} - -log_error() { - echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1" -} - -# Répertoire racine du projet -PROJECT_ROOT="/home/debian/4NK_env/lecoffre_node" -CONF_DIR="$PROJECT_ROOT/conf" - -# Vérifier que nous sommes dans le bon répertoire -if [[ ! -d "$CONF_DIR" ]]; then - log_error "Répertoire de configuration non trouvé: $CONF_DIR" - exit 1 -fi - -# Fonction pour synchroniser un projet -sync_project() { - local project_name="$1" - local project_path="/home/debian/4NK_env/$project_name" - - log "Synchronisation de $project_name..." - - # Vérifier que le projet existe - if [[ ! -d "$project_path" ]]; then - log_warning "Projet $project_name non trouvé: $project_path" - return 1 - fi - - case "$project_name" in - "lecoffre_node") - # Bitcoin configuration - if [[ -f "$CONF_DIR/bitcoin/bitcoin.conf" ]]; then - cp "$CONF_DIR/bitcoin/bitcoin.conf" "$project_path/bitcoin/" - log_success "Bitcoin config copiée" - fi - - # Relay configuration - if [[ -f "$CONF_DIR/relay/sdk_relay.conf" ]]; then - cp "$CONF_DIR/relay/sdk_relay.conf" "$project_path/relay/" - log_success "Relay config copiée" - fi - ;; - - "ihm_client") - # Nginx configuration - if [[ -f "$CONF_DIR/ihm_client/nginx.dev.conf" ]]; then - cp "$CONF_DIR/ihm_client/nginx.dev.conf" "$project_path/" - log_success "Nginx config copiée vers ihm_client" - fi - ;; - - "lecoffre-front") - # Frontend configuration (si nécessaire) - if [[ -d "$CONF_DIR/lecoffre-front" ]]; then - cp -r "$CONF_DIR/lecoffre-front/"* "$project_path/" 2>/dev/null || true - log_success "Frontend configs copiées" - fi - ;; - - *) - log_warning "Projet $project_name non configuré pour la synchronisation" - return 1 - ;; - esac - - log_success "Synchronisation de $project_name terminée" -} - -# Fonction pour synchroniser tous les projets -sync_all() { - log "Synchronisation de tous les projets..." - - local projects=("lecoffre_node" "ihm_client" "lecoffre-front") - local success_count=0 - local total_count=${#projects[@]} - - for project in "${projects[@]}"; do - if sync_project "$project"; then - ((success_count++)) - fi - done - - log "Synchronisation terminée: $success_count/$total_count projets synchronisés" - - if [[ $success_count -eq $total_count ]]; then - log_success "Tous les projets ont été synchronisés avec succès" - return 0 - else - log_warning "Certains projets n'ont pas pu être synchronisés" - return 1 - fi -} - -# Fonction pour afficher l'aide -show_help() { - echo "Usage: $0 [OPTIONS] [PROJECT_NAME]" - echo "" - echo "Synchronise les configurations centralisées vers les projets" - echo "" - echo "OPTIONS:" - echo " -h, --help Affiche cette aide" - echo " -l, --list Liste les projets disponibles" - echo " -v, --verbose Mode verbeux" - echo "" - echo "PROJECT_NAME:" - echo " Nom du projet à synchroniser (optionnel)" - echo " Si non spécifié, synchronise tous les projets" - echo "" - echo "Exemples:" - echo " $0 # Synchronise tous les projets" - echo " $0 ihm_client # Synchronise seulement ihm_client" - echo " $0 lecoffre_node # Synchronise seulement lecoffre_node" -} - -# Fonction pour lister les projets -list_projects() { - echo "Projets disponibles pour la synchronisation:" - echo " - lecoffre_node (bitcoin.conf, sdk_relay.conf)" - echo " - ihm_client (nginx.dev.conf)" - echo " - lecoffre-front (configurations frontend)" -} - -# Parse des arguments -VERBOSE=false -while [[ $# -gt 0 ]]; do - case $1 in - -h|--help) - show_help - exit 0 - ;; - -l|--list) - list_projects - exit 0 - ;; - -v|--verbose) - VERBOSE=true - shift - ;; - -*) - log_error "Option inconnue: $1" - show_help - exit 1 - ;; - *) - PROJECT_NAME="$1" - shift - ;; - esac -done - -# Changer vers le répertoire du projet -cd "$PROJECT_ROOT" - -# Exécuter la synchronisation -if [[ -n "${PROJECT_NAME:-}" ]]; then - log "Synchronisation du projet: $PROJECT_NAME" - sync_project "$PROJECT_NAME" -else - sync_all -fi diff --git a/scripts/sync-monitoring-config.sh b/scripts/sync-monitoring-config.sh deleted file mode 100755 index 5060b08..0000000 --- a/scripts/sync-monitoring-config.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/bash - -# Script de synchronisation de la configuration de monitoring -# Usage: ./scripts/sync-monitoring-config.sh - -set -e - -# Couleurs pour les messages -GREEN='\033[0;32m' -BLUE='\033[0;34m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -log_info() { - echo -e "${BLUE}ℹ️ $1${NC}" -} - -log_success() { - echo -e "${GREEN}✅ $1${NC}" -} - -log_warning() { - echo -e "${YELLOW}⚠️ $1${NC}" -} - -log_info "🔄 Synchronisation de la configuration de monitoring..." - -# Créer la structure de dossiers -log_info "Création de la structure de dossiers..." -mkdir -p conf/{grafana/{provisioning/{datasources,dashboards},dashboards},promtail,logrotate,nginx} -mkdir -p logs/{bitcoin,blindbit,sdk_relaysdk_storagelecoffre-front,ihm_client,tor,miner,nginx} - -# Copier la configuration Nginx si elle n'existe pas -if [ ! -f "conf/nginx/grafana.conf" ]; then - log_info "Création de la configuration Nginx pour Grafana..." - cat > conf/nginx/grafana.conf << 'EOF' -# Configuration Nginx pour Grafana -server { - listen 80; - server_name dev4.4nkweb.com; - - # Proxy pour Grafana - location /grafana/ { - proxy_pass http://127.0.0.1:3000/; - proxy_set_header Host $host; - 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; - - # Configuration spécifique pour Grafana - proxy_set_header X-Grafana-Org-Id 1; - - # Support des WebSockets pour les live updates - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - # Timeouts - proxy_connect_timeout 60s; - proxy_send_timeout 60s; - proxy_read_timeout 60s; - - # Buffer settings - proxy_buffering off; - proxy_request_buffering off; - } - - # Proxy pour Loki (API) - location /loki/ { - proxy_pass http://127.0.0.1:3100/; - proxy_set_header Host $host; - 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; - - # CORS pour les requêtes depuis Grafana - add_header Access-Control-Allow-Origin *; - add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; - add_header Access-Control-Allow-Headers "Content-Type, Authorization"; - - if ($request_method = 'OPTIONS') { - return 204; - } - } -} -EOF - log_success "Configuration Nginx créée" -fi - -# Créer des fichiers de log de test pour chaque service -log_info "Création des fichiers de log de test..." -for service in bitcoin blindbit sdk_relaysdk_storage lecoffre-front ihm_client tor miner nginx; do - log_file="logs/${service}/${service}.log" - if [ ! -f "$log_file" ]; then - echo "$(date): Test log entry for ${service}" > "$log_file" - echo "$(date): Service ${service} started successfully" >> "$log_file" - log_success "Créé: $log_file" - else - log_warning "Existe déjà: $log_file" - fi -done - -# Vérifier que tous les fichiers de configuration Grafana existent -log_info "Vérification des fichiers de configuration Grafana..." - -required_grafana_files=( - "conf/grafana/provisioning/datasources/loki.yml" - "conf/grafana/provisioning/dashboards/dashboards.yml" - "conf/grafana/grafana.ini" - "conf/grafana/dashboards/lecoffre-overview.json" - "conf/grafana/dashboards/bitcoin-miner.json" - "conf/grafana/dashboards/services-overview.json" - "conf/promtail/promtail.yml" -) - -missing_files=() -for file in "${required_grafana_files[@]}"; do - if [ ! -f "$file" ]; then - missing_files+=("$file") - fi -done - -if [ ${#missing_files[@]} -gt 0 ]; then - log_warning "Fichiers de configuration manquants:" - for file in "${missing_files[@]}"; do - echo " - $file" - done - log_warning "Exécutez d'abord: ./scripts/setup-logs.sh" -else - log_success "Tous les fichiers de configuration Grafana sont présents" -fi - -# Créer un fichier de configuration de monitoring central -log_info "Création du fichier de configuration central..." -cat > conf/monitoring.conf << 'EOF' -# Configuration centralisée du monitoring LeCoffre Node -# Généré automatiquement le $(date) - -[monitoring] -# Services de monitoring -grafana_port=3000 -loki_port=3100 -promtail_enabled=true - -[grafana] -admin_user=admin -admin_password=admin123 -root_url=https://dev4.4nkweb.com/grafana/ -dashboard_home=lecoffre-overview - -[logs] -# Configuration des logs -log_retention_days=30 -log_rotation=daily -log_compression=true - -[services] -# Services surveillés -services=bitcoin,blindbit,sdk_relaysdk_storagelecoffre-front,ihm_client,tor,miner - -[alerts] -# Configuration des alertes -error_threshold=10 -warning_threshold=5 -alert_email= -EOF - -log_success "Configuration centralisée créée: conf/monitoring.conf" - -# Créer un script de test de connectivité -log_info "Création du script de test de connectivité..." -cat > scripts/test-monitoring.sh << 'EOF' -#!/bin/bash - -# Script de test de connectivité pour le monitoring -set -e - -echo "🔍 Test de connectivité du monitoring..." - -# Test Grafana -echo "Test Grafana..." -if curl -s http://localhost:3000/api/health >/dev/null 2>&1; then - echo "✅ Grafana: OK" -else - echo "❌ Grafana: Non accessible" -fi - -# Test Loki -echo "Test Loki..." -if curl -s http://localhost:3100/ready >/dev/null 2>&1; then - echo "✅ Loki: OK" -else - echo "❌ Loki: Non accessible" -fi - -# Test Promtail -echo "Test Promtail..." -if docker ps --format "table {{.Names}}" | grep -q "promtail"; then - echo "✅ Promtail: En cours d'exécution" -else - echo "❌ Promtail: Arrêté" -fi - -echo "🎉 Tests terminés!" -EOF - -chmod +x scripts/test-monitoring.sh -log_success "Script de test créé: scripts/test-monitoring.sh" - -log_success "🔄 Synchronisation terminée!" -echo "" -echo "📋 Prochaines étapes:" -echo "1. Tester la connectivité: ./scripts/test-monitoring.sh" -echo "2. Démarrer le monitoring: ./scripts/deploy-grafana.sh start" -echo "3. Accéder à Grafana: https://dev4.4nkweb.com/grafana/" -echo "" -echo "🔗 URLs d'accès:" -echo " - Grafana: https://dev4.4nkweb.com/grafana/" -echo " - Loki API: https://dev4.4nkweb.com/loki/" -echo " - Configuration: conf/monitoring.conf" diff --git a/scripts/test-dashboards.sh b/scripts/test-dashboards.sh deleted file mode 100755 index 0341636..0000000 --- a/scripts/test-dashboards.sh +++ /dev/null @@ -1,172 +0,0 @@ -#!/bin/bash - -# Script de test des dashboards Grafana -# Vérifie que tous les dashboards sont accessibles et fonctionnels - -set -e - -echo "🔍 Test des Dashboards Grafana LeCoffre Node" -echo "=============================================" - -GRAFANA_URL="https://dev4.4nkweb.com/grafana" -ADMIN_USER="admin" -ADMIN_PASS="Fuy8ZfxQI2xdSdoB8wsGxNjyU" - -# Fonction pour tester un dashboard -test_dashboard() { - local dashboard_title="$1" - local dashboard_uid="$2" - - echo "📊 Test du dashboard: $dashboard_title" - - # Vérifier que le dashboard existe - dashboard_info=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/dashboards/uid/$dashboard_uid" \ - -H "Content-Type: application/json") - - if echo "$dashboard_info" | jq -e '.dashboard.title' > /dev/null 2>&1; then - echo " ✅ Dashboard accessible: $dashboard_title" - - # Vérifier les panneaux - panel_count=$(echo "$dashboard_info" | jq '.dashboard.panels | length') - echo " 📈 Nombre de panneaux: $panel_count" - - # Vérifier les requêtes Loki - loki_queries=$(echo "$dashboard_info" | jq '.dashboard.panels[] | select(.targets[]?.datasource.type == "loki") | .targets[]?.expr' | wc -l) - echo " 🔍 Requêtes Loki: $loki_queries" - - return 0 - else - echo " ❌ Dashboard inaccessible: $dashboard_title" - return 1 - fi -} - -# Fonction pour tester l'API Loki -test_loki_api() { - echo "🔍 Test de l'API Loki" - - # Test de connectivité Loki - loki_response=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/datasources/proxy/loki/api/v1/labels" \ - -H "Content-Type: application/json" \ - -H "X-Scope-OrgID: anonymous" 2>/dev/null || echo "ERROR") - - if [[ "$loki_response" != "ERROR" ]] && echo "$loki_response" | jq -e '.data' > /dev/null 2>&1; then - echo " ✅ API Loki accessible" - - # Compter les labels disponibles - label_count=$(echo "$loki_response" | jq '.data | length') - echo " 🏷️ Labels disponibles: $label_count" - - return 0 - else - echo " ❌ API Loki inaccessible" - return 1 - fi -} - -# Fonction pour tester les logs des services -test_service_logs() { - echo "📋 Test des logs des services" - - services=("bitcoin-signet" "blindbit-oracle" "sdk_relay""sdk_storage" "lecoffre-front" "ihm_client" "signet_miner") - - for service in "${services[@]}"; do - echo " 🔍 Test des logs: $service" - - # Test d'une requête simple sur les logs du service - loki_response=$(curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/datasources/proxy/loki/api/v1/query?query={container=\"$service\"}&limit=1" \ - -H "Content-Type: application/json" \ - -H "X-Scope-OrgID: anonymous" 2>/dev/null || echo "ERROR") - - if [[ "$loki_response" != "ERROR" ]] && echo "$loki_response" | jq -e '.data.result' > /dev/null 2>&1; then - log_count=$(echo "$loki_response" | jq '.data.result | length') - if [ "$log_count" -gt 0 ]; then - echo " ✅ Logs disponibles: $log_count entrées" - else - echo " ⚠️ Aucun log récent trouvé" - fi - else - echo " ❌ Erreur d'accès aux logs" - fi - done -} - -# Fonction pour générer un rapport de santé -generate_health_report() { - echo "📊 Rapport de Santé des Dashboards" - echo "==================================" - - # Test de connectivité Grafana - grafana_status=$(curl -s -o /dev/null -w "%{http_code}" \ - -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/health") - - if [ "$grafana_status" = "200" ]; then - echo "✅ Grafana: Opérationnel (HTTP $grafana_status)" - else - echo "❌ Grafana: Problème (HTTP $grafana_status)" - fi - - # Test de connectivité Loki - loki_status=$(curl -s -o /dev/null -w "%{http_code}" \ - -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/datasources/proxy/loki/ready" \ - -H "X-Scope-OrgID: anonymous") - - if [ "$loki_status" = "200" ]; then - echo "✅ Loki: Opérationnel (HTTP $loki_status)" - else - echo "❌ Loki: Problème (HTTP $loki_status)" - fi - - echo "" - echo "🎯 Dashboards disponibles:" - curl -s -u "$ADMIN_USER:$ADMIN_PASS" \ - "$GRAFANA_URL/api/search?type=dash-db" | \ - jq -r '.[] | " 📊 " + .title + " (UID: " + .uid + ")"' -} - -# Exécution des tests -echo "🚀 Démarrage des tests..." -echo "" - -# Test de l'API Loki -test_loki_api -echo "" - -# Test des dashboards spécifiques -echo "📊 Test des Dashboards Spécialisés" -echo "==================================" - -test_dashboard "Bitcoin Miner - Détails" "bitcoin-miner-detailed" -test_dashboard "SDK Services - Monitoring" "sdk-services" -test_dashboard "Frontend Services - Monitoring" "frontend-services" -test_dashboard "Bitcoin Services - Monitoring" "bitcoin-services" - -echo "" - -# Test des logs des services -test_service_logs -echo "" - -# Génération du rapport de santé -generate_health_report - -echo "" -echo "🎉 Tests terminés!" -echo "" -echo "📋 Accès aux Dashboards:" -echo " URL: $GRAFANA_URL" -echo " Utilisateur: $ADMIN_USER" -echo " Mot de passe: $ADMIN_PASS" -echo "" -echo "🔗 Liens directs:" -echo " Vue d'ensemble: $GRAFANA_URL/d/lecoffre-overview" -echo " Bitcoin Miner: $GRAFANA_URL/d/bitcoin-miner-detailed" -echo " Backend LeCoffre: $GRAFANA_URL/d/lecoffre-backend" -echo " Services SDK: $GRAFANA_URL/d/sdk-services" -echo " Services Frontend: $GRAFANA_URL/d/frontend-services" -echo " Services Bitcoin: $GRAFANA_URL/d/bitcoin-services" diff --git a/scripts/test-monitoring.sh b/scripts/test-monitoring.sh deleted file mode 100755 index caa2028..0000000 --- a/scripts/test-monitoring.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -# Script de test de connectivité pour le monitoring -set -e - -echo "🔍 Test de connectivité du monitoring..." - -# Test Grafana -echo "Test Grafana..." -if curl -s http://localhost:3000/api/health >/dev/null 2>&1; then - echo "✅ Grafana: OK" -else - echo "❌ Grafana: Non accessible" -fi - -# Test Loki -echo "Test Loki..." -if curl -s http://localhost:3100/ready >/dev/null 2>&1; then - echo "✅ Loki: OK" -else - echo "❌ Loki: Non accessible" -fi - -# Test Promtail -echo "Test Promtail..." -if docker ps --format "table {{.Names}}" | grep -q "promtail"; then - echo "✅ Promtail: En cours d'exécution" -else - echo "❌ Promtail: Arrêté" -fi - -echo "🎉 Tests terminés!" diff --git a/scripts/uninstall-host-nginx.sh b/scripts/uninstall-host-nginx.sh deleted file mode 100755 index 224b1a0..0000000 --- a/scripts/uninstall-host-nginx.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash -set -euo pipefail - -echo "🗑️ DÉSINSTALLATION DU NGINX DU HOST" -echo "===================================" -echo "" -echo "⚠️ ATTENTION: Ce script va désinstaller Nginx du système host" -echo " L'architecture autonome LeCoffre Node utilise son propre Nginx" -echo "" - -# Fonction de logging -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" -} - -# Vérification que le conteneur LeCoffre est en cours d'exécution -if ! docker ps | grep -q "lecoffre-node-master"; then - log "❌ Le conteneur LeCoffre Node n'est pas en cours d'exécution" - log " Démarrez d'abord l'architecture autonome avec:" - log " ./scripts/deploy-autonomous.sh" - exit 1 -fi - -log "✅ Conteneur LeCoffre Node détecté et en cours d'exécution" - -# Test de connectivité du Nginx du conteneur -if curl -f -s http://localhost/status/ > /dev/null; then - log "✅ Nginx du conteneur fonctionne correctement" -else - log "❌ Nginx du conteneur ne répond pas correctement" - log " Vérifiez les logs: docker logs lecoffre-node-master" - exit 1 -fi - -echo "" -echo "🔍 État actuel du Nginx du host:" -systemctl status nginx 2>/dev/null || echo "Nginx non installé ou arrêté" - -echo "" -read -p "Êtes-vous sûr de vouloir désinstaller Nginx du host ? (y/N): " -n 1 -r -echo -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - log "❌ Désinstallation annulée" - exit 0 -fi - -log "🛑 Arrêt des services Nginx du host..." -sudo systemctl stop nginx 2>/dev/null || true -sudo systemctl disable nginx 2>/dev/null || true - -log "🗑️ Désinstallation des paquets Nginx..." -sudo apt-get remove --purge nginx nginx-common nginx-core -y || true -sudo apt-get autoremove -y || true - -log "🧹 Nettoyage des fichiers de configuration..." -sudo rm -rf /etc/nginx/ -sudo rm -rf /var/www/html/ -sudo rm -rf /var/log/nginx/ - -log "🔧 Configuration du firewall pour le port 80..." -# Autoriser le port 80 pour le conteneur -sudo ufw allow 80/tcp 2>/dev/null || true - -log "✅ Désinstallation terminée" -log "" -log "🎉 L'architecture autonome LeCoffre Node est maintenant complètement indépendante!" -log "" -log "📊 Services accessibles via le conteneur:" -log " - Status Page: http://localhost/status/" -log " - Grafana: http://localhost/grafana/" -log " - LeCoffre Front: http://localhost/lecoffre/" -log " - IHM Client: http://localhost/" -log " - API Backend: http://localhost/api/" -log "" -log "🔧 Gestion du conteneur:" -log " - Arrêt: docker stop lecoffre-node-master" -log " - Redémarrage: docker restart lecoffre-node-master" -log " - Logs: docker logs lecoffre-node-master" - diff --git a/scripts/update-healthchecks.sh b/scripts/update-healthchecks.sh deleted file mode 100755 index 49a3239..0000000 --- a/scripts/update-healthchecks.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash - -# Script pour mettre à jour les healthchecks avec des tests de progression - -set -e - -COMPOSE_FILE="/home/debian/4NK_env/lecoffre_node/docker-compose.yml" -BACKUP_FILE="/home/debian/4NK_env/lecoffre_node/docker-compose.yml.backup" - -echo "Mise à jour des healthchecks avec tests de progression..." - -# Créer une sauvegarde -cp "$COMPOSE_FILE" "$BACKUP_FILE" - -# Fonction pour remplacer un healthcheck -replace_healthcheck() { - local service_name="$1" - local old_test="$2" - local new_test="$3" - - echo "Mise à jour du healthcheck pour $service_name..." - - # Utiliser awk pour remplacer le test - awk -v service="$service_name" -v old_test="$old_test" -v new_test="$new_test" ' - BEGIN { in_service = 0; in_healthcheck = 0; replaced = 0 } - /^ [a-zA-Z_]+:/ { - if (in_healthcheck) in_healthcheck = 0 - if ($0 ~ "^ " service ":") in_service = 1 - else in_service = 0 - } - /^ healthcheck:/ { - if (in_service) in_healthcheck = 1 - } - /^ test:/ { - if (in_healthcheck && !replaced) { - print " test: " new_test - replaced = 1 - next - } - } - { print } - ' "$COMPOSE_FILE" > "$COMPOSE_FILE.tmp" && mv "$COMPOSE_FILE.tmp" "$COMPOSE_FILE" -} - -# Mettre à jour Tor -replace_healthcheck "tor" \ - '["CMD", "sh", "-c", "if test -f /var/log/tor/tor.log && test -s /var/log/tor/tor.log; then echo '\''Tor ready: SOCKS proxy listening on port 9050'\''; exit 0; else echo '\''Tor starting: SOCKS proxy not yet ready'\''; exit 1; fi"]' \ - '["CMD", "sh", "-c", "if test -f /var/log/tor/tor.log && test -s /var/log/tor/tor.log; then bootstrap_log=\$(tail -20 /var/log/tor/tor.log | grep '\''Bootstrapped'\'' | tail -1); if echo \"\$bootstrap_log\" | grep -q '\''100%'\''; then echo '\''Tor ready: Bootstrap complete (100%)'\''; exit 0; else progress=\$(echo \"\$bootstrap_log\" | grep -o '\''[0-9]\\\\+%'\'' | tail -1 || echo '\''0%'\''); echo \"Tor bootstrapping: \$progress\"; exit 1; fi; else echo '\''Tor starting: Bootstrap not yet started'\''; exit 1; fi"]' - -# Mettre à jour Bitcoin -replace_healthcheck "bitcoin" \ - '["CMD", "sh", "-c", "if bitcoin-cli -conf=/etc/bitcoin/bitcoin.conf getblockchaininfo > /dev/null 2>&1; then echo '\''Bitcoin ready: RPC responding'\''; exit 0; else echo '\''Bitcoin starting: RPC not ready'\''; exit 1; fi"]' \ - '["CMD", "sh", "-c", "info=\$(bitcoin-cli -conf=/etc/bitcoin/bitcoin.conf getblockchaininfo 2>/dev/null || echo '\''{}'\''); blocks=\$(echo \"\$info\" | jq -r '\''.blocks // 0'\''); headers=\$(echo \"\$info\" | jq -r '\''.headers // 0'\''); ibd=\$(echo \"\$info\" | jq -r '\''.initialblockdownload // false'\''); if [ \"\$ibd\" = \"false\" ] || [ \"\$blocks\" -eq \"\$headers\" ]; then echo \"Bitcoin ready: Synced (\$blocks blocks)\"; exit 0; else remaining=\$((headers - blocks)); progress=\$((blocks * 100 / headers)); echo \"Bitcoin IBD: \$blocks/\$headers (\$remaining remaining) - \$progress%\"; exit 1; fi"]' - -# Mettre à jour BlindBit -replace_healthcheck "blindbit" \ - '["CMD", "sh", "-c", "if wget -q --spider http://localhost:8000/tweaks/1; then echo '\''BlindBit ready: Oracle service responding'\''; exit 0; else echo '\''BlindBit starting: Oracle service not yet ready'\''; exit 1; fi"]' \ - '["CMD", "sh", "-c", "scan_logs=\$(tail -10 /var/log/blindbit/blindbit.log 2>/dev/null | grep -E \"(scanning|scan|blocks|tweaks)\" | tail -1 || echo \"\"); if [ -n \"\$scan_logs\" ]; then echo \"BlindBit scanning: \$scan_logs\"; exit 1; else if wget -q --spider http://localhost:8000/tweaks/1; then echo '\''BlindBit ready: Oracle service responding'\''; exit 0; else echo '\''BlindBit starting: Oracle service not yet ready'\''; exit 1; fi; fi"]' - -# Mettre à jour SDK Relay -replace_healthcheck "sdk_relay" \ - '["CMD", "sh", "-c", "if curl -f http://localhost:8091/ >/dev/null 2>&1; then echo '\''SDK Relay ready: WebSocket server responding'\''; exit 0; else echo '\''SDK Relay IBD: Waiting for Bitcoin sync to complete'\''; exit 1; fi"]' \ - '["CMD", "sh", "-c", "relay_logs=\$(tail -10 /var/log/sdk_relay/sdk_relay.log 2>/dev/null | grep -E \"(IBD|blocks|headers|waiting|scanning)\" | tail -1 || echo \"\"); if [ -n \"\$relay_logs\" ]; then echo \"SDK Relay sync: \$relay_logs\"; exit 1; else if curl -f http://localhost:8091/ >/dev/null 2>&1; then echo '\''SDK Relay ready: WebSocket server responding'\''; exit 0; else echo '\''SDK Relay starting: WebSocket server not yet ready'\''; exit 1; fi; fi"]' - -echo "Healthchecks mis à jour avec succès!" -echo "Sauvegarde créée: $BACKUP_FILE" diff --git a/scripts/update-images.sh b/scripts/update-images.sh deleted file mode 100755 index 72c736c..0000000 --- a/scripts/update-images.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# Script de mise à jour des images Docker sans perdre les données -# Sauvegarde automatique avant mise à jour - -set -e - -# Couleurs pour l'affichage -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -echo -e "${BLUE}========================================${NC}" -echo -e "${BLUE} LeCoffre Node - Update Images${NC}" -echo -e "${BLUE}========================================${NC}" -echo - -# Créer une sauvegarde automatique -echo -e "${YELLOW}Creating automatic backup before update...${NC}" -./scripts/backup-data.sh - -echo -echo -e "${YELLOW}Updating Docker images...${NC}" - -# Mettre à jour les images -docker compose --env-file .env.master pull - -echo -e "${GREEN}✅ Images updated successfully!${NC}" -echo -echo -e "${BLUE}To apply the updates:${NC}" -echo -e "${YELLOW} ./scripts/start.sh${NC}" -echo -echo -e "${BLUE}To rollback if needed:${NC}" -echo -e "${YELLOW} ./scripts/restore-data.sh ${NC}" -echo diff --git a/scripts/validate-deployment.sh b/scripts/validate-deployment.sh deleted file mode 100755 index 92e209e..0000000 --- a/scripts/validate-deployment.sh +++ /dev/null @@ -1,223 +0,0 @@ -#!/bin/bash -# Script de validation complète du déploiement LeCoffre Node -# Vérifie tous les services, volumes, et configurations - -set -e - -# Couleurs pour l'affichage -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -CYAN='\033[0;36m' -NC='\033[0m' # No Color - -# Compteurs -TOTAL_CHECKS=0 -PASSED_CHECKS=0 -FAILED_CHECKS=0 - -# Fonction pour afficher un message avec timestamp -print_message() { - echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1" -} - -# Fonction pour vérifier un service -check_service() { - local service_name="$1" - local description="$2" - local url="$3" - local expected_codes_csv="${4:-200}" - - TOTAL_CHECKS=$((TOTAL_CHECKS + 1)) - - if docker ps --format '{{.Names}}' | grep -q "^${service_name}$"; then - local status=$(docker inspect --format='{{.State.Health.Status}}' "$service_name" 2>/dev/null || echo "no-healthcheck") - local running=$(docker inspect --format='{{.State.Running}}' "$service_name" 2>/dev/null || echo "false") - - if [ "$running" = "true" ]; then - if [ -n "$url" ]; then - local response=$(curl -s -o /dev/null -w '%{http_code}' "$url" 2>/dev/null || echo "000") - # Support multiple acceptable codes, comma-separated - local ok=false - IFS=',' read -r -a expected_array <<< "$expected_codes_csv" - for code in "${expected_array[@]}"; do - if [ "$response" = "$code" ]; then ok=true; break; fi - done - # If HTTP unreachable from host but container is healthy, accept as running for known cases - if [ "$response" = "000" ] && [ "$status" = "healthy" ]; then - echo -e " ${GREEN}✓${NC} $description: Running (container healthy; HTTP check not reachable from host)" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - elif [ "$ok" = true ]; then - echo -e " ${GREEN}✓${NC} $description: Running and responding (HTTP $response)" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - else - echo -e " ${YELLOW}⚠${NC} $description: Running but not responding (HTTP $response)" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi - else - echo -e " ${GREEN}✓${NC} $description: Running" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - fi - else - echo -e " ${RED}✗${NC} $description: Not running" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi - else - echo -e " ${RED}✗${NC} $description: Container not found" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi -} - -# Fonction pour vérifier un volume -check_volume() { - local volume_name="$1" - local description="$2" - - TOTAL_CHECKS=$((TOTAL_CHECKS + 1)) - - if docker volume inspect "$volume_name" >/dev/null 2>&1; then - echo -e " ${GREEN}✓${NC} $description: Volume exists" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - else - echo -e " ${RED}✗${NC} $description: Volume not found" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi -} - -echo -e "${BLUE}========================================${NC}" -echo -e "${BLUE} LeCoffre Node - Deployment Validation${NC}" -echo -e "${BLUE}========================================${NC}" -echo - -print_message "Starting deployment validation..." - -# Vérification des volumes -echo -e "${CYAN}=== Volume Validation ===${NC}" -check_volume "4nk_node_bitcoin_data" "Bitcoin Signet Data" -check_volume "4nk_node_blindbit_data" "BlindBit Oracle Data" -check_volume "4nk_node_sdk_data" "SDK Relay Data" -check_volume "4nk_node_sdk_storage_data" "SDK Storage Data" -check_volume "4nk_node_grafana_data" "Grafana Data" -check_volume "4nk_node_loki_data" "Loki Data" -echo - -# Vérification des services -echo -e "${CYAN}=== Service Validation ===${NC}" -check_service "tor-proxy" "Tor Proxy" "" "" -check_service "bitcoin-signet" "Bitcoin Signet" "" "" -check_service "blindbit-oracle" "BlindBit Oracle" "http://localhost:8000/tweaks/1" "200" -check_service "sdk_storage" "SDK Storage" "http://localhost:8081/health" "200" -check_service "sdk_relay" "SDK Relay" "http://localhost:8091/" "200" -check_service "lecoffre-front" "LeCoffre Frontend" "http://localhost:3004/lecoffre/" "200,301,302,307,308" -check_service "ihm_client" "IHM Client" "http://localhost:3003/" "200" -check_service "grafana" "Grafana" "http://localhost:3005/api/health" "200" -check_service "status-api" "Status API" "http://localhost:3006/api" "200" -echo - -# Vérification des URLs publiques -echo -e "${CYAN}=== Public URLs Validation ===${NC}" -TOTAL_CHECKS=$((TOTAL_CHECKS + 4)) - -urls=( - "https://dev4.4nkweb.com/status/:Status Page" - "https://dev4.4nkweb.com/grafana/:Grafana Dashboard" - "https://dev4.4nkweb.com/:Main Site" - "https://dev4.4nkweb.com/lecoffre/:LeCoffre App" -) - -for url_entry in "${urls[@]}"; do - url="${url_entry%%:*}" - name="${url_entry##*:}" - response=$(curl -s -o /dev/null -w '%{http_code}' "$url" 2>/dev/null || echo "000") - if [ "$response" = "200" ]; then - echo -e " ${GREEN}✓${NC} $name: Accessible (HTTP $response)" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - else - echo -e " ${YELLOW}⚠${NC} $name: Not accessible (HTTP $response)" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi -done -echo - -# Vérification des WebSockets - echo -e "${CYAN}=== WebSocket Validation ===${NC}" -TOTAL_CHECKS=$((TOTAL_CHECKS + 2)) - -ws_urls=( - "wss://dev3.4nkweb.com/ws/:Bootstrap Relay" - "wss://dev3.4nkweb.com/ws/:Signer Service" -) - -for ws_entry in "${ws_urls[@]}"; do - ws_url="${ws_entry%%:*}" - ws_name="${ws_entry##*:}" - ws_test=$(timeout 3 wscat -c "$ws_url" --no-color 2>/dev/null && echo "connected" || echo "failed") - if [ "$ws_test" = "connected" ]; then - echo -e " ${GREEN}✓${NC} $ws_name: Connected" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - else - echo -e " ${YELLOW}⚠${NC} $ws_name: Not connected" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi -done -echo - -# Vérification des scripts -echo -e "${CYAN}=== Scripts Validation ===${NC}" -scripts=( - "start.sh:Main startup script" - "backup-data.sh:Data backup script" - "restore-data.sh:Data restore script" - "update-images.sh:Image update script" - "collect-logs.sh:Log collection script" - "deploy-master.sh:Master deployment script" -) - -for script_entry in "${scripts[@]}"; do - script_name="${script_entry%%:*}" - script_desc="${script_entry##*:}" - TOTAL_CHECKS=$((TOTAL_CHECKS + 1)) - - if [ -f "./scripts/$script_name" ] && [ -x "./scripts/$script_name" ]; then - echo -e " ${GREEN}✓${NC} $script_desc: Available and executable" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) - else - echo -e " ${RED}✗${NC} $script_desc: Missing or not executable" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) - fi -done -echo - -# Frontend environment sanity check -echo -e "${CYAN}=== Frontend Env Validation ===${NC}" -TOTAL_CHECKS=$((TOTAL_CHECKS + 2)) -if docker exec lecoffre-front sh -lc 'test -n "$NEXT_PUBLIC_4NK_URL"'; then - echo -e " ${GREEN}✓${NC} NEXT_PUBLIC_4NK_URL présent dans le conteneur front" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) -else - echo -e " ${YELLOW}⚠${NC} NEXT_PUBLIC_4NK_URL manquant dans le conteneur front" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) -fi -if docker exec lecoffre-front sh -lc 'test -n "$NEXT_PUBLIC_4NK_IFRAME_URL"'; then - echo -e " ${GREEN}✓${NC} NEXT_PUBLIC_4NK_IFRAME_URL présent dans le conteneur front" - PASSED_CHECKS=$((PASSED_CHECKS + 1)) -else - echo -e " ${YELLOW}⚠${NC} NEXT_PUBLIC_4NK_IFRAME_URL manquant dans le conteneur front" - FAILED_CHECKS=$((FAILED_CHECKS + 1)) -fi -echo - -# Résumé final -echo -e "${CYAN}=== Validation Summary ===${NC}" -echo -e "Total checks: $TOTAL_CHECKS" -echo -e "Passed: ${GREEN}$PASSED_CHECKS${NC}" -echo -e "Failed: ${RED}$FAILED_CHECKS${NC}" - -if [ $FAILED_CHECKS -eq 0 ]; then - echo -e "${GREEN}🎉 All validations passed! Deployment is healthy.${NC}" - exit 0 -else - echo -e "${YELLOW}⚠️ Some validations failed. Please check the issues above.${NC}" - exit 1 -fi diff --git a/scripts/verify_mining_fix.sh b/scripts/verify_mining_fix.sh deleted file mode 100755 index ae98d59..0000000 --- a/scripts/verify_mining_fix.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -# Script de vérification des corrections du minage -# Vérifie que l'adresse TSP invalide a été corrigée - -echo "🔍 VÉRIFICATION DES CORRECTIONS DU MINAGE" -echo "" - -# Vérification de l'adresse dans le fichier .env -echo "1. Vérification de l'adresse dans miner/.env:" -RELAY_ADDRESS=$(grep "RELAY_ADDRESS=" lecoffre_node/miner/.env | cut -d'=' -f2) -echo " Adresse actuelle: $RELAY_ADDRESS" - -if [[ "$RELAY_ADDRESS" == *"tsp1qqfzxxz9fht9w8pg9q8z0zseynt2prapktyx4eylm4jlwg5mukqg95qnmm2va956rhggul4vspjda368nlzvufahx70n67z66a2vgs5lspytmuvty"* ]]; then - echo " ❌ ERREUR: Adresse TSP invalide encore présente !" - exit 1 -elif [[ "$RELAY_ADDRESS" == *"tb1p"* ]]; then - echo " ✅ OK: Adresse Bitcoin valide (bech32m)" -else - echo " ⚠️ ATTENTION: Adresse non reconnue" -fi - -# Vérification de l'environnement du conteneur -echo "" -echo "2. Vérification de l'environnement du conteneur:" -if docker ps | grep -q signet_miner; then - CONTAINER_ADDRESS=$(docker exec signet_miner env | grep RELAY_ADDRESS | cut -d'=' -f2) - echo " Adresse dans le conteneur: $CONTAINER_ADDRESS" - - if [[ "$CONTAINER_ADDRESS" == "$RELAY_ADDRESS" ]]; then - echo " ✅ OK: Adresses synchronisées" - else - echo " ❌ ERREUR: Adresses non synchronisées !" - exit 1 - fi -else - echo " ⚠️ ATTENTION: Conteneur signet_miner non démarré" -fi - -# Vérification des logs du minage -echo "" -echo "3. Vérification des logs du minage:" -if docker ps | grep -q signet_miner; then - if docker logs signet_miner --tail 5 | grep -q "ERROR.*Invalid Bitcoin address.*tsp1"; then - echo " ❌ ERREUR: Erreur d'adresse TSP dans les logs !" - exit 1 - else - echo " ✅ OK: Aucune erreur d'adresse TSP" - fi -else - echo " ⚠️ ATTENTION: Impossible de vérifier les logs" -fi - -echo "" -echo "✅ VÉRIFICATION TERMINÉE - CORRECTIONS APPLIQUÉES"