kubernetes-helm/erpnext/backupscrip.sh

88 lines
3.6 KiB
Bash
Raw Permalink Normal View History

2024-12-18 07:13:05 +00:00
#!/bin/bash
NAMESPACE="erpnext"
LOCAL_BACKUP_DIR="$HOME/erpnext_backup"
DATE=$(date +"%Y%m%d%H%M%S")
SITE_NAME="192.168.49.2"
mkdir -p "$LOCAL_BACKUP_DIR"
log() {
echo "[INFO] $1"
}
debug() {
echo "[DEBUG] $1"
}
error() {
echo "[ERROR] $1"
exit 1
}
# Database Backup
log "Taking database backup..."
MARIADB_POD="erpnext-mariadb-0"
if ! kubectl get pod "$MARIADB_POD" -n "$NAMESPACE" >/dev/null 2>&1; then
error "MariaDB pod $MARIADB_POD not found in namespace $NAMESPACE"
fi
SECRET_NAME="erpnext-mariadb"
MYSQL_ROOT_PASSWORD=$(kubectl get secret "$SECRET_NAME" -n "$NAMESPACE" -o jsonpath="{.data.mariadb-root-password}" | base64 --decode)
if [[ -z "$MYSQL_ROOT_PASSWORD" ]]; then
error "Failed to retrieve MariaDB root password from secret"
fi
log "Executing database backup..."
kubectl exec -n "$NAMESPACE" "$MARIADB_POD" -- bash -c "mysqldump -uroot -p'$MYSQL_ROOT_PASSWORD' --all-databases > /tmp/db_backup.sql"
kubectl cp "$NAMESPACE/$MARIADB_POD:/tmp/db_backup.sql" "$LOCAL_BACKUP_DIR/db_backup_$DATE.sql"
kubectl exec -n "$NAMESPACE" "$MARIADB_POD" -- rm -f /tmp/db_backup.sql
log "Database backup completed."
# Site Files Backup
log "Taking site files backup..."
SITE_POD="erpnext-nginx-85f6dd98b7-p6vf2"
if ! kubectl get pod "$SITE_POD" -n "$NAMESPACE" >/dev/null 2>&1; then
error "Nginx pod $SITE_POD not found in namespace $NAMESPACE"
fi
# Backup public files
log "Backing up public files..."
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- bash -c "cd /home/frappe/frappe-bench/sites/${SITE_NAME}/public && tar -czf /tmp/public-files.tar.gz files"
kubectl cp "$NAMESPACE/$SITE_POD:/tmp/public-files.tar.gz" "$LOCAL_BACKUP_DIR/public-files_$DATE.tar.gz"
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- rm -f /tmp/public-files.tar.gz
# Backup private files
log "Backing up private files..."
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- bash -c "cd /home/frappe/frappe-bench/sites/${SITE_NAME}/private && tar -czf /tmp/private-files.tar.gz files"
kubectl cp "$NAMESPACE/$SITE_POD:/tmp/private-files.tar.gz" "$LOCAL_BACKUP_DIR/private-files_$DATE.tar.gz"
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- rm -f /tmp/private-files.tar.gz
# Backup site config
log "Backing up site configuration..."
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- bash -c "cp /home/frappe/frappe-bench/sites/${SITE_NAME}/site_config.json /tmp/site_config_backup.json"
kubectl cp "$NAMESPACE/$SITE_POD:/tmp/site_config_backup.json" "$LOCAL_BACKUP_DIR/site_config_$DATE.json"
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- rm -f /tmp/site_config_backup.json
# Backup common site config
log "Backing up common site configuration..."
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- bash -c "cp /home/frappe/frappe-bench/sites/common_site_config.json /tmp/common_site_config_backup.json"
kubectl cp "$NAMESPACE/$SITE_POD:/tmp/common_site_config_backup.json" "$LOCAL_BACKUP_DIR/common_site_config_$DATE.json"
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- rm -f /tmp/common_site_config_backup.json
# Backup entire sites directory
log "Backing up complete sites directory..."
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- tar -czf /tmp/site-files.tar.gz -C /home/frappe/frappe-bench/sites .
kubectl cp "$NAMESPACE/$SITE_POD:/tmp/site-files.tar.gz" "$LOCAL_BACKUP_DIR/site-files_$DATE.tar.gz"
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- rm -f /tmp/site-files.tar.gz
# List existing backups in the pod
log "Existing backups in the pod:"
kubectl exec -n "$NAMESPACE" "$SITE_POD" -- ls -l "/home/frappe/frappe-bench/sites/${SITE_NAME}/private/backups"
log "All backups completed successfully. Files are saved in $LOCAL_BACKUP_DIR:"
ls -lh "$LOCAL_BACKUP_DIR"