Stocker les enregistrements des caméras en object storage

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/

1 « J'aime »

Merci pour le tuto. Un exemple intéressant d’utilisation du stockage S3!
Pour info, à la place de fuse et de la copie puis rm des fichiers locaux, tu dois pouvoir utiliser rclone https://rclone.org/
C’est le couteau suisse de la copie/synchro/… entre divers types de stockage.
Je m’en sers depuis des années. Pas avec S3, mais, avec les drives divers et variés (google, azure,…).
Ca doit pouvoir simplifier pas mal ton fonctionnement.

1 « J'aime »

Ok merci je vais regarder cela de plus prêt :+1:
Par conte je m’interroge de pouvoir ne pas tout synchroniser car je n’ai que 64 gb de disque sur le pi et finalement illimité sur s3 c’était pour cela que je n’utilisais pas rsync entre le ftp et mon montage s3.

Avec rclone, plein d’options, notamment copy ou move qui permettent de transférer les fichiers de A → B et pas de B → A, pas de la synchro donc…

1 « J'aime »