iac/aero/pyproject.toml
emelinda 75d1fba14a Compose: убран прикладной стек — он давно переехал в k3s
В docker-compose.yaml описывались 25 сервисов, а на хосте существовали
контейнеры только для 9. Остальные 16 — django, celery, frontend, s3-proxy,
processing-api/frontend, engine, measurements, nginx и их зависимости
(postgres, redis, rabbitmq, minio с init-контейнерами) — развёрнуты в k3s и
описаны в apps/ и infrastructure/. Дубликат не просто лежал мёртвым грузом,
а расходился с кластером и вводил в заблуждение.

Что это был именно мёртвый груз, а не «выключенный на время» стек:

  * контейнеров не существовало вовсе — не Exited, а не создавались;
  * именованных томов sarex-postgres-data, sarex-redis-data,
    sarex-rabbitmq-data, sarex-minio-data в docker volume ls нет;
  * стек был взаимно несовместим: nginx публиковал 80/443, те же порты
    публикует k3s-server (внутри его контейнера на них сидит istio
    ingressgateway), и docker compose up nginx упал бы на bind;
  * подъём был выключен по умолчанию (sarex_compose_up: false).

Заодно убрано всё, что обслуживало только удалённые сервисы:

  * sarex_services, sarex_compose_up, задача up и poe-таски stack/up;
  * оба handler'а (пересоздание nginx/backend/celery) — файл handlers
    остался пустым и удалён;
  * генерация самоподписанного сертификата и cert_dir: TLS выписывает
    cert-manager внутри кластера, верхнего nginx больше нет;
  * каталоги nginx/, backend/, engine/ и задачи их копирования;
  * k3s/manifests/processing — DNS-мост на IP compose-postgres/minio,
    которых больше не существует (в кластере он и не был создан).

poe install теперь идёт через platform, а не через удалённый stack — это
заодно чинит старую дыру, из-за которой install не поднимал подложку.

Проверено: docker compose config отдаёт ровно 9 сервисов, совпадающих с
docker ps на aero-01; ansible-lint новых замечаний не даёт.
2026-08-10 12:55:04 +03:00

110 lines
5.7 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[project]
name = "aero"
version = "0.1.0"
description = "Ansible-провижининг docker-хостов (docker, docker-compose, containerd)"
requires-python = ">=3.11"
dependencies = [
"ansible-core>=2.17",
]
[dependency-groups]
dev = [
"ansible-lint>=24.0",
"poethepoet>=0.29",
]
[tool.uv]
package = false
# Общее окружение для всех poe-задач.
# ANSIBLE_CONFIG задаётся явно: на /mnt/c (диск Windows) права 0777, и ansible
# из соображений безопасности игнорирует ansible.cfg в world-writable каталоге.
[tool.poe.env]
ANSIBLE_CONFIG = "${POE_ROOT}/ansible.cfg"
UV_LINK_MODE = "copy"
# Таск-раннер poethepoet. Запуск: uv run poe <task>
[tool.poe.tasks]
sync = "uv sync"
galaxy = "ansible-galaxy collection install -r requirements.yml"
ping = "ansible docker_hosts -m ping"
# Провижининг хоста: базовые пакеты + docker/containerd + запуск службы
provision = "ansible-playbook site.yml"
check = "ansible-playbook site.yml --check --diff"
# Деплой конфигурации: файлы, .env с паролями, сертификаты, docker login
deploy = "ansible-playbook deploy.yml"
deploy-check = "ansible-playbook deploy.yml --check --diff"
# Деплой + поднять GitOps-подложку: k3s + gitea + vault + bootstrap FluxCD.
# Без --tags намеренно: подложке нужны .env, docker-compose.yaml и vault/config,
# которые кладут нетегированные задачи роли (при --tags они были бы пропущены).
platform = "ansible-playbook deploy.yml -e aero_platform_up=true"
# Только генерация паролей и рендер .env на хосте (без копирования/сертификатов)
gen-env = "ansible-playbook deploy.yml --tags env"
# docker login в приватный реестр по ключу json_key
login = "ansible-playbook deploy.yml --tags login"
# Показать логин+пароль администратора платформы. Саму учётку создаёт под
# backend при старте (apps/django/aero), эта задача только печатает креды.
superuser = "ansible-playbook deploy.yml -e sarex_create_superuser=true --tags superuser"
# Перекатить нагрузки, конфигурация которых лежит в ConfigMap. Нужно после
# правки nginx-configmap: Flux обновит ConfigMap, но под продолжит работать со
# старым содержимым — в шаблоне пода нет хеша конфига, спецификация не меняется
# и Kubernetes не видит причин его пересоздавать. Список — sarex_reload_workloads.
reload = "ansible-playbook deploy.yml -e sarex_reload=true --tags reload"
# Досоздать базы, появившиеся в contour.databases после запуска СУБД. Бутстрап
# заводит базы только при старте пода postgresql, поэтому на живом кластере
# новая база иначе не появится: Flux зелёный, а приложение падает с
# FATAL: database "..." does not exist. Идемпотентно.
dbsync = "ansible-playbook deploy.yml -e sarex_dbsync=true --tags dbsync"
lint = "ansible-lint"
# --- Операционные задачи на хосте (без полного деплоя) ----------------------
[tool.poe.tasks.ps]
cmd = "ansible docker_hosts -m ansible.builtin.shell -a 'docker compose ps chdir=/root/sarex'"
help = "Статус стека на хосте (docker compose ps)"
[tool.poe.tasks.flux-status]
cmd = "ansible docker_hosts -m ansible.builtin.shell -a 'docker compose exec -T k3s-server kubectl -n flux-system get kustomizations,gitrepositories,pods chdir=/root/sarex'"
help = "Состояние FluxCD в k3s (kustomizations, источники, поды)"
[tool.poe.tasks.vault-status]
cmd = "ansible docker_hosts -m ansible.builtin.shell -a 'docker compose exec -T vault-init vault status chdir=/root/sarex'"
help = "Состояние Vault (инициализирован / распечатан)"
[tool.poe.tasks.pull]
cmd = "ansible docker_hosts -m ansible.builtin.shell -a 'docker compose pull ${service} chdir=/root/sarex'"
help = "Стянуть образы: uv run poe pull [service]"
[[tool.poe.tasks.pull.args]]
name = "service"
positional = true
default = ""
[tool.poe.tasks.logs]
cmd = "ansible docker_hosts -m ansible.builtin.shell -a 'docker compose logs --no-color --tail ${tail} ${service} chdir=/root/sarex'"
help = "Логи сервиса(ов): uv run poe logs [service] [--tail N]"
[[tool.poe.tasks.logs.args]]
name = "service"
positional = true
default = ""
[[tool.poe.tasks.logs.args]]
name = "tail"
options = ["--tail"]
default = "80"
[tool.poe.tasks.restart]
cmd = "ansible docker_hosts -m ansible.builtin.shell -a 'docker compose restart ${service} chdir=/root/sarex'"
help = "Перезапустить сервис: uv run poe restart <service>"
[[tool.poe.tasks.restart.args]]
name = "service"
positional = true
required = true
# Подготовка окружения: uv sync + установка коллекций
[tool.poe.tasks.setup]
sequence = ["sync", "galaxy"]
# Установка с чистого листа: окружение → docker → подложка (k3s+gitea+vault+Flux,
# дальше приложения разворачивает Flux сам) → показать учётку администратора.
[tool.poe.tasks.install]
sequence = ["sync", "galaxy", "provision", "platform", "superuser"]