Question du proprietaire : HA_TOKEN il l a, mais les mots de passe PostgreSQL et InfluxDB, il les invente ? Non — ils se generent. Les deux bases n existent pas encore, c est ce fichier qui decide de leurs identifiants, et personne ne les tape jamais : les conteneurs les lisent dans .env et Home Assistant lit le jeton dans son propre secrets.yaml. preparer-env.sh les tire avec openssl rand, reprend HA_TOKEN du .env a la racine plutot que d en creer un nouveau, pose les droits a 600, et affiche la ligne a recopier dans secrets.yaml. Il refuse d ecraser un .env existant : regenerer les mots de passe d une base deja creee la rendrait inaccessible. Corrige au passage un piege laisse dans l exemple : POSTGRES_PASSWORD et PGPASSWORD etaient deux variables a tenir egales a la main. Le fichier s appelle desormais .env, donc compose l utilise aussi pour la substitution, et le service d historisation reprend le mot de passe par substitution. Un seul secret PostgreSQL desormais. Generateur essaye dans un bac a sable : fichier conforme, refus de regeneration verifie. Fichiers d echange des editeurs ajoutes au gitignore. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
67 lines
2.3 KiB
Bash
Executable File
67 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Génère deploy/historisation/.env avec des secrets ALÉATOIRES.
|
|
#
|
|
# Ces secrets ne viennent de nulle part : les deux bases n'existent pas encore,
|
|
# c'est ce fichier qui décide de leurs identifiants. Il ne faut donc pas les
|
|
# choisir à la main — une phrase inventée est plus courte et plus devinable
|
|
# qu'elle n'en a l'air, et personne ne les tape jamais : les conteneurs les
|
|
# lisent ici, et Home Assistant lit le jeton dans son propre secrets.yaml.
|
|
#
|
|
# Le seul secret qui vient d'ailleurs est HA_TOKEN : c'est le jeton Home
|
|
# Assistant, déjà en service, repris du .env à la racine du dépôt.
|
|
#
|
|
# Usage : bash preparer-env.sh
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
if [ -f .env ]; then
|
|
echo "REFUS : .env existe déjà."
|
|
echo "Le régénérer changerait les mots de passe d'une base déjà créée, qui"
|
|
echo "continuerait d'attendre les anciens. Le supprimer d'abord si c'est"
|
|
echo "vraiment ce que vous voulez — et alors supprimer aussi les volumes."
|
|
exit 1
|
|
fi
|
|
|
|
alea() { openssl rand -hex "$1"; }
|
|
|
|
HA_TOKEN_VAL="$(grep -E '^\s*HA_TOKEN\s*=' ../../.env 2>/dev/null | head -1 | cut -d= -f2- | tr -d ' "'"'" || true)"
|
|
if [ -z "$HA_TOKEN_VAL" ]; then
|
|
echo "HA_TOKEN introuvable dans le .env à la racine du dépôt."
|
|
echo "Le renseigner à la main dans .env après génération."
|
|
HA_TOKEN_VAL="a_remplacer"
|
|
fi
|
|
|
|
PG="$(alea 24)"
|
|
INFLUX_PW="$(alea 16)"
|
|
INFLUX_TOKEN="$(alea 32)"
|
|
|
|
cat > .env <<EOF
|
|
# Généré par preparer-env.sh le $(date '+%d/%m/%Y %H:%M').
|
|
# Ne pas versionner : ce fichier est dans .gitignore.
|
|
|
|
# --- PostgreSQL ---
|
|
# Un seul mot de passe : le service d'historisation le reprend par
|
|
# substitution dans compose.yaml.
|
|
POSTGRES_PASSWORD=$PG
|
|
|
|
# --- InfluxDB ---
|
|
DOCKER_INFLUXDB_INIT_USERNAME=evcs
|
|
DOCKER_INFLUXDB_INIT_PASSWORD=$INFLUX_PW
|
|
# C'est CE jeton que Home Assistant utilisera pour écrire. À recopier dans
|
|
# /mnt/ARCH3/docker/HA/secrets.yaml sous la clé influxdb_token
|
|
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=$INFLUX_TOKEN
|
|
|
|
# --- Home Assistant ---
|
|
# Repris du .env à la racine du dépôt : jeton déjà en service, pas un nouveau.
|
|
HA_TOKEN=$HA_TOKEN_VAL
|
|
EOF
|
|
chmod 600 .env
|
|
|
|
echo "✓ .env généré (droits 600)."
|
|
echo
|
|
echo "À reporter dans /mnt/ARCH3/docker/HA/secrets.yaml :"
|
|
echo
|
|
echo " influxdb_token: \"$INFLUX_TOKEN\""
|
|
echo
|
|
echo "Puis : docker compose up -d"
|