前提条件
このバックアップボットを実装するには、基本的なサーバーとAWS環境を準備する必要があります。以下の項目を確認してください。
- SSHアクセス DirectAdminサーバーへのアクセス sudo/ルート.
- インストール AWS CLI (バージョンv2推奨)または次のようなツール rclone.
- 1つ S3バケット AWS で希望の名前と適切なリージョンを設定します。.
- ユーザー 私は そのバケットへのアクセスが制限されているか、 IAM ロール (EC2 上で実行している場合)。.
- バックアップを一時的に保存するのに十分なサーバー上のスペース。.
- アクティベーション ライフサイクルポリシー 7日後に削除するためにS3に保存されます。.
ワークフローの概要
簡略化されたプロセス フローは次のとおりです。
- DirectAdmin はバックアップを作成し、それをローカル フォルダー (例:
/home/admin/バックアップ). - スクリプト (ボット) はスケジュールに従って実行され、バックアップを S3 にアップロードします。.
- アップロードが完了したら、スクリプトは 2日間 年齢を削除します。.
- S3で1 ライフサイクル 各オブジェクトを後から保持するように設定されています 7日間 削除します。.
段階的な実装
1) S3バケットを作成し、ライフサイクルを設定する(7日後に削除)
バケットはAWSコンソールから作成するか、AWS CLIを使用して作成できます。バケット作成コマンドの例(例:リージョン = eu-central-1):
aws s3api create-bucket --bucket my-da-backups-bucket --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1ライフサイクルポリシーの例(ファイル) ライフサイクル.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推奨事項: ストレージコストを削減する必要がある場合は、次のようなストレージクラスを使用できます。 標準_IA または インテリジェントティアリング バージョン管理が有効になっている場合は、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-backupEC2 で IAM ロールを使用している場合は、設定する必要はありません。.
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 実行パス バックアップディレクトリ DirectAdmin 設定に応じて変更します。.
5) 自動実行のスケジュール設定(Cron または systemd タイマー)
cron を使用して毎日 02:00 に実行するには:
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インベントリ そして クラウドウォッチ アップロード速度とエラーを監視します。.
- エラーまたはアップロード失敗が発生した場合にアラートを設定します。.
オプションの比較: awscli vs rclone vs s3fs
AWS CLI: シンプルで人気があり、便利です。AWSライフサイクルと暗号化をサポートします。.
rclone: 同期、クライアント側暗号化、帯域幅制御などの機能が充実しています。帯域幅を制限したり、アップロード前に暗号化したりする必要がある場合に最適です。.
s3fs: バケットをファイルシステムとしてマウントしますが、大きなバックアップ ファイルの場合はパフォーマンスと安定性が低下する可能性があります。.
適切な場所を選択することがなぜ重要なのでしょうか?
適切なロケーションを選択することで、アップロード時間と送信トラフィックコストを削減できます。S3リージョンに近いロケーションを選択すると、レイテンシと操作時間が短縮されます。.
追加の保護、専用の接続、またはパフォーマンスの違いが必要な場合は、複数の場所と特別な機能を備えたインフラストラクチャが役立ちます。.
運用例: VPS取引のセットアップ
- 待ち時間を短縮するには、取引所または取引サーバーに近い場所を選択してください。.
- 関連するサーバーの DDoS 保護を有効にします。.
- バックアップ時間を短縮するには、DirectAdmin バックアップを近くの S3 に移動します。.
まとめと最終ポイント
ボットの構築には3つの主要な部分があります: S3への安全なアップロード、古いファイルのローカル削除、 2日間 アップロードを確認し、S3で保持ライフサイクルを設定した後 7日間.
IAMは最小限のアクセス、暗号化、適切な監視の下で使用してください。復旧を確実にするために、必ず復元プロセスをテストしてください。.
サンプルファイルとリソース
- サンプル ライフサイクル.json スクリプトファイル アップロードとクリーン.sh 上記のテキストでご覧いただけます。.
- AWS S3 ライフサイクルドキュメント
- AWS CLI ドキュメント









