4NK_vault/templates/dev/generate_variables.sh
4NK Dev ecc5061885 ci: docker_tag=dev-test
- Ajout de la génération dynamique des ports pour Nginx dans docker-compose.yml.auto
- Nginx a maintenant accès à tous les ports de tous les services pour le routage
- Correction de la génération de la variable HOST dans generate_variables.sh
- Amélioration du nettoyage des ports vides dans docker-compose.yml.auto
- Génération automatique de toutes les configurations Nginx (upstreams, internes, HTTPS)
- Nginx traité comme un module dans _4NK_modules/nginx/
- Tous les ports de tous les services ajoutés aux configurations Nginx
- Correction des chemins relatifs dans les scripts de génération
- Système de templates complètement fonctionnel avec remplacement des variables
2025-10-05 22:54:38 +00:00

211 lines
8.9 KiB
Bash
Executable File

#!/bin/bash
# Script pour générer les variables Docker pour toutes les composantes
# Fonction pour charger les fichiers d'environnement dans l'ordre
load_env_files() {
local env_files=(".env.secrets" ".env" ".env.post")
for env_file in "${env_files[@]}"; do
if [ -f "$env_file" ]; then
echo "Chargement de $env_file..."
# Charger en ignorant les erreurs de syntaxe
set -e
source "$env_file" 2>/dev/null || true
set +e
else
echo "Fichier $env_file non trouvé, ignoré."
fi
done
}
# Charger les variables d'environnement dans l'ordre
load_env_files
# 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 docker-compose.yml.auto
# Générer les variables de base
echo "# ====== BASE VARIABLES ======" >> .env.auto
echo "HOST=$HOST" >> .env.auto
echo "" >> .env.auto
echo "
services:
" >> docker-compose.yml.auto
# Liste des variables/composantes
# Fonction pour générer les variables pour une composante
generate_variables() {
local VARIABLE="$1"
echo "# ====== INTERNAL $VARIABLE ======"
echo ""
printf '%s_DOCKER_NAME=%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_CONFS_DIR=$DOCKER_GLOBAL/confs/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_LOGS_DIR=$DOCKER_GLOBAL/logs/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_RUNS_DIR=$DOCKER_GLOBAL/runs/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DATAS_DIR=$DOCKER_GLOBAL/datas/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_BACKUPS_DIR=$DOCKER_GLOBAL/backups/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_SCRIPTS_DIR=$DOCKER_GLOBAL/scripts/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DOCKER_WORKING_DIR=/home/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
echo ""
printf '%s_DOCKER_CONFS_DIR=$DOCKER_GLOBAL/confs/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DOCKER_LOGS_DIR=$DOCKER_GLOBAL/logs/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DOCKER_RUNS_DIR=$DOCKER_GLOBAL/runs/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DOCKER_DATAS_DIR=$DOCKER_GLOBAL/datas/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DOCKER_BACKUPS_DIR=$DOCKER_GLOBAL/backups/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_DOCKER_SCRIPTS_DIR=$DOCKER_GLOBAL/scripts/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
echo "${VARIABLE}_DOCKER_WORKING_DIR_CREATE=\"id -u \$${VARIABLE} >/dev/null 2>&1 || adduser --disabled-password --gecos '' \$${VARIABLE}; chown -R \$${VARIABLE}:\$${VARIABLE} /home/root/.\$${VARIABLE} || echo 'warn: chown partiel (fichiers bind-mount Windows)'; exec \\\"\$@\\\"\""
printf '%s_DOCKER_PORT=$%s_PORT\n' "$VARIABLE" "$VARIABLE"
printf '%s_URL_ROUTE=/%s\n' "$VARIABLE" "$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]')"
printf '%s_URL=http://$%s_DOCKER_NAME:$%s_DOCKER_PORT\n' "$VARIABLE" "$VARIABLE" "$VARIABLE"
printf '%s_URL_EXTERNAL=https://$HOST$%s_URL_ROUTE\n' "$VARIABLE" "$VARIABLE"
printf '%s_URL_WS=ws://$%s_DOCKER_PORT\n' "$VARIABLE" "$VARIABLE"
printf '%s_URL_WS_EXTERNAL=wss://$HOST/ws\n' "$VARIABLE"
# Générer les ports spécifiques pour Bitcoin
if [ "$VARIABLE" = "BITCOIN" ]; then
echo "BITCOIN_ZMQPBUBHASHBLOCK_PORT=28332"
echo "BITCOIN_ZMQPUBRAWTX_PORT=28333"
echo "BITCOIN_SIGNET_P2P_PORT=38332"
echo "BITCOIN_SIGNET_RPC_PORT=38333"
fi
echo ""
# Construire la section ports dynamiquement
local ports_section=""
# Si c'est Nginx, ajouter tous les ports de tous les services
if [ "$VARIABLE" = "NGINX" ]; then
# Ports propres à Nginx
ports_section=" - \"\$${VARIABLE}_EXTERNAL_PORT:\$${VARIABLE}_EXTERNAL_PORT\""
ports_section="$ports_section\n - \"\$${VARIABLE}_PORT:\$${VARIABLE}_PORT\""
ports_section="$ports_section\n - \"\$${VARIABLE}_PORT2:\$${VARIABLE}_PORT2\""
ports_section="$ports_section\n - \"\$${VARIABLE}_PORT3:\$${VARIABLE}_PORT3\""
# Ajouter tous les ports de tous les autres services
for SERVICE_VAR in "${SERVICES[@]}"; do
if [ "$SERVICE_VAR" != "NGINX" ]; then
ports_section="$ports_section\n - \"\$${SERVICE_VAR}_EXTERNAL_PORT:\$${SERVICE_VAR}_EXTERNAL_PORT\""
ports_section="$ports_section\n - \"\$${SERVICE_VAR}_PORT:\$${SERVICE_VAR}_PORT\""
ports_section="$ports_section\n - \"\$${SERVICE_VAR}_PORT2:\$${SERVICE_VAR}_PORT2\""
ports_section="$ports_section\n - \"\$${SERVICE_VAR}_PORT3:\$${SERVICE_VAR}_PORT3\""
# Ports spécifiques pour Bitcoin
if [ "$SERVICE_VAR" = "BITCOIN" ]; then
ports_section="$ports_section\n - \"\$${SERVICE_VAR}_SIGNET_P2P_PORT:\$${SERVICE_VAR}_SIGNET_P2P_PORT\""
ports_section="$ports_section\n - \"\$${SERVICE_VAR}_SIGNET_RPC_PORT:\$${SERVICE_VAR}_SIGNET_RPC_PORT\""
fi
fi
done
else
# Pour les autres services, ports normaux
ports_section=" - \"\$${VARIABLE}_EXTERNAL_PORT:\$${VARIABLE}_EXTERNAL_PORT\""
ports_section="$ports_section\n - \"\$${VARIABLE}_PORT:\$${VARIABLE}_PORT\""
ports_section="$ports_section\n - \"\$${VARIABLE}_PORT2:\$${VARIABLE}_PORT2\""
ports_section="$ports_section\n - \"\$${VARIABLE}_PORT3:\$${VARIABLE}_PORT3\""
# Ajouter les ports spécifiques pour Bitcoin
if [ "$VARIABLE" = "BITCOIN" ]; then
ports_section="$ports_section\n - \"\$${VARIABLE}_SIGNET_P2P_PORT:\$${VARIABLE}_SIGNET_P2P_PORT\""
ports_section="$ports_section\n - \"\$${VARIABLE}_SIGNET_RPC_PORT:\$${VARIABLE}_SIGNET_RPC_PORT\""
fi
fi
# Générer la section complète du service
cat << EOF >> docker-compose.yml.auto
\$${VARIABLE}_DOCKER_NAME:
image: \$${VARIABLE}_DOCKER_IMAGE
container_name: \$${VARIABLE}_DOCKER_NAME
working_dir: /\$${VARIABLE}_DOCKER_NAME
ports:
$(printf "$ports_section")
volumes:
- \$${VARIABLE}_CONFS_DIR:\$${VARIABLE}_DOCKER_CONFS_DIR
- \$${VARIABLE}_LOGS_DIR:\$${VARIABLE}_DOCKER_LOGS_DIR
- \$${VARIABLE}_RUNS_DIR:\$${VARIABLE}_DOCKER_RUNS_DIR
- \$${VARIABLE}_DATAS_DIR:\$${VARIABLE}_DOCKER_DATAS_DIR
- \$${VARIABLE}_BACKUPS_DIR:\$${VARIABLE}_DOCKER_BACKUPS_DIR
- \$${VARIABLE}_SCRIPTS_DIR:\$${VARIABLE}_DOCKER_SCRIPTS_DIR
networks:
btcnet:
aliases:
- \$${VARIABLE}_DOCKER_NAME
user: root
entrypoint: \>
/bin/sh -c \"\$${VARIABLE}_DOCKER_WORKING_DIR_CREATE\"
healthcheck:
test: [\"CMD\", \"sh\", \"\$LECONFFRE-FRONT_CONFS_DIR/healthcheck_\$${VARIABLE}.sh\"]
interval: 30s
timeout: 10s
retries: 50
restart: unless-stopped
EOF
echo ""
}
function generate_variables_external() {
local VARIABLE="$1"
echo "# ====== EXTERNAL $VARIABLE ======"
echo ""
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 les variables pour toutes les composants
for VARIABLE in "${SERVICES[@]}"; do
generate_variables "$VARIABLE" >> .env.auto
done
# Générer les variables pour toutes les composants 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 "
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 30 --label-enable
networks:
- btcnet
restart: unless-stopped
networks:
btcnet:
name: _4NK_node_btcnet
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
" >> docker-compose.yml.auto