- 13 конвенций по осям arch / lang / stack / common; репозитории берут оттуда копии в свой docs/conventions/ и коммитят их у себя - conv — синхронизация копий: add / status / diff / pull / push, локальные регионы исключены из сравнения, поэтому расхождение не даёт шума
3.9 KiB
3.9 KiB
status, extends
| status | extends |
|---|---|
| рекомендуемая | arch/app-directories.md |
Категории директорий: реализация в Ansible
Как arch/app-directories.md раскладывается на сервере плейбуком.
Переменные и создание
- Директория объявляется переменной плейбука внутри
base_dir, имя переменной оканчивается на_dir. Для случая «одна директория на категорию» этоconfig_dir,data_dir,cache_dir; когда категория состоит из нескольких, имя даётся по содержимому (media_dir,uploads_dir,dumps_dir), а категория читается из списка бэкапа. - Директории создаются одной задачей циклом по списку: список и есть декларация того, что приложение пишет на диск. Разнесение по нескольким задачам прячет эту декларацию.
- Владелец — пользователь, от имени которого работает приложение. Модель
выбирается на репозиторий: выделенный пользователь на приложение
(
app_owner_uid == app_owner_gid) или общийprimary_user. Какая модель принята — фиксируется ниже.
Список бэкапа
Плейбук кладёт в base_dir файл backup-targets — его читает оркестратор
бэкапов. Строки списка собираются из тех же переменных *_dir, что и
задача создания директорий: тогда переименование или перенос директории не
может разойтись с бэкапом.
В список идут директории категории «данные», включая директорию дампов, и не идут конфигурация и кеш.
Монтирование в контейнер
- Конфигурация —
:ro, где приложение это позволяет. Приложение, которое переписывает свой конфиг, монтируется на запись — это отступление, и оно записывается. - Данные и кеш — на запись.
docker-compose.ymlостаётся в корнеbase_dir: туда смотритproject_srcмодуляdocker_compose_v2.
Секреты
Секреты приходят из vault-переменных и рендерятся шаблоном. Два способа, в порядке предпочтения:
- В файл конфигурации (роль
secrets) — предпочтительный: секрет лежит под0600у пользователя приложения, не наследуется дочерними процессами и не виден вdocker inspect. - В
environment:compose-файла — когда приложение не умеет читать секреты из файла. Задача рендера идёт сno_log: true.
Второй способ — вынужденный: он кладёт секрет в метаданные контейнера и в файл compose на диске. Приложение, умеющее файловые секреты, переводится на первый способ при ближайшем касании.