210 lines
6.2 KiB
YAML
210 lines
6.2 KiB
YAML
---
|
|
- 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
|