--- - name: "Configure miniflux application" hosts: all vars: app_name: "miniflux" app_user: "{{ app_name }}" app_owner_uid: 1013 app_owner_gid: 1014 base_dir: "{{ (application_dir, app_name) | path_join }}" data_dir: "{{ (base_dir, 'data') | path_join }}" secrets_dir: "{{ (base_dir, 'secrets') | path_join }}" postgres_data_dir: "{{ (base_dir, 'data', 'postgres') | path_join }}" postgres_backups_dir: "{{ (base_dir, 'backups', 'postgres') | path_join }}" tasks: - name: "Create user and environment" ansible.builtin.import_role: name: owner vars: owner_name: "{{ app_user }}" owner_uid: "{{ app_owner_uid }}" owner_gid: "{{ app_owner_gid }}" # Группа docker = root на хосте, поэтому её не выдаём никому, кроме # приложений, чей backup.sh делает docker compose exec: оркестратор # запускает такие скрипты через su от имени этого пользователя. # См. docs/backlog/backup-dump-without-docker-group.md. owner_extra_groups: ["docker"] - name: "Create internal directories" ansible.builtin.file: path: "{{ item }}" state: "directory" owner: "{{ app_user }}" group: "{{ app_user }}" mode: "0770" loop: - "{{ base_dir }}" - "{{ data_dir }}" - "{{ secrets_dir }}" - "{{ postgres_data_dir }}" - "{{ postgres_backups_dir }}" # notify на import_role наследуется всеми задачами роли: рестарт нужен, # если изменился любой файл секретов — miniflux читает их через *_FILE # только при старте. - name: "Copy secrets" ansible.builtin.import_role: name: secrets notify: "Restart application" vars: secrets_dest: "{{ secrets_dir }}" secrets_user: "{{ app_user }}" secrets_group: "{{ app_user }}" secrets_vars: - "miniflux_database_url" - "miniflux_admin_user" - "miniflux_admin_password" - "miniflux_oidc_client_id" - "miniflux_oidc_client_secret" - "miniflux_postgres_password" - name: "Copy docker compose file" ansible.builtin.template: src: "./files/{{ app_name }}/docker-compose.template.yml" dest: "{{ base_dir }}/docker-compose.yml" owner: "{{ app_user }}" group: "{{ app_user }}" mode: "0640" - name: "Copy backup script" ansible.builtin.template: src: "./files/{{ app_name }}/backup.template.sh" dest: "{{ base_dir }}/backup.sh" owner: "{{ app_user }}" group: "{{ app_user }}" mode: "0750" - name: "Run application with docker compose" community.docker.docker_compose_v2: project_src: "{{ base_dir }}" state: "present" remove_orphans: true tags: - run-app handlers: # Приложение читает секреты только при старте, а `state: present` не # пересоздаёт контейнер, если docker-compose.yml не изменился, — поэтому # правку применяет только явный рестарт. - name: "Restart application" community.docker.docker_compose_v2: project_src: "{{ base_dir }}" # Только сам miniflux: базу дёргать незачем, пароль postgres читается # из тех же секретов лишь при инициализации кластера. services: - "miniflux_app" state: "restarted" tags: - run-app