#!/bin/bash # Script de génération des variables d'environnement # Génère uniquement .env.auto set -euo pipefail # 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 # Fonctions de couleur print_error() { echo -e "${RED}❌ ERREUR${NC}: $1" >&2; } print_success() { echo -e "${GREEN}✅ SUCCÈS${NC}: $1"; } print_warning() { echo -e "${YELLOW}⚠️ ATTENTION${NC}: $1"; } print_info() { echo -e "${BLUE}ℹ️ INFO${NC}: $1"; } # Fonction pour charger les variables d'environnement load_env_files() { local env_files=(".env.secrets" ".env" ".env.post") for env_file in "${env_files[@]}"; do if [ -f "$env_file" ]; then print_info "Chargement de $env_file..." # shellcheck source=/dev/null source "$env_file" else print_warning "Fichier $env_file non trouvé" fi done } # Fonction pour générer les variables pour une composante generate_variables() { local VARIABLE="$1" echo "# ====== INTERNAL $VARIABLE =====" echo "${VARIABLE}_DOCKER_NAME=${VARIABLE,,}" echo "${VARIABLE}_DOCKER_IMAGE=${VARIABLE,,}" echo "${VARIABLE}_DOCKER_TAG=latest" echo "${VARIABLE}_PORT=\$${VARIABLE}_PORT" echo "${VARIABLE}_LOGS_DIR=\$LOGS_DIR/\$${VARIABLE}_DOCKER_NAME" echo "${VARIABLE}_CONFS_DIR=\$CONFS_DIR/\$${VARIABLE}_DOCKER_NAME" echo "${VARIABLE}_RUNS_DIR=\$RUNS_DIR/\$${VARIABLE}_DOCKER_NAME" echo "${VARIABLE}_DATAS_DIR=\$DATAS_DIR/\$${VARIABLE}_DOCKER_NAME" echo "${VARIABLE}_BACKUPS_DIR=\$BACKUPS_DIR/\$${VARIABLE}_DOCKER_NAME" echo "${VARIABLE}_DOCKER_CONFS_DIR=/\$${VARIABLE}_DOCKER_NAME/confs" echo "${VARIABLE}_DOCKER_LOGS_DIR=/\$${VARIABLE}_DOCKER_NAME/logs" echo "${VARIABLE}_DOCKER_RUNS_DIR=/\$${VARIABLE}_DOCKER_NAME/runs" echo "${VARIABLE}_DOCKER_DATAS_DIR=/\$${VARIABLE}_DOCKER_NAME/datas" echo "${VARIABLE}_DOCKER_BACKUPS_DIR=/\$${VARIABLE}_DOCKER_NAME/backups" echo "${VARIABLE}_RESTART=unless-stopped" echo "${VARIABLE}_ENV=" echo "${VARIABLE}_COMMAND=" echo "${VARIABLE}_DEPENDS_ON=" echo "" } # Fonction pour générer les variables externes generate_variables_external() { local VARIABLE="$1" echo "# ====== EXTERNAL $VARIABLE =====" echo "${VARIABLE}_HOST=\$HOST" echo "${VARIABLE}_EXTERNAL_PORT=\$${VARIABLE}_EXTERNAL_PORT" echo "${VARIABLE}_URL_ROUTE=/\$${VARIABLE}" echo "${VARIABLE}_URL_EXTERNAL=https://\$${VARIABLE}_HOST:\$${VARIABLE}_EXTERNAL_PORT\$${VARIABLE}_URL_ROUTE" echo "${VARIABLE}_URL_WS_EXTERNAL=wss://\$${VARIABLE}_HOST:\$${VARIABLE}_EXTERNAL_PORT/ws" echo "" } # Générer la variable HOST si elle n'est pas définie if [ -z "$HOST" ]; then HOST="dev4.${DOMAIN}" fi # Supprimer les fichiers de sortie existants (remplacer complètement) rm -f .env.auto # Générer les variables de base echo "# ====== BASE VARIABLES =====" >> .env.auto echo "HOST=$HOST" >> .env.auto echo "" >> .env.auto # Liste des variables/composantes SERVICES=( "REDIS" "POSTGRESQL" "LOKI" "PROMTAIL" "GRAFANA" "NGINX" "TOR" "_4NK_VAULT" "BITCOIN" "BLINDBIT_ORACLE" "SDK_RELAY" "SDK_STORAGE" "IHM_CLIENT" "_4NK_CERTIFICATOR" "_4NK_MINER" "LECOFFRE_FRONT" "_4NK_WEB_STATUS" ) # Générer les variables pour chaque service for VARIABLE in "${SERVICES[@]}"; do generate_variables "$VARIABLE" >> .env.auto done # Services externes SERVICES_EXTERNAL=( "REDIS" "POSTGRESQL" "LOKI" "PROMTAIL" "GRAFANA" "NGINX" "TOR" "_4NK_VAULT" "BITCOIN" "BLINDBIT_ORACLE" "SDK_RELAY" "SDK_STORAGE" "IHM_CLIENT" "_4NK_CERTIFICATOR" "_4NK_MINER" "LECOFFRE_FRONT" "_4NK_WEB_STATUS" ) # Générer les variables externes for VARIABLE in "${SERVICES_EXTERNAL[@]}"; do generate_variables_external "$VARIABLE" >> .env.auto done # Générer les variables pour BOOTSTRAP (correction de l'incohérence BOOSTRAP/BOOTSTRAP) echo "# ====== EXTERNAL BOOTSTRAP (correction) =====" >> .env.auto echo "BOOTSTRAP_URL_ROUTE=/\$BOOTSTRAP" >> .env.auto echo "BOOTSTRAP_URL_EXTERNAL=https://\$BOOTSTRAP_HOST:\$BOOTSTRAP_EXTERNAL_PORT\$BOOTSTRAP_URL_ROUTE" >> .env.auto echo "BOOTSTRAP_URL_WS_EXTERNAL=wss://\$BOOTSTRAP_HOST:\$BOOTSTRAP_EXTERNAL_PORT/ws" >> .env.auto echo "" >> .env.auto echo "✅ Variables d'environnement générées dans .env.auto"