
- Mise à jour de l'API pour charger les fichiers .env dans l'ordre: .env.secrets -> .env -> .env.auto -> .env.post - Ajout du script generate_variables.sh pour générer automatiquement les variables Docker - Création des fichiers .env.auto et .env.post pour le templating complet - Mise à jour de la documentation pour refléter le nouvel ordre de chargement - Génération automatique du docker-compose.yml avec templates des services - Support complet des variables emboîtées entre les fichiers d'environnement
162 lines
6.0 KiB
Bash
Executable File
162 lines
6.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.secrets" ".env" ".env.auto" ".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
|
|
|
|
rm -rf .env.auto docker-compose.yml
|
|
|
|
echo "
|
|
services:
|
|
|
|
" >> docker-compose.yml
|
|
|
|
# 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=\$ROOT_URL_INTERNAL\\\$${VARIABLE}_DOCKER_NAME:\$${VARIABLE}_DOCKER_PORT"
|
|
echo "${VARIABLE}_URL_EXTERNAL=\$ROOT_URL\$${VARIABLE}_URL_ROUTE"
|
|
echo "${VARIABLE}_URL_WS=\$ROOT_URL_WS_INTERNAL\\\$${VARIABLE}_DOCKER_PORT"
|
|
echo "${VARIABLE}_URL_WS_EXTERNAL=\$ROOT_URL_WS\ws"
|
|
echo ""
|
|
|
|
echo "${VARIABLE}_HEALTHCHECK=\$lecoffre-front_CONFS_DIR/healthcheck_\$${VARIABLE}.sh"
|
|
echo "${VARIABLE}_DOCKER_SERVICE=\"
|
|
\$${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\\\", \\\"\$${VARIABLE}_HEALTHCHECK\\\"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 50
|
|
restart: unless-stopped\""
|
|
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\\\", \\\"\$${VARIABLE}_HEALTHCHECK\\\"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 50
|
|
restart: unless-stopped\"" >> docker-compose.yml
|
|
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 "
|
|
networks:
|
|
btcnet:
|
|
name: 4nk_node_btcnet
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: 172.20.0.0/16" >> docker-compose.yml |