iac/aero
2026-07-23 18:21:11 +03:00
..
roles Update frontend image in .env.example for contour compatibility 2026-07-23 18:21:11 +03:00
.gitattributes Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
.gitignore Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
ansible.cfg Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
deploy.yml Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
inventory.ini Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
pyproject.toml Update frontend image in .env.example for contour compatibility 2026-07-23 18:21:11 +03:00
README.md Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
requirements.yml Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
site.yml Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00
uv.lock Add base and sarex_stack Ansible roles with provisioning for Docker hosts, system configuration, Docker installation, sarex-stack deployment, and secrets handling. 2026-07-23 15:04:14 +03:00

aero — Ansible-провижининг docker-хостов

Ansible-роль docker, устанавливающая на сервер:

  • Docker Engine (docker-ce, docker-ce-cli);
  • containerd;
  • docker compose и (где есть) buildx;
  • обновление пакетов системы при старте.

Ветка установки выбирается автоматически по пакетному менеджеру хоста:

Семейство Пакетный менеджер Пакеты
Ubuntu / Debian apt docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
RedOS / RHEL dnf docker-ce docker-ce-cli containerd docker-compose

Имена пакетов в RedOS отличаются (containerd, docker-compose), поэтому списки разнесены по семействам в roles/docker/defaults/main.yml.

Важно: где запускать

Ansible не работает как управляющий узел на нативном Windows (нужен POSIX). Запуск — из WSL (Ubuntu). Управление окружением — через uv.

Разовая настройка WSL

# 1. uv внутри WSL
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.local/bin/env

# 2. Если DNS в WSL не резолвит (curl: Could not resolve host):
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
printf "\n[network]\ngenerateResolvConf = false\n" | sudo tee -a /etc/wsl.conf

# 3. SSH-ключ в домашку WSL с правами 600 (на /mnt/c ssh отвергает ключ)
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cp /mnt/c/Users/user/.ssh/local/id_ed25519 ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519

Запуск

Из WSL, в каталоге проекта (/mnt/c/.../iac/aero):

uv sync                      # окружение (uv сам поставит нужный Python)
uv run poe ping              # проверка SSH + sudo
uv run poe check             # dry-run (--check --diff), ничего не меняет
uv run poe play              # боевой прогон роли

Одной командой всё сразу: uv run poe up (syncgalaxyplay).

ANSIBLE_CONFIG и UV_LINK_MODE заданы в [tool.poe.env] — на диске C: (через /mnt/c) права 0777, и ansible игнорирует ansible.cfg в world-writable каталоге, поэтому путь к конфигу передаётся явно.

Развёртывание sarex-стека (роль sarex_stack)

Копирует docker-compose.yaml, nginx/ и postgres/initdb в /root/sarex, рендерит .env из .env.example со сгенерированными паролями и доменами *.sarex.local.lonsdaleites.ru, генерирует самоподписанный TLS-сертификат на все три домена (nginx/certs/selfsigned.{crt,key}).

uv run ansible-playbook deploy.yml --check --diff   # dry-run
uv run ansible-playbook deploy.yml                  # подготовка файлов
  • Пароли генерируются один раз и персистятся на control-node в aero/.secrets/ (gitignored) — повторный прогон не меняет .env (идемпотентно).

  • Только пароли и .env, без остального деплоя — отдельной командой:

    uv run poe gen-env                          # сгенерировать/обновить .env
    rm -rf .secrets/<host> && uv run poe gen-env  # перегенерировать пароли заново
    
  • Стек по умолчанию не поднимается (sarex_compose_up: false). Образы — приватные (cr.yandex), поэтому сперва docker login cr.yandex на хосте, затем cd /root/sarex && docker compose up -d (или прогон с -e sarex_compose_up=true).

  • Домены нужно завести в DNS/hosts, чтобы они резолвились на хост.

Galaxy-коллекции (опционально)

Коллекции из requirements.yml (community.docker и др.) не требуются для работы роли — она использует только модули ansible.builtin. Ставятся при необходимости:

uv run poe galaxy

Настройка

Хосты — в inventory.ini (группа docker_hosts). Root — через sudo (become). Если sudo с паролем — добавьте --ask-become-pass:

uv run poe play -- --ask-become-pass

Переменные роли (roles/docker/defaults/main.yml):

Переменная По умолчанию Назначение
docker_update_packages true Обновлять пакеты при старте
docker_upgrade_dist false Полный dist-upgrade (только Debian)
docker_service_enabled true Автозапуск службы docker
docker_service_state started Состояние службы после прогона
docker_users [] Пользователи в группу docker (без sudo)
docker_redhat_add_ce_repo false Внешний репозиторий Docker CE (RHEL; RedOS не нужен)

Структура

aero/
├── pyproject.toml            # окружение uv + poe-задачи
├── ansible.cfg               # настройки ansible (inventory, become)
├── requirements.yml          # galaxy-коллекции (опционально)
├── inventory.ini             # хосты
├── site.yml                  # плейбук
└── roles/docker/
    ├── defaults/main.yml     # переменные и списки пакетов по семействам
    ├── tasks/
    │   ├── main.yml          # диспетчер по пакетному менеджеру + общие шаги
    │   ├── debian.yml        # ветка apt (Ubuntu/Debian)
    │   └── redhat.yml        # ветка dnf (RedOS/RHEL)
    ├── handlers/main.yml     # restart docker
    └── meta/main.yml         # метаданные и зависимости