- Requisitos previos
- Descripción general del flujo de trabajo
- Implementación paso a paso
- 1) Cree un bucket S3 y configure el ciclo de vida (eliminar después de 7 días)
- 2) Cree una política de IAM y un usuario con el acceso menos necesario
- 3) Instalar y configurar AWS CLI en el servidor
- 4) Ejemplo de script: upload_and_clean.sh
- 5) Programación de ejecución automática (temporizador Cron o systemd)
- 6) Verificar y asegurar el éxito de la operación
- Opciones avanzadas y mejoras
- Consejos de seguridad importantes
- Monitoreo, alertas y pruebas de recuperación ante desastres (DR)
- Comparación de opciones: awscli vs rclone vs s3fs
- ¿Por qué es importante elegir la ubicación adecuada?
- Ejemplo operativo: Configuración para el comercio de VPS
- Resumen y puntos finales
- Archivos de muestra y recursos
- Preguntas frecuentes
Requisitos previos
Para implementar este bot de respaldo, necesita tener un servidor básico y un entorno de AWS listo. Verifique y proporcione lo siguiente:
- Acceso SSH Acceso al servidor DirectAdmin sudo/root.
- Instalación CLI de AWS (se prefiere la versión v2) o herramientas como clon.
- Uno Cubo S3 En AWS con un nombre deseado y una región adecuada.
- Un usuario SOY Con acceso limitado a ese depósito o utilizando Rol de IAM (Si se ejecuta en EC2).
- Suficiente espacio en el servidor para almacenar copias de seguridad temporalmente.
- Activación Política de ciclo de vida En S3 para eliminación después de 7 días.
Descripción general del flujo de trabajo
El flujo del proceso simplificado es el siguiente:
- DirectAdmin crea una copia de seguridad y la guarda en una carpeta local (por ejemplo,
/inicio/admin/copias de seguridad). - El script (bot) se ejecuta según un cronograma y carga copias de seguridad en S3.
- Después de asegurar la carga, el script cargará archivos locales que sean más de 2 días Elimina la edad.
- En S3 uno ciclo vital Está configurado para mantener cada objeto después 7 días Elimina.
Implementación paso a paso
1) Cree un bucket S3 y configure el ciclo de vida (eliminar después de 7 días)
Puede crear un bucket desde la consola de AWS o usar la CLI de AWS. Ejemplo de comando para crear un bucket (ejemplo: región = eu-central-1):
aws s3api create-bucket --bucket my-da-backups-bucket --region eu-central-1 --create-bucket-configuration LocationConstraint=eu-central-1Ejemplo de política de ciclo de vida (archivo) ciclo de vida.json):
{"Rules":[{"ID":"ExpireBackupsAfter7Days","Prefix":"","Status":"Enabled","Expiration":{"Days":7},"NoncurrentVersionExpiration":{"NoncurrentDays":7}}]}Aplicar una política con la CLI:
aws s3api put-bucket-lifecycle-configuration --bucket my-da-backups-bucket --lifecycle-configuration file://lifecycle.jsonRecomendaciones: Si necesita reducir los costos de almacenamiento, puede utilizar clases de almacenamiento como ESTÁNDAR_IA O NIVELAR INTELIGENTE Si el control de versiones está habilitado, configure también la política NoncurrentVersionExpiration.
2) Cree una política de IAM y un usuario con el acceso menos necesario
Ejemplo de una política limitada a un bucket (archivo 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/*"]}]}Consejo de seguridad: es mejor utilizar claves aleatorias en lugar de claves estáticas. Rol de IAM (Si su servidor es EC2). Considere también restringir el acceso según la IP o condiciones adicionales.
3) Instalar y configurar AWS CLI en el servidor
Ejemplo de instalación para Debian/Ubuntu y CentOS/RHEL:
sudo apt update && sudo apt install -y awsclisudo yum install -y awscliConfiguración de la clave de acceso si es necesario:
aws configure --profile da-backupSi está utilizando el rol IAM en EC2, no es necesario configurarlo.
4) Ejemplo de script: upload_and_clean.sh
Este script cargará todas las copias de seguridad en S3 y luego eliminará los archivos locales con más de dos días de antigüedad que aún se encuentren en S3. (Coloque el siguiente código en la ruta correspondiente y hágalo ejecutable).
#!/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."Consejos: Guarde el archivo de script, por ejemplo, en /usr/local/bin/carga_y_limpieza.sh Poner y con chmod +x Ejecutar. Ruta DIRECCIÓN DE COPIA DE SEGURIDAD Modifíquelo según su configuración de DirectAdmin.
5) Programación de ejecución automática (temporizador Cron o systemd)
Para ejecutar diariamente a las 02:00 con cron:
0 2 * * * /usr/local/bin/upload_and_clean.sh >> /var/log/da_s3_backup.log 2>&1Si lo deseas, puedes. temporizador systemd Construido para un mejor control y registro.
6) Verificar y asegurar el éxito de la operación
Revisar los registros en /var/log/da_s3_backup.log Y verificar los archivos en S3:
Para ver una lista de archivos en S3:
aws s3 ls s3://my-da-backups-bucket/directadminVerifique el período del ciclo de vida desde la consola o con un comando CLI para asegurarse de que la eliminación se producirá después de 7 días.
Opciones avanzadas y mejoras
- Carga de varias partes Para archivos grandes: AWS CLI lo admite automáticamente, pero para archivos muy grandes puede cambiar la configuración de simultaneidad.
- Uso de SSE-KMS Para el cifrado con una clave KMS empresarial:
AWS S3 CPDe--sse aws:kms --sse-kms-key-id "arn:aws:kms:...""Usar. - Activar Bloqueo de objetos S3 Y control de versiones si necesita protección contra eliminaciones no deseadas.
- Si el tráfico saliente es costoso, coloque el servidor cerca de la región S3 o en una infraestructura conectada directamente.
- Agregue una notificación si falla la carga usando AWS SNS o Webhook para enviar un mensaje a Slack/correo electrónico.
Consejos de seguridad importantes
Algunos consejos clave para mantener las copias de seguridad seguras:
- Mínimo privilegio: Utilice permisos mínimos para IAM.
- Evite las claves estáticas: No almacene las claves de acceso en un archivo de texto; si está en EC2, use un rol IAM.
- Cifrado: Utilice cifrado del lado del servidor (SSE) o cifrado previo a la carga (cifrado gpg o rclone).
- Explotación florestal: Habilite los registros de acceso de S3 y CloudTrail para registrar cada operación.
Monitoreo, alertas y pruebas de recuperación ante desastres (DR)
Recomendaciones para garantizar el funcionamiento continuo:
- Pruebe periódicamente el proceso de restauración de copias de seguridad desde S3 al servidor e incluya esta prueba en su programación mensual.
- Uso de Inventario S3 y CloudWatch Para monitorear la velocidad de carga y los errores.
- Establezca una alerta si ocurre un error o una falla de carga.
Comparación de opciones: awscli vs rclone vs s3fs
CLI de AWSSimple, popular y práctico. Compatible con el ciclo de vida y el cifrado de AWS.
clonMás funciones de sincronización, cifrado del lado del cliente y control de ancho de banda. Ideal si necesita limitar el ancho de banda o cifrar antes de subir archivos.
s3fs:Monta el depósito como un sistema de archivos, pero puede tener menor rendimiento y estabilidad para archivos de respaldo grandes.
¿Por qué es importante elegir la ubicación adecuada?
Elegir la ubicación correcta puede reducir el tiempo de carga y los costos del tráfico saliente. Elegir una ubicación cercana a la región S3 reducirá la latencia y el tiempo de operación.
Si necesita protección adicional, conectividad dedicada o diferencias de rendimiento, una infraestructura con múltiples ubicaciones y características especiales puede ayudar.
Ejemplo operativo: Configuración para el comercio de VPS
- Elija una ubicación cercana al servidor de intercambio o comercial para reducir la latencia.
- Habilite la protección DDoS para el servidor relevante.
- Mueva las copias de seguridad de DirectAdmin a un S3 cercano para reducir el tiempo de copia de seguridad.
Resumen y puntos finales
La creación de un bot implica tres partes principales: carga segura a S3, eliminación local de archivos antiguos, 2 días Después de confirmar la carga y configurar el ciclo de vida en S3 para la retención 7 días.
Utilice IAM con acceso mínimo, cifrado y monitorización adecuada. Pruebe siempre el proceso de restauración para garantizar la recuperación.
Archivos de muestra y recursos
- Muestra ciclo de vida.json y archivo de script subir_y_limpiar.sh Está disponible en el texto de arriba.
- Documentación del ciclo de vida de AWS S3
- Documentación de AWS CLI









