#!/usr/bin/env bash set -euo pipefail # Charge les variables depuis /home/debian/4NK_env/confs/.env si présent ENV_FILE="/home/debian/4NK_env/confs/.env" ROOT_DIR_DEFAULT="/home/debian/4NK_env" safe_source() { # Source un fichier en désactivant nounset pour éviter les erreurs variables non liées local f="$1" if [ -f "$f" ]; then set +u # shellcheck disable=SC1090 . "$f" set -u fi } if [ -f "$ENV_FILE" ]; then set -a safe_source "$ENV_FILE" set +a else echo "[WARN] $ENV_FILE introuvable; tentative de chargement des env//.env" for f in \ /home/debian/4NK_env/env/lecoffre_node/.env \ /home/debian/4NK_env/env/sdk_relay/.env \ /home/debian/4NK_env/env/sdk_storage/.env \ /home/debian/4NK_env/env/ihm_client/.env \ /home/debian/4NK_env/env/lecoffre-front/.env \ /home/debian/4NK_env/env/monitoring/.env; do set -a safe_source "$f" set +a done fi ROOT_DIR="${ROOT_DIR:-$ROOT_DIR_DEFAULT}" ROOT_URL="${ROOT_URL:-https://dev4.4nkweb.com}" BOOTSTRAP_HOST="${BOOTSTRAP_HOST:-dev3.4nkweb.com}" # helper: test presence of all vars have_vars() { for name in "$@"; do eval "val=\${$name-}" if [ -z "${val}" ]; then return 1 fi done return 0 } # 1) bitcoin.conf btc_conf="$ROOT_DIR/confs/bitcoin/bitcoin.conf" if [ -f "$btc_conf" ]; then if have_vars BITCOIN_DATA_DIR BITCOIN_BIND BITCOIN_ZMQPUBRAWTX_PORT BITCOIN_ZMQPBUBHASHBLOCK_PORT BITCOIN_SIGNET_P2P_PORT BITCOIN_SIGNET_RPC_PORT; then sed -i \ -e "s|^datadir=.*$|datadir=${BITCOIN_DATA_DIR}|" \ -e "s|^zmqpubrawtx=.*$|zmqpubrawtx=tcp://${BITCOIN_BIND}:${BITCOIN_ZMQPUBRAWTX_PORT}|" \ -e "s|^zmqpubhashblock=.*$|zmqpubhashblock=tcp://${BITCOIN_BIND}:${BITCOIN_ZMQPBUBHASHBLOCK_PORT}|" \ -e "s|^bind=.*$|bind=${BITCOIN_BIND}:${BITCOIN_SIGNET_P2P_PORT}|" \ -e "s|^rpcbind=.*$|rpcbind=${BITCOIN_BIND}:${BITCOIN_SIGNET_RPC_PORT}|" \ "$btc_conf" echo "[OK] bitcoin.conf mis à jour" else echo "[SKIP] bitcoin.conf (variables manquantes)" fi fi # 2) blindbit.toml bb_conf="$ROOT_DIR/confs/blindbit-oracle/blindbit.toml" if [ -f "$bb_conf" ]; then if have_vars BLINDBIT_PORT BITCOIN_DOCKER_HOST BITCOIN_SIGNET_RPC_PORT BITCOIN_DATA_DIR; then sed -i \ -e "s|^host\s*=.*$|host = \"0.0.0.0:${BLINDBIT_PORT}\"|" \ -e "s|^rpc_endpoint\s*=.*$|rpc_endpoint = \"http://${BITCOIN_DOCKER_HOST}:${BITCOIN_SIGNET_RPC_PORT}\"|" \ -e "s|^cookie_path\s*=.*$|cookie_path = \"${BITCOIN_DATA_DIR}/signet/.cookie\"|" \ "$bb_conf" echo "[OK] blindbit.toml mis à jour" else echo "[SKIP] blindbit.toml (variables manquantes)" fi fi # 3) grafana.ini gf_conf="$ROOT_DIR/confs/grafana/grafana.ini" if [ -f "$gf_conf" ]; then sed -i \ -e "s|^\s*root_url\s*=.*$|root_url = ${ROOT_URL}/grafana/|" \ "$gf_conf" echo "[OK] grafana.ini mis à jour" fi # 4) loki-config.yaml loki_conf="$ROOT_DIR/confs/loki/loki-config.yaml" if [ -f "$loki_conf" ]; then if have_vars LOKI_HTTP_LISTEN_PORT; then sed -i \ -e "s|^\s*http_listen_port:.*$|http_listen_port: ${LOKI_HTTP_LISTEN_PORT}|" \ "$loki_conf" echo "[OK] loki-config.yaml mis à jour" else echo "[SKIP] loki-config.yaml (variables manquantes)" fi fi # 5) promtail.yml pt_conf="$ROOT_DIR/confs/promtail/promtail.yml" if [ -f "$pt_conf" ]; then if have_vars LOKI_DOCKER_HOST LOKI_HTTP_LISTEN_PORT; then sed -i \ -e "s|url: .*|url: http://${LOKI_DOCKER_HOST}:${LOKI_HTTP_LISTEN_PORT}/loki/api/v1/push|" \ "$pt_conf" fi sed -i \ -e "s|/home/debian/4NK_env/|${ROOT_DIR}/|g" \ "$pt_conf" echo "[OK] promtail.yml mis à jour" fi # 6) sdk_relay.conf relay_conf="$ROOT_DIR/confs/relay/sdk_relay.conf" if [ -f "$relay_conf" ]; then if have_vars BITCOIN_DOCKER_HOST BITCOIN_SIGNET_RPC_PORT RELAY_PORT BITCOIN_WALLET_NAME BLINDBIT_DOCKER_NAME BLINDBIT_PORT BITCOIN_BIND BITCOIN_ZMQPBUBHASHBLOCK_PORT BITCOIN_DATA_DIR BOOTSTRAP_HOST; then sed -i \ -e "s|^core_url=.*$|core_url=http://${BITCOIN_DOCKER_HOST}:${BITCOIN_SIGNET_RPC_PORT}|" \ -e "s|^ws_url=.*$|ws_url=0.0.0.0:${RELAY_PORT}|" \ -e "s|^wallet_name=.*$|wallet_name=${BITCOIN_WALLET_NAME}|" \ -e "s|^blindbit_url=.*$|blindbit_url=http://${BLINDBIT_DOCKER_NAME}:${BLINDBIT_PORT}|" \ -e "s|^zmq_url=.*$|zmq_url=tcp://${BITCOIN_BIND}:${BITCOIN_ZMQPBUBHASHBLOCK_PORT}|" \ -e "s|^storage=.*$|storage=https://dev4.4nkweb.com/storage|" \ -e "s|^data_dir=.*$|data_dir=${ROOT_DIR}/data|" \ -e "s|^bitcoin_data_dir=.*$|bitcoin_data_dir=${BITCOIN_DATA_DIR}|" \ -e "s|^bootstrap_url=.*$|bootstrap_url=wss://${BOOTSTRAP_HOST}/ws|" \ "$relay_conf" echo "[OK] sdk_relay.conf mis à jour" else echo "[SKIP] sdk_relay.conf (variables manquantes)" fi fi # 7) env/grafana/.env gf_env="$ROOT_DIR/env/grafana/.env" if [ -f "$gf_env" ]; then sed -i \ -e "s|^GF_SERVER_ROOT_URL=.*$|GF_SERVER_ROOT_URL=${ROOT_URL}/grafana/|" \ "$gf_env" echo "[OK] env grafana mis à jour" fi # 8) env/ihm_client/.env ihm_env="$ROOT_DIR/env/ihm_client/.env" if [ -f "$ihm_env" ]; then sed -i \ -e "s|^NEXT_PUBLIC_4NK_IFRAME_URL=.*$|NEXT_PUBLIC_4NK_IFRAME_URL=${ROOT_URL}/|" \ -e "s|^VITE_JWT_SECRET_KEY=.*$|VITE_JWT_SECRET_KEY=${VITE_JWT_SECRET_KEY:-FAKE-DATA-IA-CHANGE-ME}|" \ -e "s|^VITE_API_BASE_URL=.*$|VITE_API_BASE_URL=${ROOT_URL}/lecoffre/api|" \ -e "s|^VITE_WS_URL=.*$|VITE_WS_URL=wss://${BOOTSTRAP_HOST}/ws/|" \ -e "s|^VITE_SIGNER_URL=.*$|VITE_SIGNER_URL=https://${BOOTSTRAP_HOST}/signer|" \ -e "s|^VITE_BOOTSTRAPURL=.*$|VITE_BOOTSTRAPURL=wss://${BOOTSTRAP_HOST}/ws/|" \ "$ihm_env" # RELAY_URLS nécessite ROOT_HOST; fallback best-effort relay_urls="wss://${BOOTSTRAP_HOST}/ws/" if [ -n "${ROOT_HOST:-}" ]; then relay_urls="wss://${ROOT_HOST}/ws/,${relay_urls}"; fi sed -i -e "s|^RELAY_URLS=.*$|RELAY_URLS=${relay_urls}|" "$ihm_env" echo "[OK] env ihm_client mis à jour" fi # 9) env/lecoffre-front/.env front_env="$ROOT_DIR/env/lecoffre-front/.env" if [ -f "$front_env" ]; then sed -i \ -e "s|^SIGNER_API_KEY=.*$|SIGNER_API_KEY=${VITE_BOOTSTRAPURL:-}|" \ -e "s|^VITE_JWT_SECRET_KEY=.*$|VITE_JWT_SECRET_KEY=${VITE_JWT_SECRET_KEY:-FAKE-DATA-IA-CHANGE-ME}|" \ -e "s|^NEXT_PUBLIC_4NK_URL=.*$|NEXT_PUBLIC_4NK_URL=${IHM_CLIENT_URL:-${ROOT_URL}}|" \ -e "s|^NEXT_PUBLIC_FRONT_APP_HOST=.*$|NEXT_PUBLIC_FRONT_APP_HOST=https://${LECOFFRE_FRONT_URL:-dev4.4nkweb.com}/lecoffre|" \ -e "s|^NEXT_PUBLIC_BACK_API_HOST=.*$|NEXT_PUBLIC_BACK_API_HOST=${LECOFFRE_BACK_URL:-dev3.4nkweb.com}|" \ -e "s|^NEXT_PUBLIC_4NK_IFRAME_URL=.*$|NEXT_PUBLIC_4NK_IFRAME_URL=${ROOT_URL}|" \ -e "s|^NEXT_PUBLIC_API_URL=.*$|NEXT_PUBLIC_API_URL=https://${LECOFFRE_BACK_URL:-dev3.4nkweb.com}/api|" \ -e "s|^NEXT_PUBLIC_DEFAULT_STORAGE_URLS=.*$|NEXT_PUBLIC_DEFAULT_STORAGE_URLS=${ROOT_URL}/storage|" \ "$front_env" echo "[OK] env lecoffre-front mis à jour" fi # 10) env/sdk_storage/.env storage_env="$ROOT_DIR/env/sdk_storage/.env" if [ -f "$storage_env" ]; then sed -i \ -e "s|^DOMAIN=.*$|DOMAIN=${ROOT_HOST:-dev4.4nkweb.com}|" \ -e "s|^STORAGE_URL=.*$|STORAGE_URL=http://${STORAGE_DOCKER_HOST:-sdk_storage}:${STORAGE_PORT:-8080}|" \ -e "s|^STORAGE_PORT=.*$|STORAGE_PORT=${STORAGE_PORT:-8080}|" \ -e "s|^STORAGE_DATA_DIR=.*$|STORAGE_DATA_DIR=${ROOT_DIR}/data/storage|" \ -e "s|^VITE_STORAGE_URL=.*$|VITE_STORAGE_URL=${ROOT_URL}/storage|" \ "$storage_env" echo "[OK] env sdk_storage mis à jour" fi echo "[DONE] Configuration appliquée (best-effort)"