diff --git a/files/dozzle/docker-compose.template.yml b/files/dozzle/docker-compose.template.yml index 4f2b395..559cd55 100644 --- a/files/dozzle/docker-compose.template.yml +++ b/files/dozzle/docker-compose.template.yml @@ -1,10 +1,18 @@ services: dozzle_app: - image: amir20/dozzle:v10.10.0 + image: amir20/dozzle:v11.0.0 container_name: dozzle_app restart: unless-stopped + # От своего пользователя, чтобы содержимое data/ не оказалось рутовым. + # Доступ к docker.sock при этом даёт только дополнительная группа docker: + # сокет принадлежит root:docker, а образ собран из scratch, поэтому в + # group_add идёт числовой gid — /etc/group внутри контейнера нет. + user: "{{ app_owner_uid }}:{{ app_owner_gid }}" + group_add: + - "{{ dozzle_docker_gid }}" volumes: - "/var/run/docker.sock:/var/run/docker.sock" + - "{{ data_dir }}:/data" networks: - "web_proxy_network" environment: diff --git a/playbook-dozzle.yml b/playbook-dozzle.yml index 8e0be0e..53bacc8 100644 --- a/playbook-dozzle.yml +++ b/playbook-dozzle.yml @@ -8,6 +8,7 @@ app_owner_uid: 1016 app_owner_gid: 1017 base_dir: "{{ (application_dir, app_name) | path_join }}" + data_dir: "{{ (base_dir, 'data') | path_join }}" tasks: - name: "Create user and environment" @@ -27,6 +28,27 @@ mode: "0770" loop: - "{{ base_dir }}" + - "{{ data_dir }}" + + - name: "Create backup targets file" + ansible.builtin.copy: + dest: "{{ base_dir }}/backup-targets" + content: | + {{ data_dir }} + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0640" + + - name: "Grab docker group info" + ansible.builtin.getent: + database: "group" + key: "docker" + + # getent_group отдаёт поля строки /etc/group без имени группы, + # то есть [пароль, gid, участники] — gid лежит под индексом 1. + - name: "Store docker group id" + ansible.builtin.set_fact: + dozzle_docker_gid: "{{ ansible_facts.getent_group['docker'][1] }}" - name: "Copy docker compose file" ansible.builtin.template: