Создание робота для отправки резервных копий системы хостинга DirectAdmin в сервис Amazon S3.
В этой статье мы расскажем, как создать бота для резервного копирования DirectAdmin и отправить его в Amazon S3. Следите за обновлениями.

Создание робота для отправки резервных копий системы хостинга DirectAdmin в сервис Amazon S3.

В этой статье показано, как использовать бота для отправки резервных копий хостинга DirectAdmin в Amazon S3 и удаления старых файлов. Пошаговые инструкции включают создание S3, настройку IAM и написание скрипта автоматизации.
0 Акции
0
0
0
0

Предпосылки

Для запуска этого бота резервного копирования вам потребуется базовый сервер и готовая среда AWS. Проверьте и предоставьте следующее:

  • доступ по SSH Доступ к серверу DirectAdmin sudo/root.
  • Установка AWS CLI (предпочтительна версия v2) или такие инструменты, как rclone.
  • Один Ведро S3 В AWS с желаемым именем и соответствующим регионом.
  • Пользователь Я При ограниченном доступе к этому ведру или при использовании Роль IAM (При работе на EC2).
  • На сервере достаточно места для временного хранения резервных копий.
  • Активация Политика жизненного цикла В S3 удаление через 7 дней.

Обзор рабочего процесса

Упрощенная схема технологического процесса выглядит следующим образом:

  1. DirectAdmin создает резервную копию и сохраняет ее в локальной папке (например, /home/admin/backups).
  2. Скрипт (бот) запускается по расписанию и загружает резервные копии в S3.
  3. После подтверждения загрузки скрипт загрузит локальные файлы, размер которых превышает указанный. 2 дня Это скрывает возраст.
  4. В S3 один жизненный цикл Настроено сохранение каждого объекта после 7 дней Удаляет.

Пошаговая реализация

1) Создайте S3-корзину и установите жизненный цикл (удалять через 7 дней).

Создать корзину можно через консоль AWS или с помощью AWS CLI. Пример команды для создания корзины (например, region = eu-central-1):

aws s3api create-bucket --bucket my-da-backups-bucket --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1

Пример политики жизненного цикла (файл) lifecycle.json):

{"Rules":[{"ID":"ExpireBackupsAfter7Days","Prefix":"","Status":"Enabled","Expiration":{"Days":7},"NoncurrentVersionExpiration":{"NoncurrentDays":7}}]}

Применение политики с помощью CLI:

aws s3api put-bucket-lifecycle-configuration --bucket my-da-backups-bucket --lifecycle-configuration file://lifecycle.json

Рекомендации: Если вам необходимо снизить затраты на хранение данных, вы можете использовать такие классы хранения, как... СТАНДАРТ_ИА Или INTELLIGENT_TIERING Если включено версионирование, также установите политику NoncurrentVersionExpiration.

2) Создайте политику IAM и назначьте пользователю минимально необходимый уровень доступа.

Пример политики, ограничивающей действие на определенный сегмент (JSON-файл):

{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:PutObject","s3:GetObject","s3:ListBucket","s3:DeleteObject","s3:PutObjectAcl"],"Resource":["arn:aws:s3:::my-da-backups-bucket","arn:aws:s3:::my-da-backups-bucket/*"]}]}

Совет по безопасности: лучше использовать случайные ключи вместо статических. Роль IAM (если ваш сервер — EC2). Также рассмотрите возможность ограничения доступа по IP-адресу или дополнительным условиям.

3) Установите и настройте AWS CLI на сервере.

Пример установки для Debian/Ubuntu и CentOS/RHEL:

sudo apt update && sudo apt install -y awscli
sudo yum install -y awscli

При необходимости настройте ключ доступа:

aws configure --profile da-backup

Если вы используете роль IAM на EC2, настраивать её не нужно.

4) Пример скрипта: upload_and_clean.sh

Этот скрипт загрузит все резервные копии в S3, а затем удалит локальные файлы старше 2 дней, которые всё ещё находятся в S3. (Разместите следующий код в соответствующем пути и сделайте его исполняемым.)

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

# Configuration
BACKUP_DIR="/home/admin/backups"
BUCKET="my-da-backups-bucket"
S3_PREFIX="directadmin"
AWS_PROFILE="da-backup"
LOGFILE="/var/log/da_s3_backup.log"
DAYS_LOCAL=2

# Helpers
log() { echo "$(date '+%F %T') $*" | tee -a "$LOGFILE"; }

aws_cmd() {
  if [ -z "${AWS_PROFILE:-}" ]; then
    aws "$@"
  else
    aws --profile "$AWS_PROFILE" "$@"
  fi
}

# Upload files
log "Starting upload from $BACKUP_DIR to s3://$BUCKET/$S3_PREFIX"
aws_cmd s3 cp "$BACKUP_DIR" "s3://$BUCKET/$S3_PREFIX/" --recursive --only-show-errors --storage-class STANDARD --sse AES256
if [ $? -ne 0 ]; then
  log "Error: upload to S3 failed."
  exit 1
fi
log "Upload completed."

# Remove local files older than DAYS_LOCAL if present in S3
log "Searching for local files older than $DAYS_LOCAL days"
find "$BACKUP_DIR" -type f -mtime +"$DAYS_LOCAL" -print0 | while IFS= read -r -d '' file; do
  base=$(basename "$file")
  s3key="$S3_PREFIX/$base"
  if aws_cmd s3api head-object --bucket "$BUCKET" --key "$s3key" >/dev/null 2>&1; then
    log "Removing local file: $file (found in S3)"
    rm -f "$file" && log "Deleted: $file" || log "Error deleting: $file"
  else
    log "S3 object not found: s3://$BUCKET/$s3key — not removed locally."
  fi
done

log "Operation finished."

Совет: Сохраните файл скрипта, например, в /usr/local/bin/upload_and_clean.sh Положите и с chmod +x Выполнить. Путь BACKUP_DIR Измените настройки в соответствии с параметрами DirectAdmin.

5) Планирование автоматического выполнения (с помощью Cron или таймера systemd)

Для запуска ежедневно в 02:00 с помощью cron:

0 2 * * * /usr/local/bin/upload_and_clean.sh >> /var/log/da_s3_backup.log 2>&1

Если хотите, можете. таймер systemd Разработано для лучшего контроля и ведения журналов.

6) Проверка и обеспечение успешного завершения операции.

Проверьте журналы в /var/log/da_s3_backup.log И проверьте файлы в S3:

Чтобы просмотреть список файлов в S3:

aws s3 ls s3://my-da-backups-bucket/directadmin

Проверьте период жизненного цикла в консоли или с помощью команды CLI, чтобы убедиться, что удаление произойдет через 7 дней.

Расширенные возможности и улучшения

  • Многокомпонентная загрузка Для больших файлов: AWS CLI поддерживает это автоматически, но для очень больших файлов вы можете изменить настройки параллельного доступа.
  • Использование SSE-KMS Для шифрования с использованием корпоративного ключа KMS: aws s3 cp От --sse aws:kms --sse-kms-key-id "arn:aws:kms:..."" Использовать.
  • Активировать Блокировка объекта S3 А также версионирование, если вам нужна защита от нежелательного удаления.
  • Если исходящий трафик обходится дорого, разместите сервер рядом с регионом S3 или в инфраструктуре с прямым подключением.
  • Добавьте уведомление о сбое загрузки, используя AWS SNS или Webhook, для отправки сообщения в Slack/на электронную почту.

Важные советы по безопасности

Несколько важных советов по обеспечению безопасности резервных копий:

  • Наименьшие привилегии: Используйте минимальные права доступа для IAM.
  • Избегайте статических ключей: Не храните ключи доступа в текстовом файле; если вы используете EC2, используйте роль IAM.
  • Шифрование: Используйте шифрование на стороне сервера (SSE) или шифрование перед загрузкой (шифрование gpg или rclone).
  • Ведение журнала: Включите журналы доступа S3 и CloudTrail для записи каждой операции.

Тестирование систем мониторинга, оповещения и аварийного восстановления (DR).

Рекомендации по обеспечению бесперебойной работы:

  • Регулярно тестируйте процесс восстановления резервных копий из S3 на сервер и включите это тестирование в свой ежемесячный график.
  • Использование Инвентарь S3 и CloudWatch Для мониторинга скорости загрузки и ошибок.
  • Настройте оповещение на случай ошибки или сбоя загрузки.

Сравнение вариантов: awscli против rclone против s3fs

AWS CLIПростой, популярный и удобный. Поддерживает жизненный цикл AWS и шифрование.

rcloneДополнительные функции для синхронизации, шифрования на стороне клиента и управления пропускной способностью. Подходит, если вам необходимо ограничить пропускную способность или зашифровать данные перед загрузкой.

s3fs: Монтирует хранилище как файловую систему, но может иметь более низкую производительность и стабильность при работе с большими файлами резервных копий.

Почему важно выбрать правильное местоположение?

Правильный выбор местоположения может сократить время загрузки и затраты на исходящий трафик. Выбор местоположения, близкого к региону S3, уменьшит задержку и время работы.

Если вам необходима дополнительная защита, выделенное подключение или повышение производительности, вам может помочь инфраструктура с несколькими точками доступа и специальными функциями.

Пример работы: Настройка для торговли на VPS.

  • Для уменьшения задержки выбирайте местоположение, расположенное близко к бирже или торговому серверу.
  • Включите защиту от DDoS-атак для соответствующего сервера.
  • Переместите резервные копии DirectAdmin в ближайший S3, чтобы сократить время резервного копирования.

Резюме и заключительные пункты

Создание бота включает в себя три основных этапа: безопасную загрузку в S3, локальное удаление старых файлов, 2 дня После подтверждения загрузки и настройки жизненного цикла хранения в S3 7 дней.

Используйте IAM с минимальным доступом, шифрованием и соответствующим мониторингом. Всегда проверяйте процесс восстановления, чтобы гарантировать возможность восстановления.

Примеры файлов и ресурсов

Часто задаваемые вопросы

Вам также может понравиться

Как мы запустили собственную модель чат-бота с дешевым сервером Hetzner

Введение В наши дни запуск выделенного чат-бота на персональном сервере является обычной практикой, как по экономическим причинам, так и из-за…

Лучший конструктор сайтов 2024 года

Введение С помощью конструктора сайтов каждый может создать свой собственный сайт, не имея для этого многолетнего опыта в дизайне или программировании…

Node.js или PHP: какой бэкенд подойдет для вашего следующего проекта?

Введение. Битва между двумя важнейшими технологиями бэкенд-разработки — Node.js и PHP — продолжается. Node.js…