Generer les secrets de la memoire plutot que les inventer
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
This commit is contained in:
66
deploy/historisation/preparer-env.sh
Executable file
66
deploy/historisation/preparer-env.sh
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user