--- - name: Installer Immich avec Docker Compose hosts: immich become: true tasks: - name: Installer les prérequis système ansible.builtin.apt: name: - ca-certificates - curl - gnupg - lsb-release - nfs-common state: present update_cache: true - name: Vérifier que le partage NFS est monté ansible.builtin.command: cmd: findmnt -T "{{ nfs_mount_point }}" register: nfs_mount_check changed_when: false failed_when: nfs_mount_check.rc != 0 when: check_nfs_mount | bool - name: Définir l'architecture Docker APT ansible.builtin.set_fact: docker_apt_arch: >- {{ { 'x86_64': 'amd64', 'aarch64': 'arm64', 'armv7l': 'armhf', 'armv6l': 'armhf' }.get(ansible_architecture, ansible_architecture) }} docker_apt_distribution: >- {{ 'ubuntu' if ansible_distribution == 'Ubuntu' else 'debian' if ansible_distribution == 'Debian' else ansible_distribution | lower }} - name: Supprimer les anciens paquets Docker conflictuels ansible.builtin.apt: name: - docker.io - docker-doc - docker-compose - podman-docker - containerd - runc state: absent when: docker_remove_conflicting_packages | bool - name: Créer le dossier des clés APT ansible.builtin.file: path: /etc/apt/keyrings state: directory owner: root group: root mode: "0755" - name: Installer la clé GPG du dépôt Docker officiel ansible.builtin.get_url: url: "https://download.docker.com/linux/{{ docker_apt_distribution }}/gpg" dest: /etc/apt/keyrings/docker.asc owner: root group: root mode: "0644" - name: Ajouter le dépôt Docker officiel ansible.builtin.apt_repository: repo: "deb [arch={{ docker_apt_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ docker_apt_distribution }} {{ ansible_distribution_release }} stable" filename: docker state: present update_cache: true - name: Installer Docker Engine et Docker Compose v2 ansible.builtin.apt: name: - docker-ce - docker-ce-cli - containerd.io - docker-buildx-plugin - docker-compose-plugin state: present update_cache: true - name: Activer et démarrer Docker ansible.builtin.service: name: docker state: started enabled: true - name: Créer le dossier Immich ansible.builtin.file: path: "{{ immich_dir }}" state: directory owner: root group: root mode: "0755" - name: Créer la bibliothèque Immich sur le NFS ansible.builtin.file: path: "{{ immich_library_path }}" state: directory mode: "{{ immich_library_mode }}" recurse: true - name: Forcer les permissions sur la bibliothèque Immich NFS ansible.builtin.command: cmd: chmod -R {{ immich_library_mode }} "{{ immich_library_path }}" changed_when: false - name: Créer le dossier PostgreSQL local Immich ansible.builtin.file: path: "{{ immich_postgres_data_path }}" state: directory owner: "{{ immich_postgres_uid }}" group: "{{ immich_postgres_gid }}" mode: "0700" - name: Créer le dossier de cache machine-learning Immich ansible.builtin.file: path: "{{ immich_model_cache_path }}" state: directory owner: root group: root mode: "0777" - name: Déployer le fichier .env Immich ansible.builtin.template: src: templates/.env.j2 dest: "{{ immich_dir }}/.env" owner: root group: root mode: "0600" notify: Redémarrer Immich - name: Déployer docker-compose.yml Immich ansible.builtin.template: src: templates/docker-compose.yml.j2 dest: "{{ immich_dir }}/docker-compose.yml" owner: root group: root mode: "0644" notify: Redémarrer Immich - name: Supprimer les anciens conteneurs Immich portant les mêmes noms ansible.builtin.shell: | old_ids=$(docker ps -aq \ --filter "name=immich_server" \ --filter "name=immich_machine_learning" \ --filter "name=immich_redis" \ --filter "name=immich_postgres") if [ -n "$old_ids" ]; then docker rm -f $old_ids fi printf "%s" "$old_ids" changed_when: removed_immich_containers.stdout != '' register: removed_immich_containers - name: Démarrer Immich ansible.builtin.command: cmd: docker compose up -d chdir: "{{ immich_dir }}" register: immich_compose_up changed_when: >- 'Started' in immich_compose_up.stdout or 'Created' in immich_compose_up.stdout or 'Recreated' in immich_compose_up.stdout or 'Running' in immich_compose_up.stdout - name: Attendre que le port HTTP Immich soit ouvert localement ansible.builtin.wait_for: host: 127.0.0.1 port: "{{ immich_host_http_port }}" delay: 5 timeout: 240 state: started - name: Attendre que le conteneur Immich Server soit en état running ansible.builtin.shell: | cid=$(docker compose ps -q immich-server) if [ -z "$cid" ]; then exit 1 fi status=$(docker inspect "$cid" | grep -m1 '"Status":' | awk -F'"' '{print $4}') [ "$status" = "running" ] args: chdir: "{{ immich_dir }}" register: immich_container_status retries: 30 delay: 5 until: immich_container_status.rc == 0 changed_when: false - name: Lancer le rôle Nginx configuration réseau ansible.builtin.include_role: name: nginx when: nginx_required | bool handlers: - name: Redémarrer Immich ansible.builtin.command: cmd: docker compose up -d chdir: "{{ immich_dir }}" register: immich_restart changed_when: true