--- - name: Installation et configuration du frontend et backend hosts: backend become: true gather_facts: true tasks: - name: Update apt cache apt: update_cache: yes cache_valid_time: 3600 - name: Install required packages apt: name: - apt-transport-https - ca-certificates - curl - gnupg - lsb-release - software-properties-common - acl state: present - name: Create directory for Docker GPG key file: path: /etc/apt/keyrings state: directory mode: "0755" - name: Add Docker GPG key apt_key: url: https://download.docker.com/linux/ubuntu/gpg keyring: /etc/apt/keyrings/docker.gpg state: present - name: Get system architecture command: dpkg --print-architecture register: system_arch changed_when: false - name: Get Ubuntu codename command: lsb_release -cs register: ubuntu_codename changed_when: false - name: Add Docker repository apt_repository: repo: "deb [arch={{ system_arch.stdout }} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu {{ ubuntu_codename.stdout }} stable" state: present filename: docker - name: Update apt cache after adding repo apt: update_cache: yes - name: Install Docker packages apt: name: - docker-ce - docker-ce-cli - containerd.io - docker-buildx-plugin - docker-compose-plugin state: present - name: Ensure Docker service is started and enabled systemd: name: docker state: started enabled: yes - name: Create docker group group: name: "{{ docker_group }}" state: present - name: Create docker user user: name: "{{ docker_user }}" group: "{{ docker_group }}" groups: docker append: yes shell: /bin/bash create_home: yes state: present - name: Add ansible user to docker group user: name: "{{ ansible_user }}" groups: docker append: yes when: ansible_user is defined - name: Verify Docker installation command: docker --version register: docker_version changed_when: false - name: Verify Docker Compose installation command: docker compose version register: compose_version changed_when: false - name: Display versions debug: msg: - "{{ docker_version.stdout }}" - "{{ compose_version.stdout }}" - name: Create frontend directory ansible.builtin.file: path: "{{ nginx_frontend_path }}" state: directory owner: "{{ docker_user }}" group: "{{ docker_group }}" mode: "0755" - name: Create backend directory ansible.builtin.file: path: "{{ backend_dir }}" state: directory owner: "{{ docker_user }}" group: "{{ docker_group }}" mode: "0755" - name: Synchronize frontend content (excluding node_modules and .git) ansible.builtin.synchronize: src: ../frontend-prep dest: "{{ nginx_frontend_path }}/" rsync_opts: - "--exclude=node_modules" - "--exclude=.git" - "--exclude=dist" - "--exclude=build" delete: no recursive: yes tags: sync_frontend - name: Set ownership for frontend directory ansible.builtin.file: path: "{{ nginx_frontend_path }}" owner: "{{ docker_user }}" group: "{{ docker_group }}" recurse: yes tags: sync_frontend - name: Synchronize backend content (excluding node_modules and .git) ansible.builtin.synchronize: src: ../backend dest: "{{ backend_dir }}/" rsync_opts: - "--exclude=node_modules" - "--exclude=.git" - "--exclude=dist" - "--exclude=build" delete: no recursive: yes tags: sync_backend - name: Set ownership for backend directory ansible.builtin.file: path: "{{ backend_dir }}" owner: "{{ docker_user }}" group: "{{ docker_group }}" recurse: yes tags: sync_backend - name: Copy Docker project ansible.builtin.copy: src: ../docker/ dest: "{{ docker_dir }}/" owner: "{{ docker_user }}" group: "{{ docker_group }}" mode: "0755" - name: Ensure parent directory has correct permissions ansible.builtin.file: path: "{{ docker_dir }}" state: directory owner: "{{ docker_user }}" group: "{{ docker_group }}" mode: "0755" - name: Set correct permissions for Docker files ansible.builtin.file: path: "{{ docker_dir }}" owner: "{{ docker_user }}" group: "{{ docker_group }}" recurse: yes - name: Set permissions for .env file ansible.builtin.file: path: "{{ docker_dir }}/.env" owner: "{{ docker_user }}" group: "{{ docker_group }}" mode: "0640" ignore_errors: yes