Dossier de Stockage persistant en dehors du container HassOS (docker)

Bonsoir à tous,

Un post à double usage, à la fois un mini tuto pour parvenir à créer ce partage et une petite question car bien que cela marche bien cela ne marche pas dans le cas de modules complémentaires.

Objectifs:

Créer un dossier externe au container Home Assistant pour qu’il ne soit pas intégré dans les backup complet (dans mon cas les enregistrements vidéos et des medias ). Opération toujours faisable avec un backup partiel, mais lors de mon dernier crash le backup partiel ne m’a pas permis de repartir rapidement sur une config opérationnel…Je préfères donc rester sur un backup complet, mais sauvegarder plusieurs giga de média ne m’intéresse pas non plus…

L’idée est donc de créer un dossier hors du docker et de le rendre accessible à HA.

Prérequis :

  • un accès SSH root lien
  • un accès samba/SMB lien ( perso je préfère le faire mais modif dans windows avec un np++)

Mise en garde:

Attention, ce procédé nécessite d’être refait (c’est assez rapide) après chaque update du core et peut entrainer un redémarrage en mode sans échec si les dossiers concernés ne sont pas commenté dans le configuration.yaml avant update.

Mon problème

Le dossier marche bien, il est bien accessible via les script, j’arrive à y enregistrer mes fichiers / vidéos, j’arrive à y accéder via script, via les médias, mais je n’arrive pas à y accéder à partir des autres modules (VSCode / RClone backup / …) Et c’est là que j’ai besoin d’aide … Alors toutes idée est la bienvenue :slight_smile:

Tuto Procédure

01 - Identification du container
  • Se connecter en SSH en root ( utiliser putty par exemple; ne pas utiliser le module de HA, il ne peut se connecter que dans le container)
  • lister les containers
docker ps -a --no-trunc
  • identifier le container de homeassistant et noter l’id complet (exemple : d77239076f25d3b84088cda27a6397bbc… environ une trentaine de car)
    on le notera CONTAINER_ID pour la suite
02 - Création dossier

HAOS est constitué de plusieurs partitions. Dans mon cas (x86), la partition la plus étendu avec les data est /dev/sda8 et elle est naturellement montée par HA dans le dossier /mnt/data
donc tout dossier que vous y créerez sera sur cette partition et le dossier sera persistant.
Dans mon cas, j’ai créé un dossier de stockage et un sous dossier pour les videos de surveillances

mkdir /mnt/data/external_data
mkdir /mnt/data/external_data/cam_video_records
03 - Copie du fichier de config du container

Perso je préfère bosser sur le fichier dans en environnement plus conviviale que vi, mais si vous maitrisez, pas besoins de faire de copie.
Objectif : copier le fichier config.v2.json dans le dossier share de HA

docker cp /var/lib/docker/containers/CONTAINER_ID/config.v2.json CONTAINER_ID:/share/config.v2.json

(en pensant à remplacer le CONTAINER_ID par votre id homeassistant)

04 - Edition du fichier

Ouvrir le fichier via SMB

\\HOMEASSISTANT\share\config.v2.json
  • perso je commence par faire un backup …
  • j’ouvre via np++ et je fait un JSFormat (ou pretty format, ou autre ) pour une meilleur lisibilité
  • identifier la section « MountPoints »
  • y injecter le montage de notre dossier
"MountPoints": {
	...
	},
	"/external_data": {
		"Source": "/mnt/data/external_data",
		"Destination": "/external_data",
		"RW": true,
		"Name": "",
		"Driver": "",
		"Type": "bind",
		"Propagation": "rprivate",
		"Spec": {
			"Type": "bind",
			"Source": "/mnt/data/external_data",
			"Target": "/external_data"
		},
		"SkipMountpointCreation": false
	}
  • minifier et enregistrer le json
05 - Réinjection du fichier de config

(Via SSH/putty en mode root, en pensant à toujours remplacer le CONTAINER_ID par votre id homeassistant)

  • on commence par arrêter le container
docker stop CONTAINER_ID
  • on le recopie en 2 endroits pour écraser le fichier actif et le fichier persistant qui est réinjecté au reboot
docker cp CONTAINER_ID:/share/config.v2.json /var/lib/docker/containers/CONTAINER_ID/config.v2.json
docker cp CONTAINER_ID:/share/config.v2.json /mnt/data/docker/containers/CONTAINER_ID/config.v2.json
  • et on reboot ( sans reloader le container)
reboot
06 - Réglages configuration.yaml
  • Editez le fichier de configuration de HA ( via le module VSCode par exemple) pour donner droit d’acces au dossier et injecter celui-ci dans les medias :
homeassistant:
  # chemin authorisé pour lecture ecriture :
  allowlist_external_dirs:    
    - /external_data/ # acces au root /mnt/data/external_data 
  #additionnal media directories
  media_dirs:
    external_storage: /external_data/ 
  • redémarrer HA ( après une verif de fichier de config)
  • votre dossier sera accessible par home assistant

Lors d’une mise à jour de HA, le fichier config.v2.json est écrasé et doit être remodifié
Par contre, pas de créa de dossier à refaire car persistant y compris leur contenu.
Attention, au redémarrage, le fichier configuration.yaml pointant un dossier inexistant, le fichier sera considéré comme erroné et le système bootera en mode sans échec.

A - UPDATES option 1
  • avant la mise à jour , commenter les entrées du fichier configuration concernés
homeassistant:
  # chemin authorisé pour lecture ecriture :
  allowlist_external_dirs:    
    #- /external_data/ # acces au root /mnt/data/external_data 
  #additionnal media directories
  media_dirs:
    #external_storage: /external_data/ 
  • enregistrer et lancer l’update
  • après reboot , refaire la manip de modification du fichier config.v2.json via SSH/putty en mode root
  • décommenter le fichier configuration.yaml
  • rebooter
B - UPDATES option 2
  • se connecter en direct à HA (pas via ngnix ou tunnel ou autre car comme le fichier de configuration va merder et que le système va se lancer en mode sans échec, il faut pouvoir voir quand la maj est finie malgré le mode dégradé.
  • lancer l’update en mode brutal
  • attendre la fin de la maj et le redémarrage mode sans échec
  • ouvrir une session SSH en mode root (putty)
  • faire la procédure d’édition et remplacement du fichier de config
  • reboot
C - UPDATES question BONUS

Existe t-il un moyen de modifier / une syntaxe du fichier configuration.yaml pour y intégrer une sorte de try()catch() ?
Cela permettrait de ne pas avoir à ce prendre la tête avec les lignes à commenter ou le risque de démarrage en mode sans échec …

Ma configuration


System Information
version core-2024.8.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.33-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1391
Downloaded Repositories 19
HACS Data ok
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.4
update_channel stable
supervisor_version supervisor-2024.08.0
agent_version 1.6.0
docker_version 26.1.4
disk_total 439.4 GB
disk_used 15.5 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (18.0.0), Cloudflared (5.1.17), Frigate (0.14.0), Home Assistant Google Drive Backup (0.112.1), Let’s Encrypt (5.0.27), MariaDB (2.7.1), Mosquitto broker (6.4.1), Nginx Proxy Manager (1.0.1), Node-RED (18.0.5), Rclone Backup (3.3.1), Samba share (12.3.2), Studio Code Server (5.15.0)
Dashboards
dashboards 3
resources 10
views 30
mode storage
Recorder
oldest_recorder_run 10 août 2024 à 09:53
current_recorder_run 12 août 2024 à 19:33
estimated_db_size 160.98 MiB
database_engine sqlite
database_version 3.45.3
___

Chaque Addon est en fait lui même un conteneur comme le code d’ailleurs c’est la raison pour laquelle tu ne vois pas ton stockage externe dans tes modules

Il doit bien y avoir un moyen de donner cet accès au autres modules / containers car par exemple le module VSCode ou Backup peuvent accéder au containers de home assistant ( c’est le premier exemple qui me vient en tête, mais il y en à forcement d’autre) car les modules travaillent bien ensemble en exposant / partageant leur données. Peut-être une erreur dans la déclaration de mon point de montage qui le verrouille ?

car c’est paramétré ainsi dans les conteneurs dont tu parles il faudrait donc modifier la configuration des conteneurs pour leur donner accès a ton stockage

le meilleur choix dans ce cas c’est de ne pas utiliser HAos

1 « J'aime »

salut,

Les containers n’accèdent pas les uns aux autres, c’est la règle de base.
Par contre, il peuvent partager des fichiers (et des répertoires) et communiquer via la réseau

PS : modifier les images de bases (commande docker cp), ça implique de tout refaire à chaque fois… C’est pas du tout le mécanisme préconisé, il vaut mieux :

  • faire une image dérivée de la base
  • faire du docker compose ou du docker une avec la bonne config

PPS: J’ai du mal à comprendre ce qui justifie le choix d’une solution aussi compliquée (docker + hassos)

1 « J'aime »

Hello,

Merci pour les réponses :slight_smile:
la solution n’est pas docker + OS; je joue juste avec le docker/container de l’OS en installant juste HAos avec l’image fournis sur un pc x86 avec un disk vierge.

Je suis assez jeune sur HA et n’utilise pas forcement la solution la plus simple, surtout pour ce que je veux faire…

Peux tu stp m’en dire plus sur l’image dérivée de la base ( à refaire aussi à chaque update ?) etc ? (je commence tout juste à toucher au docker avec cette expérience de bidouille d’HAos

Par avance merci

en fait si tu veux vraiment bidouiller il ne faut pas utiliser HAos tout simplement et partir sur la version core de HA sous docker, c’est mon choix

Bonjour

Petite question, comment gères tu les sauvegardes de HA
Tu sauvegardes le /config par une solution type rsync ou tu as une autre solution

Curiosité, pour l’instant je suis sous Proxmox avec une VM HAOS depuis que j’ai migré de jeedom, mais j’utilisais docker depuis des années et j’aimerai bien retourner vers cette solution.
J’ai un HA en test, toutes les config sont ok, mais les solutions de backup restent en suspend

Merci pour ta réponse

J’ai le backup dans HA qui vas backuper sur mon nas
Et je backup les volumes de mes conteneurs avec un simple tar vu le peu de data

c’est ça qui a du m’echapper, comme dans la version container docker on a pas la possibilité de créer les « Stockage » je n’ai pas encore trouvé la solution alternative, j’ai monté les dossiers /mnt dans mon docker-compose, je vois bien mes dossiers media mais pour les sauvegardes j’ai du louper quelque chose.

Je vais arrêter de polluer ce sujet, si je ne trouve pas j’ouvrirai un sujet dédié

Tu as un module dans HACS pour faire les backup

Mais avec la version core c’est à toi de gérer le backup aussi
A partir du moment où tu fais un backup de tes volumes tu as tout ce dont tu as besoin

1 « J'aime »

J’ai quand même l’impression que ma soluce bien que pas simple est qd même moins compliquée pour le moment, je ne suis pas encore trop calé en docker etc … et gérer ma maison sur un truc que je ne maitrise pas me stresse un peu.

Passer en docker veux dire ce refaire des container manuel à chaque update ?
Cela le milite pas les module d’extensions ?

Sinon, pour revenir à la question initiale , une idée pour partager ce dossier ? le monter dans un dossier de HA pour y accéder comme un sous dossier ? mais ne risque t-il pas de passer dans les backup etc ?

Quand on choisi la version docker ça demande un minimum de connaissances en docker et en système c’est 100% tout a faire , si tu es débutant je ne te le conseille pas du tout

1 « J'aime »

Une petite question (logique) docker du coup par rapport à ma demande initiale :
HAos crée don cun container qui a toujour la même ID et si je modifie (le config.v2.json) , c’est persistant à chaque reboot … par contre si je fais la même chose sur le config.v2.json du Rclone_backup par exemple la modif est perdu à chaque redémarrage du module complémentaire (et d’ailleur l’id du container change systèmatiquement)

une id sur la bonne locatilation du config à modifier et ou la manip à faire pour que la manip soit persistante ?

Je sais pas ce que tu veux bricoler et surtout pourquoi faire
Mais je ne pense pas que ça soit dans la ligne de nabu casa tu risques au pire de casser quelque chose

Je cherche juste à sauvegarder mes vidéos de surveillance dans des dossiers isolés non contenu dans la sauvegarde sinon c’est un enfer le backup

Tu utilises quoi pour l’enregistrement des vidéos?

pour le moment le flux rtsp mais je suis bien tenté par frigate, mais pour cela je dois les ignorer ds le backup

Bonsoir,
Je trouve toujours pas ;o(, personne n’a de pistes ?
Petite question docker/container :
pour quoi entre un « docker ps -a --no-trunc » en putty (mode root) ou dans l’addons terminal je ne trouve pas les même id pour un même container ? (HA a bien le même)

Avec HAos pas possible