Containers Docker

En fonctionnement, c’est pareil… Proxmox se banane, et tes CT ne seront pas plus opérationnels.
Pour docker, l’isolation est similaire à celle de LXC.
La grosse différence, c’est que LXC c’est de la virtualisation d’OS… Docker de la virtualisation d’appli…

Mais le serveur Docker est virtualité chez moi. Donc, si Proxmox se banane, plus de docker non plus ! Disons que Host->Proxmox->CT->Service me semble plus fiable que Host->Proxmox->VM->Docker->Service
Et puis, les backups et Snap des CT avant bidouille ne sont pas pour me déplaire :smiley:

Mais j’apprécie la facilité de déployer un service/appli sous docker… pas de dépendance, etc

Et backup et snapshot disponible également… :innocent: :blush:

1 « J'aime »

Tu as reçu ta clef coral :grin:
J’ai recu mon coral en m.2 aujourd’hui ca marche super plus de charge cpu et une inférence de 6 ms

Oui clé reçue depuis 1 semaine… Niveau perf sur le pi4 c’est pas terrible : 45ms et 35%…
C’est mieux que les 100% sans rien … mais si j’arrive pas à faire un truc meilleur ça va se terminer au dos du nuc, direct dans une VM

A la demande de @clemalex, je bouge mes docker compose Ici…

Docker compose de HA

version: '3.3'
services:
    homeassistant:
        container_name: homeassistant
        environment:
            - TZ=Europe/Paris
        volumes:
            - '/home/data/homeassistant/config:/config'
        network_mode: host
        image: 'homeassistant/home-assistant:2021.9.2'
        labels:
          - wud.tag.include=^\d+\.\d+\.\d+$
          - wud.watch=true

zigbee2mqtt:

  version: '3'
  services:
    zigbee2mqtt:
      container_name: zigbee2mqtt
      image: koenkk/zigbee2mqtt:1.21.1
      volumes:
        - /home/data/zigbee2mqtt/data:/app/data
        - /run/udev:/run/udev:ro
      devices:
        - /dev/ttyACM0:/dev/ttyACM0
      restart: always
      ports:
        - 8080:8080
      privileged: true
      environment:
        - TZ=Europe/Paris
      network_mode: bridge
      labels:
        - wud.tag.include=^\d+\.\d+\.\d+$
        - wud.watch=true

NodeRed:

version: "3.7"

services:
  nodered:
    container_name: nodered
    image: nodered/node-red:2.0.6
    environment:
      - TZ=Europe/Paris
    ports:
      - "1880:1880"
    volumes:
      - /home/data/nodered:/data
    restart: unless-stopped
    network_mode: bridge
    labels:
      - wud.tag.include=^\d+\.\d+\.\d+$
      - wud.watch=true

Samba

version: '3.3'
services:
    samba:
        command: '-s "data:/data:rw:moi" -u "1000:998:moi:docker:password"'
        container_name: samba
        ports:
            - '139:139'
            - '445:445'
        environment:
            - USERID=1000
            - GROUPID=998
        volumes:
            - '/home/data:/data'
        image: elswork/samba:3.2.7
        restart: unless-stopped
        network_mode: bridge
        labels:
          - wud.tag.include=^\d+\.\d+\.\d+.*$$
          - wud.watch=true

Et Frigate:

version: '3.3'
services:
    frigate:
        container_name: frigate
        restart: unless-stopped
        network_mode: bridge
        devices:
            - /dev/dri/renderD128
            - '/dev/bus/usb:/dev/bus/usb'
        volumes:
            - '/home/moi/data/frigate/media:/media/frigate'
            - '/etc/localtime:/etc/localtime:ro'
            - '/home/moi/data/frigate/config.yaml:/config/config.yml:ro'
        environment:
            - FRIGATE_RTSP_PASSWORD=S89ergines
            - TZ=Europe/Paris
            - USERID=1000
            - GROUPID=998
        ports:
            - '5000:5000'
            - '1935:1935'
        image: blakeblackshear/frigate:0.9.0-rc4-amd64
        labels:
          - wud.tag.include=^\d+\.\d+\.\d+.*-amd64$$
          - wud-watch=true

Les lignes « wud » c’est pour What’s up Docker?
Je l’utilise à la place de watchtower. Comme j’ai plusieurs environnement docker, je peux utiliser l’api pour portainer et wud pour « voir » tous mes dockers.

1 « J'aime »

Mise a jour des composes du 1er post…

Car ça la fout mal de demander les compose sans donner les siens… :innocent:

Voila, j’ai édité mon post avec un extrait de mon docker-compose directement lié à home assistant.
Il y a une autre dizaine de dockers dans mon « compose » mais non liés a HA

Tu veux créer un sujet dédié ? Ça peut être intéressant ! :wink:

Du genre

Vos containers non liés à HA

:smiling_face_with_three_hearts:

Merci pour le partage. Je crois que je vais copier ton samba :slight_smile:

Si je comprends bien tu as un docker compose par conteneur ?
Je suis encore en train de chercher la méthode l plus simple mais surtout la plus sûr pour mettre à jour les conteneurs sans forcément impacter les autres… J’ai commencé avec des docker run, puis avec un docker compose global, là je teste en faisant plusieurs stack sous Portainer mais je cela ne me convainc pas non plus.

C’est ce que je fais. Je trouve ça plutôt pratique.
Et justement un stack/un container on évite les accidents :slight_smile:

D’accord avec toi pour avoir un stack ou compose par container.
Comment tu backup tes stack?

J’ai un container samba qui expose tous les volumes utilisés par les différents containers.
Je sauvegarde ce répertoire avec l’outil activbackup de mon Synology.

Bonjour,
Effectivement, cela devient simple avec Docker sauf quand on cherche à faire des dock custom, mais ça se fait.
Je te rejoins pour AdGuard et Portainer :wink:
Concernant Heimdall, apporte-t-il un vrai plus par rapport aux pages d’accueil de Firefox ou Chrome (désolé, mais un peu du mal à voir le gros plus…)

Bonjour, Heimdall sert a centraliser les liens quand tu as plusieurs serveurs installés avec des sous domaines.

Bonjour,

Désolé de poser une question de néophyte.

L’installation en mode supervised de HA fonctionne déjà sous docker et les add-on sont aussi sous docker.

Pourquoi passez vous par des docker-compose, je ne vois pas la plus-value là.

C’est une bonne question :slight_smile: !

Dans mon cas, pour deux raisons principales:

  • je veux pouvoir avoir accès à l’OS sous-jacent simplement et que ce soit debian. Donc, ça élimine HAOS.
  • je trouve le concept du ‹ superviseur › assez antinomique des principes de base de Linux. Il y a un côté « boite noire » (le côté appliance) qui me gêne. En gérant les containers à la main (avec portainer et wud ou watchtower) j’ai le même niveau de service (je pense) en restant en contrôle.

Donc, pour quelqu’un qui a de l’expérience sous linux, faire les choses à la main sera paradoxalement plus simple que le mode supervisé qui rajoute une couche un peu « magique » et change certaines habitudes.

En plus, je ne suis pas convaincu par les add-on très « externes » à home assistant (pihole, adguard,… par exemple). Je les utilise, mais, pas sur le même machine/VM que HA.

Comme le dit @golfvert pour garder la maîtrise.

Un néophyte aura tout intérêt à être sous HA OS. HA Supervised est censé être pour les expérimentés mais beaucoup de personnes l’utilisent pour avoir accès à un debian pour installer des outils supplémentaires tout en gardant la simplicité qu’offre le superviseur.

Celui qui veut garder la maîtrise complète passe par les couches les plus basses et les fait lui même communiquer entre elles.

De plus, tout faire dans HA c’est être dépendant du Superviseur, alors que comme le dit @golfvert, les add-ons sont des containers que nous pouvons nous même gérer et mettre en dehors de HA car aucun pour moi n’a vocation à être porté par la solution domotique.

Merci pour vos retours,

j’avais commencé avec un docker-compose de ha puis aprés avoir lu differents postes concernant supervisor, add-on, je suis passé sur la version supervised du coup.

Mais je me note votre methode d’install. dans un coin, j’aime bien garder la main sur mon système.

Bonsoir a tous,

J’utilise également les containers pour faire tourner tout ce que je trouve d’utile :slight_smile:
En gros mes principaux containers sont :

HomeAssistant :

version: '3'
services:
  homeassistant:
    container_name: Homeassistant
    image: homeassistant/home-assistant
    volumes:
      - /sharedfolders/AppData/HomeAssistant:/config
      - /sharedfolders/AppData/HomeAssistant/data:/data
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

Portainer :

version: '3.7'

services:
  Portainer:
        restart: unless-stopped
        container_name: Portainer
        image: portainer/portainer-ce:latest
        ports:
        - "9000:9000"                
        environment:
        - PUID=1000
        - PGID=100
        - TZ=Europe/Paris        
        volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./:/data                        
        networks:
            - traefik_proxy
        labels:                        
            ##Pour autoriser l'accès via Traefik depuis l'extérieur##
            - "traefik.enable=true"
            - "traefik.docker.network=traefik_proxy"
            - "traefik.port=9000"
            - "traefik.backend=Portainer"
            - "traefik.entryPoint=https"
            - "traefik.frontend.rule=Host:mondomaine.com"
            #########################################################
            ##Authentification 2FA avec google OAuth2 ###############################
            - "traefik.frontend.auth.forward.address=http://oauth:4181"
            - "traefik.frontend.auth.forward.authResponseHeaders: X-Forwarded-User"
            - "traefik.frontend.auth.forward.trustForwardHeader=true"
            #########################################################################
            ###Autoriser les MAJ auto via watchtower ###
            - "com.centurylinklabs.watchtower.enable=true"            
networks:
    traefik_proxy:
         external: true

Le container VPN (stack sous portainer) et quelques autres qui passent par le VPN :

version: "2"

services:
  vpn:
    image: qmcgaw/gluetun:latest
    container_name: Gluetun
    networks :
      - VPN_Gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    labels:
      com.centurylinklabs.watchtower.enable: true #MAJ auto via watchtower
    ports:
      - 8889:8888/tcp # HTTP proxy
      - 8388:8388/tcp # Shadowsocks
      - 8388:8388/udp # Shadowsocks
      - 6595:6595 #Deemix
      - 8998:17442 #YoutubeDL
      - 8081:80 #Rutorrent
      - 45000:45000 #Rutorrent Data
    environment:
      - TZ=Europe/Paris
      - VPNSP=surfshark
      - VPN_TYPE=openvpn
      - SERVER_HOSTNAME=fr-bod.prod.surfshark.com
      - PUID=1000
      - PGID=100
      - OPENVPN_USER=User_VPN
      - OPENVPN_PASSWORD=Mdp_VPN
    volumes:
      - /sharedfolders/AppData/Gluetun:/gluetun
    restart: unless-stopped
        
  rutorrent:
    network_mode: service:vpn
    depends_on:
      - vpn
    image: linuxserver/rutorrent:latest
    container_name: Rutorrent
    volumes:
      - /sharedfolders/SSD:/downloads
      - /sharedfolders/AppData/Rutorrent:/config
      - /sharedfolders/ZFS:/ZFS
    labels:
      com.centurylinklabs.watchtower.enable: true #MAJ auto via watchtower      
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
    restart: unless-stopped

  deemix:
    network_mode: service:vpn
    depends_on:
      - vpn
    image: registry.gitlab.com/bockiii/deemix-docker
    container_name: Deemix
    volumes:
      - /sharedfolders/SSD:/downloads
      - /sharedfolders/AppData/Deemix:/config
    labels:
      com.centurylinklabs.watchtower.enable: true #MAJ auto via watchtower    
    environment:
      - PUID=1000
      - PGID=100
      - ARL=Mon_ID
      - UMASK_SET=022
      - DEEZUI=false
      - TZ=Europe/Paris
    restart: unless-stopped

  Youtube_DL:
    container_name: YoutubeDL
    environment:
      - PUID=1000
      - PGID=100
      - TZ=Europe/Paris
      - ALLOW_CONFIG_MUTATIONS=true
    restart: unless-stopped
    network_mode: service:vpn
    depends_on:
        - vpn
    labels:
      com.centurylinklabs.watchtower.enable: true #MAJ auto via watchtower
    volumes:
      - /sharedfolders/AppData/Youtube_DL:/app/appdata
      - /sharedfolders/SSD/Youtube_DL:/app/audio
      - /sharedfolders/SSD/Youtube_DL:/app/video
      - /sharedfolders/AppData/Youtube_DL/subscriptions:/app/subscriptions
      - /sharedfolders/AppData/Youtube_DL/users:/app/users
    image: tzahi12345/youtubedl-material:latest

networks :
  VPN_Gluetun :
    external: true

Traefik pour la partie revers proxy :

version: "3"
services:
  Traefik:
    container_name: Traefik
    domainname: mondomaine.com
    entrypoint:
      - /traefik
    environment:
      - CF_API_EMAIL=monmail@mail.com
      - CF_API_KEY=Mon_API_KEY
      - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    hostname: Traefik
    image: traefik:v1.7.21
    ipc: shareable
    labels:
      com.docker.compose.oneoff: False
      com.docker.compose.project: traefik
      com.docker.compose.project.config_files: docker-compose.yml
      com.docker.compose.project.working_dir: /sharedfolders/AppData/Traefik
      com.docker.compose.service: traefik
      com.docker.compose.version: 1.25.4
      org.opencontainers.image.description: 'A modern reverse-proxy'
      org.opencontainers.image.documentation: https://docs.traefik.io
      org.opencontainers.image.title: Traefik
      org.opencontainers.image.url: https://traefik.io
      org.opencontainers.image.vendor: Containous
      org.opencontainers.image.version: v1.7.21
      traefik.backend: traefik
      traefik.docker.network: traefik_proxy
      traefik.enable: true
      traefik.frontend.auth.forward.address: http://oauth:4181
      'traefik.frontend.auth.forward.authResponseHeaders: X-Forwarded-User': ""
      traefik.frontend.auth.forward.trustForwardHeader: true
      traefik.frontend.headers.SSLHost: mondomaine.com
      traefik.frontend.headers.SSLRedirect: true
      traefik.frontend.headers.STSIncludeSubdomains: true
      traefik.frontend.headers.STSPreload: true
      traefik.frontend.headers.STSSeconds: 315360000
      traefik.frontend.headers.browserXSSFilter: true
      traefik.frontend.headers.contentTypeNosniff: true
      'traefik.frontend.headers.customFrameOptionsValue: allow-from https:modom.com': ""
      traefik.frontend.headers.forceSTSHeader: true
      traefik.frontend.rule: Host:mondomaine.com
      traefik.port: 8080
    logging:
      driver: json-file
      options: {}
    networks:
      - traefik_proxy
    ports:
      - 8443:443/tcp
      - 88:80/tcp
      - 8888:8080/tcp
    restart: unless-stopped
    volumes:
      - /sharedfolders/AppData/Traefik/services.toml:/etc/traefik/services.toml:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /sharedfolders/AppData/Traefik/traefik.toml:/etc/traefik/traefik.toml:rw
      - /sharedfolders/AppData/Traefik/acme.json:/etc/traefik/acme.json:rw
networks:
  traefik_proxy:
    external: true

OAuth pour faire une authentification 2FA chez Google :

version: "3"
services:
  oauth:
    container_name: oauth
    entrypoint:
      - ./traefik-forward-auth
    environment:
      - PROVIDERS_GOOGLE_CLIENT_ID=Is_Account
      - PROVIDERS_GOOGLE_CLIENT_SECRET=Google_Secret
      - SECRET=MonSecret
      - COOKIE_DOMAIN=mondomaine.com
      - INSECURE_COOKIE=false
      - AUTH_HOST=oauth.mondomaine.com
      - URL_PATH=/_oauth
      - WHITELIST=monmail@mail.com
      - LOG_LEVEL=info
      - LIFETIME=2592000
      - TZ=Europe/Paris
      - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    hostname: oauth
    image: thomseddon/traefik-forward-auth
    ipc: shareable
    labels:
      com.docker.compose.container-number: 1
      com.docker.compose.oneoff: False
      com.docker.compose.project: oauth
      com.docker.compose.project.config_files: docker-compose.yml
      com.docker.compose.project.working_dir: /sharedfolders/AppData/OAuth
      com.docker.compose.service: oauth
      com.docker.compose.version: 1.25.4
      traefik.backend: oauth
      traefik.docker.network: traefik_proxy
      traefik.enable: true
      traefik.frontend.auth.forward.address: http://oauth:4181
      traefik.frontend.auth.forward.authResponseHeaders: X-Forwarded-User
      traefik.frontend.auth.forward.trustForwardHeader: true
      traefik.frontend.headers.SSLForceHost: true
      traefik.frontend.headers.SSLHost: oauth.mondomaine.com
      traefik.frontend.headers.SSLRedirect: true
      traefik.frontend.headers.STSIncludeSubdomains: true
      traefik.frontend.headers.STSPreload: true
      traefik.frontend.headers.STSSeconds: 315360000
      traefik.frontend.headers.browserXSSFilter: true
      traefik.frontend.headers.contentTypeNosniff: true
      traefik.frontend.headers.customResponseHeaders: X-Robots-Tag:noindex,nofollow,nosnippet,noarchive,notranslate,noimageindex
      traefik.frontend.headers.forceSTSHeader: true
      traefik.frontend.headers.frameDeny: true
      traefik.frontend.passHostHeader: true
      traefik.frontend.rule: Host:oauth.mondomaine.com
      traefik.port: 4181
    logging:
      driver: json-file
      options: {}
    networks:
      - traefik_proxy
    restart: unless-stopped
networks:
  traefik_proxy:
    external: true

C’est sans doute loin d’être parfait car je débute dans la partie container mais cela fonctionne pour le moment :slight_smile:
J’ai également un container AdGuardHome, TeamSpeak, BitwardenRS et Watchtower pour les MAJ auto des containers.