--- - name: créer le dossier de configuration Docker du portail ansible.builtin.file: path: "{{ portail_dossier_docker }}" state: directory owner: root group: root mode: "0750" # Un seul fichier de secrets, nommé .env : docker compose le charge # automatiquement pour les substitutions ${...} de docker-compose.yml, et une # tâche plus loin le relit pour remplir le .env de Laravel avec les mêmes # valeurs (une seule source de vérité, jamais dans Git). - name: générer les secrets MariaDB/Redis de l'app (première fois seulement) ansible.builtin.copy: dest: "{{ portail_dossier_docker }}/.env" content: | MYSQL_ROOT_PASSWORD={{ lookup('community.general.random_string', length=32, special=false) }} MYSQL_PASSWORD={{ lookup('community.general.random_string', length=32, special=false) }} REDIS_PASSWORD={{ lookup('community.general.random_string', length=32, special=false) }} owner: root group: root mode: "0600" force: false register: portail_secrets_generes - name: lire les secrets générés ansible.builtin.slurp: src: "{{ portail_dossier_docker }}/.env" register: portail_secrets_brut - name: "exposer les secrets comme variables (jamais affichées, no_log)" ansible.builtin.set_fact: portail_secrets: "{{ dict(portail_secrets_lignes | map('split', '=', 1)) }}" vars: portail_secrets_lignes: "{{ (portail_secrets_brut.content | b64decode).splitlines() | select('string') | list }}" no_log: true - name: déployer docker-compose.yml (MariaDB + Redis de l'app) ansible.builtin.template: src: docker-compose.yml.j2 dest: "{{ portail_dossier_docker }}/docker-compose.yml" owner: root group: root mode: "0640" vars: portail_mysql_root_password: "${MYSQL_ROOT_PASSWORD}" portail_mysql_password: "${MYSQL_PASSWORD}" portail_redis_password: "${REDIS_PASSWORD}" register: portail_compose_deploye - name: démarrer MariaDB et Redis (app) community.docker.docker_compose_v2: project_src: "{{ portail_dossier_docker }}" state: present register: portail_compose_resultat - name: attendre que MariaDB (app) accepte les connexions ansible.builtin.wait_for: host: 127.0.0.1 port: "{{ portail_mysql_port }}" delay: 2 timeout: 60