🤖 Pull request created from `various-fixes` containing PageHead
breadcrumbs and navigation alignment fixes, Umami analytics proxy, and
infrastructure updates.
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. Процесс проходит следующие этапы:
- Инициализирует репозиторий (если он ещё не создан).
- Считывает compose-метки
restic.*(restic.enable,restic.backup.pathsи т. д.), чтобы определить, какие сервисы и пути нужно сохранять. - Создаёт единый снимок restic для всех выбранных путей хоста (
--host=APEX_NODE_HOST,--compression max). - Применяет политику хранения (
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-соединения от прокси.
См. также: