feat: предупреждение о доменах caddy.conf, которые не указывают на сервер
app_deploy возвращает домены сайтов из caddy.conf (caddy adapt), App после деплоя сверяет их A/AAAA с адресом сервера, бот предупреждает: сайт не откроется, сертификат не выпустится. Со своим CA сверки нет. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
803a6bf9f2
commit
adcfb48750
7 files changed
+118
-8
No files matched your search
@@ -2,6 +2,7 @@
|
||||
#
|
||||
# 1. Файлы распаковываются во временную папку, compose-файл, его порты (app_ports.py: не заняты ли на сервере)
|
||||
# и caddy.conf (caddy validate на копии конфигурации с новым блоком) проверяются там: ошибка - приложение не тронуто.
|
||||
# Домены сайтов из caddy.conf (caddy adapt) возвращаются в результате.
|
||||
# 2. Папка приложения приводится к присланной копии по месту (app_sync.py), лишние файлы удаляются.
|
||||
# 3. docker compose up -d --remove-orphans: compose сам пересоздает сервисы с изменившейся конфигурацией.
|
||||
# Упал (например, образ не скачался) - файлы уже новые, отката нет.
|
||||
@@ -75,6 +76,17 @@
|
||||
changed_when: false
|
||||
when: new_caddy_conf.stat.exists
|
||||
|
||||
# домены сайтов из блока: вызывающий проверит, что они указывают на сервер, иначе сертификат не выпустится
|
||||
- name: Read caddy.conf domains
|
||||
ansible.builtin.command: >-
|
||||
docker compose exec -T caddy caddy adapt --adapter caddyfile
|
||||
--config /etc/caddy/.check/sites/{{ (app + '.caddy') | quote }}
|
||||
args:
|
||||
chdir: "{{ apps_dir }}/caddy"
|
||||
register: caddy_adapt
|
||||
changed_when: false
|
||||
when: new_caddy_conf.stat.exists
|
||||
|
||||
- name: Sync files
|
||||
ansible.builtin.command: python3 {{ apps_dir }}/.serverus/app_sync.py {{ stage | quote }} {{ app_dir | quote }}
|
||||
register: sync_out
|
||||
@@ -102,6 +114,12 @@
|
||||
ansible.builtin.set_fact:
|
||||
sync: "{{ sync_out.stdout | from_json }}"
|
||||
services: "{{ services_out.stdout_lines }}"
|
||||
domains: >-
|
||||
{{ [] if caddy_adapt is skipped else
|
||||
((caddy_adapt.stdout | from_json).get('apps', {}).get('http', {}).get('servers', {}) | dict2items
|
||||
| map(attribute='value') | selectattr('routes', 'defined') | map(attribute='routes') | flatten(levels=1)
|
||||
| selectattr('match', 'defined') | map(attribute='match') | flatten(levels=1)
|
||||
| selectattr('host', 'defined') | map(attribute='host') | flatten(levels=1) | unique | list) }}
|
||||
# новое приложение: up только что создал все контейнеры с присланными настройками
|
||||
recreate: >-
|
||||
{{ [] if (sync_out.stdout | from_json).created else
|
||||
@@ -181,3 +199,4 @@
|
||||
removed: "{{ sync.removed }}"
|
||||
recreated: "{{ recreate }}"
|
||||
services: "{{ services }}"
|
||||
domains: "{{ domains }}"
|
||||
Reference in new issue
Block a user