Installation de Frigate dans un LXC Proxmox

Installation de Frigate dans un LXC Proxmox

Aujourd'hui, on va parler d'une des raison qui m'a fait passer de ESXi à Proxmox, que vous avez pu découvrir dans l'article suivant :

Migration de ESXI à Proxmox
Aujourd’hui nous allons parler hyperviseur et virtualisation. Les deux solutions d’hyperviseur populaires sont VMware ESXi et Proxmox VE . Ces 2 plateformes de virtualisation permettent d’exécuter des machines virtuelles ou des conteneurs. Dans le monde professionnel, VMware est le roi de la virtua…

Il s'agit d'un conteneur, Frigate, un NVR (Network Video Recorder) qui possède une IA (Intelligence Artificielle) capable d'identifier les personnes et objets sur des flux vidéos. Cela permet d'améliorer son système de vidéosurveillance et d'éviter de recevoir des alertes intempestives lorsqu'une feuille a bougé ou qu'un nuage passe.

Pour cette analyse, Frigate a besoin de disposer de ressources, ce qu'il est possible de faire avec le CPU, mais ceci est très gourmand. Le développement a donc été réalisé autour du Google Coral, qui a été spécifiquement étudié pour procéder à de l'analyse vidéo. Celui-ci est donné pour être aussi performant que des CPU à 2000€, mais pour seulement 60€ ! Pour ma part, j'ai acheté la version USB d'occasion, celui-ci étant très compliqué à trouver actuellement.

Pour déployer Frigate, nous n'allons pas utiliser Docker directement (je vous entends "quoi un conteneur mais pas de Docker ?") mais un LXC dans Proxmox.
Une petite définition de LXC pour essayer de mieux comprendre ce que c'est :

LXC est l'acronyme de l'anglicisme LinuX Containers, il s'agit d'un système de virtualisation, utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation. Il est utilisé pour faire fonctionner des environnements Linux isolés les uns des autres dans des conteneurs partageant le même noyau. Le conteneur apporte une virtualisation de l'environnement d'exécution (processeur, mémoire vive, réseau, système de fichier…) et non pas de la machine. Pour cette raison, on parle de « conteneur » et non de « machine virtuelle ».

Mais alors Docker, machine virtuelle et LXC sont tous trois de la virtualisation, mais quelles sont leurs différences ?

  • Docker permet de virtualiser des service. Chaque conteneur Docker correspond à un service.
  • Un conteneur LXC est un environnement virtuel qui ne possède pas de partie physique émulée.
  • Une machine virtuelle est une émulation d'une machine physique à laquelle des ressource physique sont attribuées.

Je sens que beaucoup viennent de bondir de leur chaise ! Alors oui, j'ai extrêmement vulgarisé cela. Pour moi, je place les LXC entre un conteneur Docker et une machine virtuelle.

Bon nous avons une explication sur les LXC et nous savons que nous voulons utiliser le conteneur Frigate. On va pouvoir se lancer dans le vif du sujet.
Alors on se connecte à son interface Proxmox pour prendre la direction du stockage et télécharger le Template de notre conteneur, pour lequel nous allons choisir Debian 11 Standard.

Maintenant on va pouvoir créer notre LXC, à l'aide d'un clic droit sur notre serveur, on peut choisir Create CT. Il vous suffit de donner un nom au conteneur et de choisir le mot de passe pour votre utilisateur root du LXC. Pour le reste, rien de spécial, à vous d'ajuster les valeurs en fonction de vos besoins, envies et surtout du hardware.

Attention ! Ne pas cocher "Démarrer après création" à la fin.

Avant le lancement du LXC, nous allons apporter quelques modifications, on commence par ajouter une particularité pour ne pas avoir de souci de SSH sous Debian 11.

Nous allons ensuite modifier le fichier de configuration pour permettre au LXC d'avoir accès au bus USB (adapter le numéro de bus au besoin) et au IGPU (voici un article pour mieux comprendre le IGPU). Pour cela, utilisez la commande suivante en SSH nano /etc/pve/lxc/ID.conf (en indiquant l'ID du conteneur que vous avez choisi).

Voici le contenu de mon fichier de configuration après ajout des dernières lignes.

arch: amd64
cores: 2
features: nesting=1
hostname: frigate
memory: 4096
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=AA:73:AE:CB:75:D9,ip=dhcp,ip6=dhcp,type=veth
ostype: debian
rootfs: local-lvm:vm-100-disk-0,size=16G
swap: 512
onboot: 1
unprivileged: 0
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: c 189:* rwm
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.entry: /dev/bus/usb/002 dev/bus/usb/002 none bind,optional,create=dir
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file

Nous allons en profiter pour ajouter un montage de disque, pour permettre d'avoir la configuration stockée sur le NUC et la sauvegarde des médias sur le NAS Synology où j'ai plus d'espace de stockage.
Sur le NAS, il faut ajouter configurer le dossier partagé en NFS, je vous ai mis une capture d'écran de ma configuration juste en dessous.
Retournons sur Proxmox pour ajouter le stockage NFS dans le datacenter, où il vous faudra renseigner un nom pour le montage, l'adresse IP du serveur, le chemin d'accès au dossier (il est possible de rajouter des sous dossiers) et en contenu choisir Conteneur.

Maintenant, direction le LXC pour rajouter le Point de montage comme Ressources. Il vous faudra sélectionner le Stockage monté précédemment, dans mon cas NVR, et choisir la taille du disque ainsi que le chemin de montage sur le LXC. Vous pourrez vérifier le bon montage une fois le conteneur LXC démarré.

Le moment de démarrer le conteneur LXC est enfin arrivé ! Cela peut être long au premier démarrage, il faut avoir un peu de patience.

Comme sur chaque nouvelle installation, je vous recommande de commencer par mettre à jour le système avec les commandes apt-get update && apt-get upgrade.

Frigate est disponible en tant que conteneur Docker, nous allons donc installer Docker et pour cela je vous renvoie vers l'article qui en parle.

Suite à cela, nous allons installer Docker compose ou Portainer, dans mon cas j'utilise Portainer.

On va pouvoir vraiment attaquer Frigate avec la création de sa stack. Voici le contenu, à adapter selon vos besoins.

version: "3.6"
services:
  frigate:
      container_name: frigate
      restart: unless-stopped
      privileged: true
      image: blakeblackshear/frigate:stable-amd64
      volumes:
        - /dev/bus/usb:/dev/bus/usb
        - /etc/localtime:/etc/localtime:ro
        - volume-frigate-config:/config
        - /frigate/media:/media/frigate
#        - /ruser/0:/tmp/cache
#        - <path_to_directory_for_recordings>:/media/frigate/recordings
        - type: tmpfs # 1GB of memory, reduces SSD/SD Card wear
          target: /tmp/cache
          tmpfs:
            size: 1000000000
      ports:
        - 5000:5000
        - 1935:1935 # RTMP feeds
      healthcheck:
        test: ["CMD", "wget" , "-q", "-O-", "http://localhost:5000"]
        interval: 30s
        timeout: 10s
        retries: 5
        start_period: 3mfr

volumes:
  volume-frigate-config:
      driver: local

Le conteneur ne devrait pas réussir à démarrer car il manque le fichier de configuration. Dans le volume config, créer un fichier config.yml.

Voici la page de la documentation officielle pour vous aider à remplir ce fichier de configuration, et vous trouverez ci-dessous l'exemple de base :

mqtt:
  host: mqtt.server.com
cameras:
  back:
    ffmpeg:
      inputs:
        - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@10.0.10.10:554/cam/realmonitor?channel=1&subtype=2
          roles:
            - detect
            - rtmp
    detect:
      width: 1280
      height: 720

Une fois le fichier renseigné, vous pouvez relancer le conteneur Docker et accéder à l'interface depuis votre navigateur sur l'adresse http://<IP.DU.LXC>:5000. Vous arriverez directement sur le Dashboard (sur lequel il n'y a pas de mot de passe).
Voilà à quoi il ressemble chez moi après avoir ajouté quelques caméras :


Conclusion

J'espère que cette découverte de la mise en place l'outil Frigate vous a plu, et je pense rédiger un second article pour vous le présenter en détails et voir ensemble comme le configurer et l'utiliser.

Si vous avez des questions sur l'installation de Frigate, ou même sur sa configuration ou son utilisation, n'hésitez pas à laisser un commentaire ou à venir nous retrouver sur le groupe Telegram de la communauté.