# ------------------------------------------------------------------------------ # FILE: roles/traefik/tasks/main.yml # DESCRIPTION: Deploys Traefik as a Docker Compose stack with Cloudflare # DNS-01 certificate resolution for *.local.mk-labs.cloud # ------------------------------------------------------------------------------ - name: Create Traefik directory structure file: path: "{{ item }}" state: directory owner: "{{ ansible_user }}" group: docker mode: '0775' loop: - "{{ traefik_base_dir }}" - "{{ traefik_config_dir }}" - "{{ traefik_config_dir }}/dynamic" - "{{ traefik_certs_dir }}" - "{{ traefik_logs_dir }}" - name: Create acme.json for certificate storage file: path: "{{ traefik_certs_dir }}/acme.json" state: touch owner: root group: root mode: '0600' modification_time: preserve access_time: preserve - name: Deploy Traefik static configuration template: src: traefik.yml.j2 dest: "{{ traefik_config_dir }}/traefik.yml" owner: "{{ ansible_user }}" group: docker mode: '0644' notify: restart traefik - name: Deploy dynamic configuration template: src: dynamic.yml.j2 dest: "{{ traefik_config_dir }}/dynamic/default.yml" owner: "{{ ansible_user }}" group: docker mode: '0644' notify: restart traefik - name: Deploy Docker Compose file template: src: compose.yml.j2 dest: "{{ traefik_base_dir }}/compose.yml" owner: "{{ ansible_user }}" group: docker mode: '0644' notify: restart traefik - name: Deploy environment file template: src: env.j2 dest: "{{ traefik_base_dir }}/.env" owner: "{{ ansible_user }}" group: docker mode: '0600' notify: restart traefik - name: Create Traefik Docker network docker_network: name: "{{ traefik_network }}" state: present - name: Start Traefik community.docker.docker_compose_v2: project_src: "{{ traefik_base_dir }}" state: present