TrueNAS GitHub: Настройка, интеграция и автоматизация резервного копирования | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

TrueNAS и GitHub: Полное руководство по интеграции и автоматизации резервного копирования

16 февраля 2026 9 мин. чтения #devops #git #github #nas #truenas #автоматизация #резервное копирование #скрипты
Содержание статьи

Представь, что твоя конфигурация TrueNAS — это живой, дышащий проект. Ты вносишь изменения, настраиваешь тюнинги, создаешь общие папки (SMB/NFS), настраиваешь репликацию ZFS. А потом что-то идет не так, или ты просто хочешь откатиться к предыдущей стабильной версии. Как версионировать эти изменения? Ответ — интеграция с GitHub. Давай разберем, как превратить твой TrueNAS в часть DevOps-пайплайна с помощью Git.

Зачем связывать TrueNAS и GitHub?

Основная цель — версионирование и резервное копирование конфигурации. Файл конфигурации TrueNAS (который можно скачать из веб-интерфейса) — это JSON, идеально подходящий для Git. Но на этом возможности не заканчиваются:

  • Автоматическое резервное копирование конфига по расписанию с отправкой в приватный репозиторий.
  • Хранение и запуск кастомных скриптов (например, для очистки, мониторинга или интеграции со сторонними сервисами).
  • Синхронизация конфигураций между несколькими инстансами TrueNAS (Core, Scale, тестовый и продакшн).
  • Документирование изменений через commit messages. Теперь ты точно будешь знать, что и зачем поменял две недели назад.
Важно: В Git НИКОГДА не следует коммитить пароли или секретные ключи из конфигурации. TrueNAS позволяет экспортировать конфиг без чувствительных данных — этим и нужно пользоваться.

Подготовка окружения: SSH-ключи и доступ

Для безопасного взаимодействия с GitHub из TrueNAS нам понадобится SSH. Работать будем через Shell (либо напрямую в консоли TrueNAS, либо через SSH-доступ к самому серверу).

Шаг 1: Генерация SSH-ключа на TrueNAS

Зайди в Shell TrueNAS (меню Система -> Шелл). Выполни команду для генерации ключа ED25519 (рекомендуется):

bash
ssh-keygen -t ed25519 -C "truenas@myhomelab" -f /root/.ssh/id_ed25519
# На вопрос о passphrase можно нажать Enter (оставить пустым для автоматизации).
# Ключи создадутся: приватный /root/.ssh/id_ed25519 и публичный /root/.ssh/id_ed25519.pub

Шаг 2: Добавление публичного ключа в GitHub

Выведи содержимое публичного ключа и скопируй его:

bash
cat /root/.ssh/id_ed25519.pub
# ssh-ed25519 AAAAC3NzaC... truenas@myhomelab

Затем в GitHub:

  1. Зайди в Settings → SSH and GPG keys → New SSH key.
  2. Вставь ключ, дай понятное имя (например, "TrueNAS Server").
  3. Сохрани.

Шаг 3: Тестирование SSH-подключения

Проверь, что всё работает:

bash
ssh -T git@github.com
# Должен появиться ответ: "Hi username! You've successfully authenticated..."
Внимание: При первом подключении будет запрос о доверии к fingerprint хоста. Нужно ответить yes. Для полной автоматизации можно добавить хост в known_hosts заранее: ssh-keyscan github.com >> /root/.ssh/known_hosts.

Создание репозитория и первый коммит конфигурации

Создай на GitHub новый приватный репозиторий, например, truenas-backup. Затем в Shell TrueNAS:

Шаг 4: Клонирование репозитория и настройка Git

bash
# Перейдем в удобную директорию, например, /mnt/tank/data (замени на свой пул)
cd /mnt/tank/data
# Клонируем репозиторий (URL смотри на странице репозитория GitHub)
git clone git@github.com:yourusername/truenas-backup.git
cd truenas-backup

# Настроим глобально git (если еще не сделано)
git config --global user.email "admin@mydomain.local"
git config --global user.name "TrueNAS Admin"

Шаг 5: Экспорт и коммит конфигурации TrueNAS

В веб-интерфейсе TrueNAS:

  1. Иди в Система → Общие → Сохранить конфигурацию.
  2. СНИМИ ГАЛКУ с "Export Secret Seed" (это исключит пароли и ключи).
  3. Сохрани файл (например, truenas-config-2023-10.db) в клонированную ранее папку репозитория.

Вернись в Shell:

bash
cd /mnt/tank/data/truenas-backup
# Добавим файл конфига в git
git add truenas-config-2023-10.db
# Сделаем коммит
git commit -m "Initial commit: TrueNAS config backup"
# Отправим (запушим) в GitHub
git push origin main

Поздравляю! Твоя конфигурация теперь под контролем версий в GitHub.

Автоматизация: Скрипт для регулярного бэкапа в GitHub

Вручную делать это каждый раз неудобно. Давай создадим скрипт и настроим его выполнение по расписанию через задачи Cron в TrueNAS.

Шаг 6: Создание скрипта автоматического бэкапа

Создай файл /mnt/tank/scripts/backup-to-github.sh:

bash
#!/bin/bash
# Скрипт автоматического бэкапа конфигурации TrueNAS в GitHub репозиторий

# --- Конфигурация ---
REPO_DIR="/mnt/tank/data/truenas-backup"
CONFIG_NAME="truenas-config-$(date +%Y-%m-%d-%H%M).db"
LOG_FILE="/var/log/truenas-github-backup.log"
# --------------------

echo "[$(date)] Starting TrueNAS config backup to GitHub" >> "$LOG_FILE"

# 1. Экспортируем конфигурацию БЕЗ секретных данных
echo "Exporting configuration..." >> "$LOG_FILE"
if midclt call config.save "{\"secretseed\": false}" > "$REPO_DIR/$CONFIG_NAME"; then
    echo "Config exported successfully to $CONFIG_NAME" >> "$LOG_FILE"
else
    echo "ERROR: Failed to export config!" >> "$LOG_FILE"
    exit 1
fi

# 2. Переходим в директорию репозитория
cd "$REPO_DIR" || { echo "ERROR: Cannot cd to $REPO_DIR" >> "$LOG_FILE"; exit 1; }

# 3. Добавляем новый файл конфига в git
git add "$CONFIG_NAME" >> "$LOG_FILE" 2>&1

# 4. Коммитим изменения
git commit -m "Auto-backup: $CONFIG_NAME" >> "$LOG_FILE" 2>&1

# 5. Пушим в удаленный репозиторий (GitHub)
if git push origin main >> "$LOG_FILE" 2>&1; then
    echo "[$(date)] Backup SUCCESS: $CONFIG_NAME pushed to GitHub" >> "$LOG_FILE"
    # Опционально: удаляем старые локальные бекапы, оставляем последние 5
    ls -t truenas-config-*.db | tail -n +6 | xargs rm -f 2>/dev/null
else
    echo "[$(date)] ERROR: Git push failed!" >> "$LOG_FILE"
    exit 1
fi

echo "[$(date)] Backup script finished" >> "$LOG_FILE"

Сделай скрипт исполняемым:

bash
chmod +x /mnt/tank/scripts/backup-to-github.sh

Шаг 7: Настройка задачи Cron в TrueNAS

Иди в веб-интерфейсе: Задачи → Добавить задачу Cron.

  • Описание: "Auto backup config to GitHub"
  • Команда: /mnt/tank/scripts/backup-to-github.sh
  • Пользователь: root
  • Расписание: Например, каждое воскресенье в 3 ночи: 0 3 * * 0
  • Скрыть вывод: Не отмечено (чтобы видеть логи в интерфейсе задач).

Теперь твоя конфигурация будет автоматически сохраняться в GitHub каждую неделю с timestamp в имени файла.

Продвинутые сценарии: Управление кастомными скриптами через GitHub

Git-репозиторий можно использовать как централизованное хранилище для всех твоих скриптов обслуживания TrueNAS. Например, скрипт очистки снимков (snapshots) ZFS.

Пример: Скрипт ротации снимков ZFS

Создай в репозитории файл scripts/zfs-snapshot-rotation.sh:

bash
#!/bin/bash
# Удаляем старые ZFS снапшоты, оставляя:
# - Последние 7 ежедневных снапшотов
# - Последние 4 еженедельных (воскресных)
# - Последние 3 ежемесячных (первого числа)

POOL="tank"
DATASET="tank/data"
SNAP_PREFIX="auto-"

# Удаляем старые ежедневные снапшоты (кроме последних 7)
zfs list -t snapshot -o name -H -r "$DATASET" | \
    grep "@${SNAP_PREFIX}" | \
    grep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}$" | \
    head -n -7 | \
    while read -r snap; do
        echo "Destroying old snapshot: $snap"
        zfs destroy "$snap"
    done

Затем настрой задачу Cron в TrueNAS на выполнение этого скрипта, предварительно вытянув его последнюю версию из GitHub:

bash
cd /mnt/tank/data/truenas-backup
git pull origin main
/mnt/tank/data/truenas-backup/scripts/zfs-snapshot-rotation.sh

Сравнение подходов к интеграции TrueNAS и GitHub

Метод Плюсы Минусы Использование
Ручной экспорт/коммит Полный контроль, простота Нет автоматизации, легко забыть Разовые изменения, тестирование
Cron + Shell-скрипт Полная автоматизация, гибкость Требует настройки SSH и Cron Регулярное резервное копирование конфигурации
Использование GitHub Actions Мощная оркестрация, уведомления Требует открытия API TrueNAS (риск!) Сложные пайплайны CI/CD для скриптов
TrueNAS API + Кастомный клиент Программный контроль, интеграция Высокий порог входа, разработка Корпоративные сценарии, мониторинг

Вопросы и ответы (FAQ)

Можно ли использовать Git, встроенный в TrueNAS SCALE?

TrueNAS SCALE основан на Linux и имеет предустановленный Git. В TrueNAS CORE (на FreeBSD) Git также доступен из коробки или легко устанавливается через pkg. Все команды из этого руководства работают в обоих дистрибутивах.

Безопасно ли хранить конфиг TrueNAS в публичном репозитории GitHub?

Категорически НЕТ. Даже без "Secret Seed" в конфиге могут остаться имена пользователей, пути к данным, сетевые настройки. Всегда используй приватные репозитории. Для дополнительной безопасности можно шифровать конфиг перед коммитом с помощью gpg или age.

Как восстановить конфигурацию TrueNAS из бэкапа в GitHub?

Процесс восстановления состоит из двух шагов:

  1. Скачай нужный файл .db из репозитория (через веб-интерфейс GitHub или команду git checkout).
  2. В веб-интерфейсе TrueNAS иди в Система → Общие → Загрузить конфигурацию, выбери скачанный файл и подтверди перезагрузку.

Помни: восстановление конфига перезапишет все текущие настройки системы.

Можно ли автоматизировать бэкап не только конфига, но и списка установленных приложений/плагинов?

Да! Для TrueNAS SCALE можно добавить в скрипт команду для экспорта списка приложений:

bash
# Экспорт списка установленных приложений (TrueNAS SCALE)
cli -c "app chart_release query" > "$REPO_DIR/installed-apps-$(date +%Y-%m-%d).json"
git add "installed-apps-*.json"

Для TrueNAS CORE (плагины на базе Jail) можно бэкапить список через iocage list.

Что делать, если SSH-ключ не работает (permission denied)?

Проверь цепочку:

  1. Правильность публичного ключа в настройках GitHub.
  2. Права на файлы SSH-ключа на TrueNAS: chmod 600 /root/.ssh/id_ed25519 и chmod 644 /root/.ssh/id_ed25519.pub.
  3. Запускается ли ssh-agent и добавлен ли в него ключ? Для автоматизации в скрипте можно добавить: eval "$(ssh-agent -s)" && ssh-add /root/.ssh/id_ed25519.

Заключение и лучшие практики

Интеграция TrueNAS с GitHub — это не просто бэкап, это переход на DevOps-уровень управления домашней или корпоративной инфраструктурой. Ты получаешь:

  • Историю изменений с комментариями.
  • Автоматизацию рутинных задач (бэкап, очистка).
  • Централизованное хранилище для всех скриптов и конфигов.
  • Возможность быстрого отката к любой рабочей версии конфигурации.

Стартуй с малого: настрой автоматический бэкап конфигурации раз в неделю. Затем добавь в репозиторий свои скрипты обслуживания. Со временем ты сможешь настроить целый пайплайн, где изменение конфига в Git будет триггерить автоматические тесты (если есть тестовая среда) и уведомления в Telegram/Slack.

Помни главное правило: приватный репозиторий и никаких секретов в коммитах. Удачи в настройке!

Поделиться:
Сохранить гайд? В закладки браузера