#!/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"