Présentation infrastructure mickaelh51

Bonjour à tous,
Étant fan de domotique et d’IT en général (c’est d’ailleurs mon métier), cela fait pas mal d’année que j’explore ce monde de fou.
j’ai commencé il y a peut-être 10 ans avec OpenHAB, puis, je suis passé il y a peut-être 5 ans sur Home Assistant. Passer de Java à Python, que du bonheur :wink:

Côté infra:
Je suis full docker, j’aime pouvoir générer ce que je déploie (par Ansible) ou non sur mes nodes Swarm. C’est pour ça que je n’utilise pas la version HA packagée.

  • 9 swarm nodes
  • Un cluster GlusterFS pour les volumes
  • Un proxy Traefik (avec une IP type mac vlan) qui me permets de « proxifier » un peu prés tout ce que je veux.
  • Une node dédié au gateway connectées en USB

Je partage un schéma, ça sera plus parlant que des mots:

Côté intégration:

  • GW USB zigbee (avec de l’Ikea, Xiaomi) pour de l’ouverture de porte, température, etc … + Zigbee2mqtt
  • GW USB rflink, pour des sensors température et pilotage de mes volets Somfy
  • Intégration de mon alarme RSI Videofied (sans centre de surveillance), j’ai dev une gateway qui me permet d’être mon propre centre de surveillance.
  • Quelques prises Sonoff flashées avec Tasmota
  • Zoneminder afin de piloter le mode de record (Ex: quand j’active mon alarme, mes caméras se mettent en détection de mouvements)
  • Ajout d’une gateway SMS (afin de remonter certaines alertes)
  • Module Energy avec un Wemos PitInfo connecté à mon Linky
  • Pilotage de mon poêlé a granulés Palazzetti, grâce à un module fait maison
  • Pilotage de mes 2 VMC

Côté back, ça va, mais côté front, mon interface ne ressemble à rien.
J’espère pouvoir m’inspirer de ce que j’ai déjà pu voir sur le forum, afin de rentre plus design mon lovelace.

A bientôt
PS: et bonne année !

4 « J'aime »

Aurais-tu le temps de présenter ton déploiement par ansible ?

Ansible n’est pas beaucoup exploité ici.

Je sais que ma demande représente énormément de temps…:innocent:

Mais qui demande rien…:grin:

Salut @mickaelh51,
Quand je te lis, je comprend que j’ai encore beaucoup à apprendre.
La moitier de ce que tu as écrit me passe au dessus de la tête :confused: :anguished:
Sois le bienvenu sur HACF
@+ Guy

Bonsoir,
merci @GDX2 , mais bon après plus de 15 ans dans l’IT et passionné, on a plus trop de mérite :wink:

@Clemalex je peux te partager quelques playbooks, j’utilise quotidiennement Ansible dans mon boulot, donc pourquoi pas l’utiliser à la maison.
Ca ne va pas être simple, car il y a beaucoup de code, je vais juste copier certains exemples parlant.

j’utilise Ansible souvent en 3 parties:

  • Installer mes machines (update, conf SSH, etc …)
  • Installer mes softs (je compile souvent mes softs)
  • Configurer mes softs

J’ai tjs un playbook par grande famille d’utilisation, en perso ça se limite à 2 surtout:

  • glusterfs-install-config.yml
  • docker-server-install-config.yml

Ex docker-server-install-config.yml:

- name: Docker-servers-install-config
  hosts: docker_servers
  gather_facts: yes
  strategy: free
  become: yes

  roles:
    - { role: base_install, tags: [never,base] }
    - { role: docker_install, tags: [never,install] }
    - { role: docker_config, tags: [never,config] }
    - { role: docker_deploy, tags: [never,deploy] }

Ensuite je choisie ce que je veux executer comme rôle avec les tags, soit j’utilise:

  • base => des machines (SSH, IP, etc …)
  • install => j’installe mes softs (ici seulement docker)
  • config => je configure mes réseaux swarm, etc …
  • deploy => je déploie mes services (swarm ou non)

Ex de role base:

---
- name: deploy resolv.conf template
  template:
    src: resolv.conf.j2
    dest: /etc/resolv.conf
    owner: root
    group: root
    mode: 0644
    backup: yes
    
- name: Update all packages and upgrade server
  apt:
    update_cache: yes
    cache_valid_time: 3600
    upgrade: yes

- name: Install base packages
  package:
    name: "{{ base_packages }}"
    state: present
    

- name: Install python package
  ansible.builtin.pip:
    name: "{{ python_packages }}"
    state: present
    executable: "/usr/bin/pip3"

- name: Ensure a locale exists
  community.general.locale_gen:
    name: "{{ item }}"
    state: present
  with_items:
    - "fr_FR.UTF-8"
    #- "fr_FR.ISO-8859-1"

- name: Update Root user's Password
  user: 
    name: root
    update_password: always 
    password: "{{ default_root_password }}"

- name: Ensure group "somegroup" exists
  ansible.builtin.group:
    name: "{{ user }}"
    state: present

- name: Create a mike user
  user:
    name: "{{ user }}"
    password: "{{ default_mike_password }}"
    groups:
      - "{{ user }}"
    state: present

- name: Add public key to authorized_keys
  authorized_key:
    user: "{{ user }}"
    state: present
    key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"

- name: Add {{ user }} to sudoers file
  ansible.builtin.lineinfile:
    path: /etc/sudoers
    regexp: '^{{ user }}'
    line: '{{ user }} ALL=(ALL) NOPASSWD: ALL'
    validate: 'visudo -cf %s'

- name: copy base files
  copy: 
    src: "{{ item.src }}"
    dest: "{{ item.dstdir }}/{{ item.dstfile }}"
    owner: "root"
    group: "root"
    mode: "u=rwx,g=r,o=r"
  with_items:
    - { dstfile: ".bashrc", src: "bashrc", dstdir: "/root" }
    - { dstfile: ".vimrc", src: "vimrc", dstdir: "/root" }
    - { dstfile: ".bashrc", src: "bashrc", dstdir: "/home/mike" }
    - { dstfile: ".vimrc", src: "vimrc", dstdir: "/home/mike" }
    - { dstfile: ".screenrc", src: "screenrc", dstdir: "/home/mike" }

- name: Adding banner info in sshd.conf
  lineinfile: 
    dest: /etc/ssh/sshd_config 
    regexp: '#Banner' 
    line: "Banner /etc/ssh/ssh-banner-message.txt"

- name: Update ssh banner
  template: 
    src: ssh-banner.txt.j2 
    dest: /etc/ssh/ssh-banner-message.txt
    mode: 0644
  notify: restart ssh

Ex: pour ma conf docker:

- name: Create overlay network
  community.docker.docker_network:
    name: "{{ item.name }}"
    attachable: true
    driver: "overlay"
    scope: "swarm"
  with_items:
    - "{{ docker_network_overlay_config }}"
  when: docker_type == "manager"

Ex: Déployer les services:

- name: copy docker-compose files for stack
  ansible.builtin.template:
    src: "docker-compose/{{ item.file }}"
    dest: "/tmp/{{ item.file }}"
  with_items:
    - "{{ deploy_services }}"
  when: inventory_hostname == "docker1"

- name: Deploy services
  docker_stack:
    state: present
    name: "{{ item.name }}"
    compose:
      - "/tmp/{{ item.file }}"
    resolve_image: never
  with_items:
    - "{{ deploy_services }}"
  when: inventory_hostname == "docker1"

Ca donne une petite idée de comment j’articule Ansible.
j’espère que ça pourra t’aider un peu.
++

1 « J'aime »

Bienvenue dans la communauté