- Предпосылки
- Обзор рабочего процесса
- Пошаговая реализация
- 1) Создайте S3-корзину и установите жизненный цикл (удалять через 7 дней).
- 2) Создайте политику IAM и назначьте пользователю минимально необходимый уровень доступа.
- 3) Установите и настройте AWS CLI на сервере.
- 4) Пример скрипта: upload_and_clean.sh
- 5) Планирование автоматического выполнения (с помощью Cron или таймера systemd)
- 6) Проверка и обеспечение успешного завершения операции.
- Расширенные возможности и улучшения
- Важные советы по безопасности
- Тестирование систем мониторинга, оповещения и аварийного восстановления (DR).
- Сравнение вариантов: awscli против rclone против s3fs
- Почему важно выбрать правильное местоположение?
- Пример работы: Настройка для торговли на VPS.
- Резюме и заключительные пункты
- Примеры файлов и ресурсов
- Часто задаваемые вопросы
Предпосылки
Для запуска этого бота резервного копирования вам потребуется базовый сервер и готовая среда AWS. Проверьте и предоставьте следующее:
- доступ по SSH Доступ к серверу DirectAdmin sudo/root.
- Установка AWS CLI (предпочтительна версия v2) или такие инструменты, как rclone.
- Один Ведро S3 В AWS с желаемым именем и соответствующим регионом.
- Пользователь Я При ограниченном доступе к этому ведру или при использовании Роль IAM (При работе на EC2).
- На сервере достаточно места для временного хранения резервных копий.
- Активация Политика жизненного цикла В S3 удаление через 7 дней.
Обзор рабочего процесса
Упрощенная схема технологического процесса выглядит следующим образом:
- DirectAdmin создает резервную копию и сохраняет ее в локальной папке (например,
/home/admin/backups). - Скрипт (бот) запускается по расписанию и загружает резервные копии в S3.
- После подтверждения загрузки скрипт загрузит локальные файлы, размер которых превышает указанный. 2 дня Это скрывает возраст.
- В 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 awsclisudo 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 с минимальным доступом, шифрованием и соответствующим мониторингом. Всегда проверяйте процесс восстановления, чтобы гарантировать возможность восстановления.
Примеры файлов и ресурсов
- Образец lifecycle.json и файл сценария upload_and_clean.sh Она доступна в тексте выше.
- Документация по жизненному циклу AWS S3
- Документация AWS CLI









