4NK_vault/storage/dev/generate_variables.sh
4NK Dev 4834c40503 ci: docker_tag=dev-test
Séparation des scripts de génération et amélioration de l'architecture

- Séparé generate_grafana_dashboards.sh en 3 scripts distincts :
  * generate_grafana_dashboards.sh (dashboards uniquement)
  * generate_promtail_config.sh (configuration Promtail)
  * generate_logrotate_configs.sh (configurations Logrotate)

- Supprimé generate_docker_compose.sh et generate_docker_variables.sh
- Centralisé la génération des variables dans generate_variables.sh
- Mis à jour generate.sh pour une architecture en 5 étapes
- Corrigé les chemins de sortie et les références de variables
- Ajouté la gestion d'erreurs pour les fichiers .env problématiques
- Généré toutes les configurations Nginx, Grafana, Promtail et Logrotate
- Amélioré la modularité et la maintenabilité du code
2025-10-03 17:13:19 +00:00

148 lines
5.0 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")
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
# Supprimer les fichiers de sortie existants (remplacer complètement)
rm -f .env.auto docker-compose.yml.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 ""
echo "${VARIABLE}_DOCKER_NAME=\$${VARIABLE}"
echo "${VARIABLE}_CONFS_DIR=\$DOCKER_GLOBAL/confs/\$${VARIABLE}"
echo "${VARIABLE}_LOGS_DIR=\$DOCKER_GLOBAL/logs/\$${VARIABLE}"
echo "${VARIABLE}_RUNS_DIR=\$DOCKER_GLOBAL/runs/\$${VARIABLE}"
echo "${VARIABLE}_DATAS_DIR=\$DOCKER_GLOBAL/datas/\$${VARIABLE}"
echo "${VARIABLE}_BACKUPS_DIR=\$DOCKER_GLOBAL/backups/\$${VARIABLE}"
echo "${VARIABLE}_SCRIPTS_DIR=\$DOCKER_GLOBAL/scripts/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_WORKING_DIR=/home/\$${VARIABLE}"
echo ""
echo "${VARIABLE}_DOCKER_CONFS_DIR=\$DOCKER_GLOBAL/confs/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_LOGS_DIR=\$DOCKER_GLOBAL/logs/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_RUNS_DIR=\$DOCKER_GLOBAL/runs/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_DATAS_DIR=\$DOCKER_GLOBAL/datas/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_BACKUPS_DIR=\$DOCKER_GLOBAL/backups/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_SCRIPTS_DIR=\$DOCKER_GLOBAL/scripts/\$${VARIABLE}"
echo "${VARIABLE}_DOCKER_WORKING_DIR=/home/\$${VARIABLE}"
echo ""
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 \\\"\$@\\\"\""
echo "${VARIABLE}_URL_ROUTE=/\$${VARIABLE}"
echo "${VARIABLE}_URL=http://\\\$${VARIABLE}_DOCKER_NAME:\$${VARIABLE}_DOCKER_PORT"
echo "${VARIABLE}_URL_EXTERNAL=https://\$HOST\$${VARIABLE}_URL_ROUTE"
echo "${VARIABLE}_URL_WS=ws://\\\$${VARIABLE}_DOCKER_PORT"
echo "${VARIABLE}_URL_WS_EXTERNAL=wss://\$HOST\ws"
echo ""
echo "
\$${VARIABLE}_DOCKER_NAME:
image: \$${VARIABLE}_DOCKER_IMAGE
container_name: \$${VARIABLE}_DOCKER_NAME
working_dir: /\$${VARIABLE}_DOCKER_NAME
ports:
- \"0.0.0.0:\$${VARIABLE}_EXTERNAL_PORT\"
- \"0.0.0.0:\$${VARIABLE}_PORT\"
- \"0.0.0.0:\$${VARIABLE}_PORT2\"
- \"0.0.0.0:\$${VARIABLE}_PORT3\"
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\"" >> docker-compose.yml.auto
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
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
# docker-compose.yml.auto reste dans le répertoire courant