handlers рестарта для apprise, dashboard, transcriber, miniflux
- правка bind-моунтнутого конфига раньше не подхватывалась до пересоздания контейнера; теперь template/secrets шлют notify на рестарт - miniflux: убран recreate: always, вместо него точечный рестарт miniflux_app по изменению файлов секретов, postgres больше не дёргается - goaccess: рестарт не нужен, build: always пересоздаёт контейнер по новому id образа — зафиксировано комментарием
This commit is contained in:
@@ -1,30 +0,0 @@
|
||||
# Handlers рестарта для оставшихся приложений
|
||||
|
||||
**Приоритет:** средний
|
||||
|
||||
Паттерн `handlers` + `notify` внедрён в caddyproxy, netdata, authelia, bifrost,
|
||||
remembos (см. задачу `ansible-handlers-restart`, закрыта). Остались плейбуки, где
|
||||
конфиг bind-моунтится в контейнер, но рестарта нет **вообще** — правка конфига без
|
||||
изменения docker-compose.yml не подхватывается до следующего пересоздания
|
||||
контейнера:
|
||||
|
||||
- `playbook-apprise.yml` — `backups.cfg` → `config_dir:/config`.
|
||||
- `playbook-dashboard.yml` — `config/*.yaml` → `config_dir:/app/config`.
|
||||
- `playbook-transcriber.yml` — `config.toml` bind-моунтится **отдельным файлом**
|
||||
(`{{ config_file }}:/config/config.toml:ro`). Худший случай: `template`
|
||||
перезаписывает файл с новым inode, и контейнер продолжает видеть старый до
|
||||
рестарта.
|
||||
- `playbook-miniflux.yml` — файлы секретов роли `secrets` → `secrets_dir:/secrets:ro`,
|
||||
читаются через `*_FILE` при старте.
|
||||
|
||||
Заодно проверить `playbook-goaccess.yml`: конфиг там не монтируется, но
|
||||
`Dockerfile`/`entrypoint.sh` меняются без изменения compose-файла — надо
|
||||
убедиться, что `build: always` действительно пересоздаёт контейнер.
|
||||
|
||||
Отдельный кандидат: caddy сейчас перезапускается целиком, хотя умеет
|
||||
`caddy reload` — применение Caddyfile без разрыва соединений на реверс-прокси,
|
||||
через который идёт весь трафик. В `playbook-caddyproxy.yml` для этого уже лежит
|
||||
закомментированный блок с `docker_compose_v2_exec`.
|
||||
|
||||
Связано: playbook-apprise.yml, playbook-dashboard.yml, playbook-transcriber.yml,
|
||||
playbook-miniflux.yml, playbook-goaccess.yml, playbook-caddyproxy.yml.
|
||||
@@ -56,6 +56,7 @@
|
||||
mode: "0640"
|
||||
# Файл содержит секреты из vault — без no_log их печатает --diff.
|
||||
no_log: true
|
||||
notify: "Restart application"
|
||||
|
||||
- name: "Copy docker compose file"
|
||||
ansible.builtin.template:
|
||||
@@ -72,3 +73,14 @@
|
||||
remove_orphans: true
|
||||
tags:
|
||||
- run-app
|
||||
|
||||
handlers:
|
||||
# Приложение читает конфиги только при старте, а `state: present` не
|
||||
# пересоздаёт контейнер, если docker-compose.yml не изменился, — поэтому
|
||||
# правку конфига применяет только явный рестарт.
|
||||
- name: "Restart application"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ base_dir }}"
|
||||
state: "restarted"
|
||||
tags:
|
||||
- run-app
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
group: "{{ app_user }}"
|
||||
mode: "0640"
|
||||
loop: "{{ config_files }}"
|
||||
notify: "Restart application"
|
||||
|
||||
- name: "Copy docker compose file"
|
||||
ansible.builtin.template:
|
||||
@@ -68,3 +69,14 @@
|
||||
pull: "always"
|
||||
tags:
|
||||
- run-app
|
||||
|
||||
handlers:
|
||||
# Приложение читает конфиги только при старте, а `state: present` не
|
||||
# пересоздаёт контейнер, если docker-compose.yml не изменился, — поэтому
|
||||
# правку конфига применяет только явный рестарт.
|
||||
- name: "Restart application"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ base_dir }}"
|
||||
state: "restarted"
|
||||
tags:
|
||||
- run-app
|
||||
|
||||
@@ -83,6 +83,9 @@
|
||||
- { name: "Dockerfile", mode: "0640" }
|
||||
- { name: "entrypoint.sh", mode: "0750" }
|
||||
|
||||
# Handler рестарта здесь не нужен: конфиг в контейнер не монтируется, а
|
||||
# правку Dockerfile/entrypoint.sh применяет `build: always` — пересобранный
|
||||
# образ получает новый id, и compose пересоздаёт по нему контейнер (проверено).
|
||||
- name: "Run application with docker compose"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ base_dir }}"
|
||||
|
||||
+19
-1
@@ -37,9 +37,13 @@
|
||||
- "{{ 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 }}"
|
||||
@@ -72,7 +76,21 @@
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ base_dir }}"
|
||||
state: "present"
|
||||
recreate: "always"
|
||||
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
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
# Vault-файл: ansible расшифровывает его при копировании, и без no_log
|
||||
# --diff покажет содержимое открытым текстом.
|
||||
no_log: true
|
||||
notify: "Restart application"
|
||||
|
||||
- name: "Copy docker compose file"
|
||||
ansible.builtin.template:
|
||||
@@ -64,3 +65,15 @@
|
||||
remove_orphans: true
|
||||
tags:
|
||||
- run-app
|
||||
|
||||
handlers:
|
||||
# Конфиг монтируется отдельным файлом, а `copy` подменяет его новым inode:
|
||||
# запущенный контейнер продолжает видеть старый файл по старому inode.
|
||||
# Bind-моунт переустанавливается при старте контейнера, поэтому применяет
|
||||
# правку только явный рестарт.
|
||||
- name: "Restart application"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ base_dir }}"
|
||||
state: "restarted"
|
||||
tags:
|
||||
- run-app
|
||||
|
||||
Reference in New Issue
Block a user