Stocker les enregistrements des caméras en object storage
Besoin initial
Initialement, je m’étais orienté vers l’acquisition d’un NAS type Synology que j’ai pu utiliser en milieu professionnel.
J’ai eu plusieurs freins :
- La flambée des prix des NAS rackable en 1U ou 2U m’ont freiné dans mon élan.
- Finalement peu de besoin à part du stockage de caméras, donc un investissement mal rentabilisé.
- Je cherche à optimiser la conso électrique de mon installation.
- En cas de cambriolage, les personnes peuvent embarquer les disques, il fallait de toute façon coupler besoin d’une solution externe.
- Possibilité de mixer les marques et modèles de camera mais de tout stocker au même endroit.
J’ai donc commencé à regarder vers du stockage cloud privé sans passer par des clients du fournisseur me laissant la possibilité de changer facilement d’hébergeur sans dépendre d’une solution.
Comprendre l’intérêt et les coûts de l’Object Storage
C’est un service de stockage d’objets compatible S3 (protocole initialement développé par Amazon pour AWS) avec une redondance des données (en général dupliqué 3 fois).
Pas d’OS, de serveurs à maintenir, ce sont des espaces de stockage accessibles via API
La facturation demande un gymnastique cérébrale et n’est pas adapté à tous les besoins :
- L’envoie de données est gratuite
- Le stockage est payant à l’heure
- Le téléchargement des données est payant selon le volume de données téléchargé
Il y a deux variantes : chaud (accessible de suite) froid (archivée non dispo immédiatement) dans le jardon des lignes de commandes chaud = standard, froid = glacier.
Ex: chez Scaleway en stockage : 1 To / mois ~ 10 € par mois en chaud et seulement 2 € en froid.
Un bucket S3 = un espace de stockage dans lequel vous pouvez enregistrer des fichiers
Chaque bucket S3 possède également un cycle de vie : gestion de la durée du stockage chaud, froid et de la purge des objets.
Il est même possible d’activer le versionnement et de conserver plusieurs versions d’un objet portant le même nom (attention à la facture)
Pré-Requis
OS Linux
Caméra supportant FTP (si les vôtres sont plus élaborées, passez directement à l’enregistrement sur un bucket monté sur un répertoire)
Une bonne bande passante
Principe de fonctionnement
Dans cet exemple, je dissocie le serveur FTP + S3 de mon Raspbery Pi supportant Home Assistant. Si HA est en rade, le système d’enregistrement va continuer de fonctionner.
La caméra enregistre via un serveur FTP installé sur un autre Raspberry Pi. Ensuite une tâche planifiée (CRON) va copier les données vers le bucket S3 et purger le rep du FTP.
Sur un Rapsberry Pi 3 sous openSUSE Tumbleweed, j’ai installé VSFTPD comme serveur FTP.
Ensuite, via S3FS (GitHub - s3fs-fuse/s3fs-fuse: FUSE-based file system backed by Amazon S3), il est possible de monter un bucket S3 dans l’arborescence du serveur (à reproduire sur les PCs où vous voulez pouvoir accéder aux données).
Voici un exemple de syntaxe à ajouter dans /etc/fstab où le bucket S3 reolink
est accessible sur mon Pi dans /srv/backup/reolink
:
s3fs#reolink /srv/backup/reolink fuse _netdev,allow_other,use_path_request_style,passwd_file=/root/.passwd-s3fs,url=https://s3.fr-par.scw.cloud/ 0 0
Attention à bien ajouter le lien vers le fichier contenant les identifiants d’accès aux buckets ici stocké dans /root/.passwd-s3fs
Le lien URL change selon votre fournisseur (Scaleway, Amazon, OVH, etc.) et la région (FR, US, etc.)
Ensuite, via CRON, le serveur copie du répertoire du FTP toutes les x minutes vers le repértoire correspondant au bucket S3.
Voici un exemple de syntaxe à ajouter dans /etc/crontab où les fichiers du répertoire FTP entree
est copié vers le point de montage du bucket S3 puis le répertoire du FTP est vidé (couper ne fonctionne pas avec S3FS)
*/15 * * * * root cp -R -u /srv/camvideo/upload/entree/* /srv/backup/reolink/ && rm -R /srv/camvideo/upload/entree/*
Si vous n’êtes pas habitué à CRON, utilisez https://crontab.guru/ pour vous aider à ajuster les fréquences.
A chaque modification du fichier, pensez à redémarrer le service : sudo systemctl restart cron.service
C’est une étape nécessaire car des conflits de droits empêchent VSFTPD d’accepter un bucket S3 dans l’arborescence du serveur FTP (ce qui aurait été plus simple).
Attention, en montage direct, vous ne pouvez consulter que les données chaudes, les froides sont listées mais ne sont pas accessibles sans repasser en chaud au préalable
Si au reboot de votre serveur FTP/S3 le bucket ne s’est pas monté (répertoire vide), il faut ajouter un délai pour laisser le temps à la carte réseau de démarrer (ex 30 secondes).
Exemple, dans /etc/crontab ajoutez la ligne suivante @reboot root /bin/bash -c 'sleep 30 && /bin/mount -a'
Retour d’expérience
Je stocke l’enregistrement de 4 caméras 5M Réolink sur 90 jours (30 jours en chaud puis 60 en froid) dans un unique bucket
Je stocke mes backups journaliers HA complet sur un autre bucket sur 30 jours (7 jours en chaud, 23 jours en froid) pour environ 0.75 à 1.50 € / mois.
Scaleway, pour le moment, intègre 75 GB de données sortant ce qui est largement suffisant pour consulter ponctuellement des enregistrements vidéos en HD sans surcoût.
Si vous possédez déjà une NAS
Sur des NAS, vous avez parfois des outils de backup graphiques pour envoyer directement vos données accessibles depuis le NAS vers des buckets S3 comme HyperBackup pour Synology.
N’hésitez pas à jeter un oeil, il vous suffira de configurer un backup vers un bucket S3 depuis le répertoire de stockage des caméras.
Aller plus loin avec S3
Pour backuper vos instances Home Assistant, sur le même principe, regardez du coté de l’extension RemoteBackup qui copie un backup journalier HA vers un bucket S3 via SCP (pas besoin d’intermédiaire FTP)
Amélioration de la procédure
Utilisation de rsync pour une syntaxe plus élégantes des CRON.
Migrer carrément sur Systemd pour les tâches planifiées.
Si vous avez déjà des serveurs externes et que vous voulez monter votre propre object storage, regardez du coté de minio : https://min.io/