Files
ermnvldmr.com/services/docs/content/ru/apex/guides/host-operations.md
T
deytenit 9ee672504f fix: PageHead header alignment, analytics proxy, and infra improvements (#64)
🤖 Pull request created from `various-fixes` containing PageHead
breadcrumbs and navigation alignment fixes, Umami analytics proxy, and
infrastructure updates.
2026-10-24 16:52:49 +03:00

8.1 KiB

title, description, weight
title description weight
Эксплуатация узла Операции day-2: конфигурирование, композиции, резервные копии и синхронизация репозитория. 24

Контекст: после первоначальной настройки узел управляется исключительно через движок. В этом руководстве описаны регулярные операции и их фактические действия на хосте.

Конфигурирование хоста

Команда apex configure выполняет все шаги настройки в строгой последовательности. Если изменился только один слой, нужный шаг можно вызвать отдельно:

Шаг Эффект
configure/base Готовит базовую систему Debian: обновляет списки пакетов, ставит базовые утилиты (curl, wget, git, rsyslog), запускает службу rsyslog, устанавливает ufw и вспомогательный скрипт ufw-docker в ~/.local/bin/ufw-docker.
configure/ufw Применяет правила хоста, настраивает цепочки правил ядра и пробрасывает правила для контейнеров через ufw-docker. Поддерживает флаг --dry-run.
configure/crowdsec Устанавливает CrowdSec (если он ещё не поставлен), копирует configs/crowdsec/ в /etc/crowdsec/, ставит коллекции и firewall bouncer (если включён в настройках). Поддерживает флаг --dry-run.
configure/cron Рендерит configs/cron/crontab через шаблонизатор и устанавливает расписание. Предусмотрены предпросмотр, аварийная остановка при пустом результате (код выхода 65) и откат при ошибке установки. Поддерживает флаг --dry-run.
configure/systemd Рендерит файлы первого уровня из configs/systemd/ в /etc/systemd/system/, перезагружает конфигурацию systemd (daemon-reload) и активирует каждый юнит .service. Поддерживает флаг --dry-run.
configure/routing Включает пересылку IP-пакетов (forwarding), задаёт правило и таблицу маршрутизации (policy-routing) по метке fwmark для границы анклава. Шаг идемпотентен.

После configure/ufw обязательно перезапустите службу: sudo systemctl restart ufw. Действие выведет напоминание и проверит, что порт SSH остаётся открытым.

Жизненный цикл композиции

apex compose up            # сначала core, затем сервисы по алфавиту
apex compose down          # обратный порядок
apex compose restart
apex compose up --dry-run  # только напечатать команды

Все дополнительные аргументы движок передаёт напрямую в docker compose каждого проекта. Файлы .env и apex.env проектных каталогов подставляются автоматически при их наличии.

Резервные копии

apex backup/run "$(cat <path-to-telegram-url-file>)"

Команда запускает resticontainer в режиме one-shot под профилем compose manual. Процесс проходит следующие этапы:

  1. Инициализирует репозиторий (если он ещё не создан).
  2. Считывает compose-метки restic.* (restic.enable, restic.backup.paths и т. д.), чтобы определить, какие сервисы и пути нужно сохранять.
  3. Создаёт единый снимок restic для всех выбранных путей хоста (--host = APEX_NODE_HOST, --compression max).
  4. Применяет политику хранения (forget --prune) и отправляет уведомление.

Если ни один сервис с меткой restic.* не сформировал нового снимка, действие завершается с ошибкой. Полный процесс описан в разделе Concept: Tiered storage. Чтобы резервное копирование и отправка отчётов в Telegram выполнялись автономно, добавьте команду в configs/cron/crontab.

Синхронизация репозитория (capture-up)

apex sync/repository <telegram-bot-url>

Действие фиксирует изменения рабочей копии в ветке sync/<node>, выполняет rebase на origin/main и отправляет ветку через force-push с lease. Затем CI автоматически вливает изменения обратно в main. Этот механизм (capture-up) сохраняет актуальное состояние узла в репозиторий.

Действие прерывается с подробным сообщением, если подмодуль commons содержит незакоммиченные изменения или каталог compositions/ отсутствует. При конфликтах rebase выполнение останавливается для ручного вмешательства. Подробнее архитектурная модель описана в разделе Concept: Framework architecture.

Мониторинг обновлений

apex sync/packages <telegram-bot-url>

Формирует единую сводку в Telegram о доступных обновлениях пакетов apt и устаревших образах контейнеров (локальные дайджесты сравниваются с реестром через skopeo). Действие ничего не меняет на хосте — это исключительно плановая проверка.

Извлечение сертификатов

apex utils/extract-traefik-certs <acme.json> <dest-dir> [telegram-bot-url]

Экспортирует сертификаты из ACME-хранилища граничного прокси в пары fullchain.pem и privkey.pem для каждого домена (с помощью утилиты в контейнере). Скрипт ограничивает права доступа к ключам до 600 и передаёт владение файлами запустившему пользователю. Это нужно сервисам, которым требуются исходные PEM-файлы вместо готового TLS-соединения от прокси.


См. также: