Add proxmox.sh
This commit is contained in:
parent
95da03cfd2
commit
3505c636da
1 changed files with 127 additions and 0 deletions
127
proxmox.sh
Normal file
127
proxmox.sh
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Author: Husni Adil Makmur
|
||||||
|
# GitHub: https://github.com/husniadil
|
||||||
|
|
||||||
|
# This script performs backup and restore operations for Docker volumes within Proxmox LXC containers.
|
||||||
|
|
||||||
|
# Requirements:
|
||||||
|
# - Ensure that `sshpass` is installed. For installation instructions, visit: https://www.cyberciti.biz/faq/noninteractive-shell-script-ssh-password-provider/
|
||||||
|
# - Root login with a password must be enabled on the Proxmox host. Follow these steps:
|
||||||
|
# 1. Edit the `/etc/ssh/sshd_config` file and apply the following configuration settings:
|
||||||
|
# - ListenAddress 0.0.0.0
|
||||||
|
# - PasswordAuthentication yes
|
||||||
|
# - PermitRootLogin yes
|
||||||
|
# 2. Restart the SSH service using the command: `systemctl restart sshd`
|
||||||
|
|
||||||
|
# Usage:
|
||||||
|
# - To backup a volume: `./proxmox.sh backup --host <host> --user <user> --lxc <lxc_number> --volume <volume> --path <path>`
|
||||||
|
# - To restore a volume: `./proxmox.sh restore --host <host> --user <user> --lxc <lxc_number> --volume <volume> --path <path>`
|
||||||
|
# - Parameters:
|
||||||
|
# - `host`: Proxmox host IP address or hostname
|
||||||
|
# - `user`: Proxmox host username
|
||||||
|
# - `lxc`: LXC container number
|
||||||
|
# - `volume`: Name of the Docker volume
|
||||||
|
# - `path`: Path for the backup location
|
||||||
|
|
||||||
|
# Example:
|
||||||
|
# - To backup: `./proxmox.sh backup --host 192.168.0.100 --user root --lxc 100 --volume searxng_data --path /Users/husni/backup`
|
||||||
|
# > The backup file will be saved to `/Users/husni/backup/searxng_data-backup.tar.gz`.
|
||||||
|
# - To restore: `./proxmox.sh restore --host 192.168.0.100 --user root --lxc 100 --volume searxng_data --path /Users/husni/backup`
|
||||||
|
# > The backup file will be restored from `/Users/husni/backup/searxng_data-backup.tar.gz`, so please ensure that the file exists. This action will overwrite existing files within the Docker volume.
|
||||||
|
|
||||||
|
# ----------------------------
|
||||||
|
# Script starts here
|
||||||
|
# ----------------------------
|
||||||
|
# Function to prompt for SSH password securely
|
||||||
|
prompt_password() {
|
||||||
|
read -sp "Enter SSH password: " SSH_PASS
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
# Function to perform backup
|
||||||
|
backup() {
|
||||||
|
PROXMOX_HOST=$1
|
||||||
|
PROXMOX_USER=$2
|
||||||
|
LXC_NUMBER=$3
|
||||||
|
DOCKER_VOLUME=$4
|
||||||
|
BACKUP_PATH=$5
|
||||||
|
echo "Starting backup from Proxmox host: $PROXMOX_HOST, LXC: $LXC_NUMBER, Docker volume: $DOCKER_VOLUME"
|
||||||
|
prompt_password
|
||||||
|
|
||||||
|
# Create backup directory if it doesn't exist
|
||||||
|
mkdir -p "$BACKUP_PATH"
|
||||||
|
|
||||||
|
# Perform the backup
|
||||||
|
sshpass -p "$SSH_PASS" ssh "$PROXMOX_USER@$PROXMOX_HOST" "mkdir -p /backup"
|
||||||
|
sshpass -p "$SSH_PASS" ssh "$PROXMOX_USER@$PROXMOX_HOST" "pct exec $LXC_NUMBER -- docker run --rm -v $DOCKER_VOLUME:/mnt/data -v /backup:/backup alpine tar czf /backup/$DOCKER_VOLUME-backup.tar.gz -C /mnt/data ."
|
||||||
|
sshpass -p "$SSH_PASS" ssh "$PROXMOX_USER@$PROXMOX_HOST" "pct pull $LXC_NUMBER /backup/$DOCKER_VOLUME-backup.tar.gz /backup/$DOCKER_VOLUME-backup.tar.gz"
|
||||||
|
sshpass -p "$SSH_PASS" scp "$PROXMOX_USER@$PROXMOX_HOST:/backup/$DOCKER_VOLUME-backup.tar.gz" "$BACKUP_PATH/"
|
||||||
|
|
||||||
|
echo "Backup completed and saved to $BACKUP_PATH"
|
||||||
|
}
|
||||||
|
# Function to perform restore
|
||||||
|
restore() {
|
||||||
|
PROXMOX_HOST=$1
|
||||||
|
PROXMOX_USER=$2
|
||||||
|
LXC_NUMBER=$3
|
||||||
|
DOCKER_VOLUME=$4
|
||||||
|
BACKUP_PATH=$5
|
||||||
|
echo "Starting restore to Proxmox host: $PROXMOX_HOST, LXC: $LXC_NUMBER, Docker volume: $DOCKER_VOLUME"
|
||||||
|
prompt_password
|
||||||
|
|
||||||
|
# Perform the restore
|
||||||
|
sshpass -p "$SSH_PASS" ssh "$PROXMOX_USER@$PROXMOX_HOST" "mkdir -p /backup"
|
||||||
|
sshpass -p "$SSH_PASS" scp "$BACKUP_PATH/$DOCKER_VOLUME-backup.tar.gz" "$PROXMOX_USER@$PROXMOX_HOST:/backup/"
|
||||||
|
sshpass -p "$SSH_PASS" ssh "$PROXMOX_USER@$PROXMOX_HOST" "pct push $LXC_NUMBER /backup/$DOCKER_VOLUME-backup.tar.gz /backup/$DOCKER_VOLUME-backup.tar.gz"
|
||||||
|
sshpass -p "$SSH_PASS" ssh "$PROXMOX_USER@$PROXMOX_HOST" "pct exec $LXC_NUMBER -- docker run --rm -v $DOCKER_VOLUME:/mnt/data -v /backup:/backup alpine tar xzf /backup/$DOCKER_VOLUME-backup.tar.gz -C /mnt/data"
|
||||||
|
|
||||||
|
echo "Restore completed from $BACKUP_PATH"
|
||||||
|
}
|
||||||
|
# Main script logic
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
echo "Usage: $0 {backup|restore} --host <host> --user <user> --lxc <lxc_number> --volume <volume> --path <path>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COMMAND=$1
|
||||||
|
shift
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--host)
|
||||||
|
PROXMOX_HOST=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--user)
|
||||||
|
PROXMOX_USER=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--lxc)
|
||||||
|
LXC_NUMBER=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--volume)
|
||||||
|
DOCKER_VOLUME=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--path)
|
||||||
|
BACKUP_PATH=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid parameter $1"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
case "$COMMAND" in
|
||||||
|
backup)
|
||||||
|
backup "$PROXMOX_HOST" "$PROXMOX_USER" "$LXC_NUMBER" "$DOCKER_VOLUME" "$BACKUP_PATH"
|
||||||
|
;;
|
||||||
|
restore)
|
||||||
|
restore "$PROXMOX_HOST" "$PROXMOX_USER" "$LXC_NUMBER" "$DOCKER_VOLUME" "$BACKUP_PATH"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid command $COMMAND"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
Loading…
Reference in a new issue