Добавить vaultwarden/backuper.sh
This commit is contained in:
105
vaultwarden/backuper.sh
Normal file
105
vaultwarden/backuper.sh
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
REQUIRED_CMDS=(curl tar date)
|
||||||
|
PKGS_MISSING=()
|
||||||
|
|
||||||
|
# Проверка наличия команд
|
||||||
|
for cmd in "${REQUIRED_CMDS[@]}"; do
|
||||||
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||||
|
PKGS_MISSING+=("$cmd")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
install_packages() {
|
||||||
|
PKGS=("$@")
|
||||||
|
# Для Alpine
|
||||||
|
if command -v apk >/dev/null 2>&1; then
|
||||||
|
apk add --no-cache "${PKGS[@]}"
|
||||||
|
# Для Debian/Ubuntu
|
||||||
|
elif command -v apt-get >/dev/null 2>&1; then
|
||||||
|
apt-get update && apt-get install -y "${PKGS[@]}"
|
||||||
|
# Для Fedora
|
||||||
|
elif command -v dnf >/dev/null 2>&1; then
|
||||||
|
dnf install -y "${PKGS[@]}"
|
||||||
|
# Для CentOS/RHEL
|
||||||
|
elif command -v yum >/dev/null 2>&1; then
|
||||||
|
yum install -y "${PKGS[@]}"
|
||||||
|
# Для openSUSE
|
||||||
|
elif command -v zypper >/dev/null 2>&1; then
|
||||||
|
zypper install -y "${PKGS[@]}"
|
||||||
|
# Для Arch
|
||||||
|
elif command -v pacman >/dev/null 2>&1; then
|
||||||
|
pacman -Sy --noconfirm "${PKGS[@]}"
|
||||||
|
else
|
||||||
|
echo "Не удалось определить пакетный менеджер для установки: ${PKGS[*]}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ${#PKGS_MISSING[@]} -gt 0 ]]; then
|
||||||
|
if [[ "$EUID" -ne 0 ]]; then
|
||||||
|
echo "Зависимости отсутствуют: ${PKGS_MISSING[*]}"
|
||||||
|
echo "Запустите скрипт от root для автоустановки!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Необходимые пакеты отсутствуют: ${PKGS_MISSING[*]}"
|
||||||
|
echo "Пробую установить..."
|
||||||
|
install_packages "${PKGS_MISSING[@]}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ПАРСИНГ ПАРАМЕТРОВ
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
--token)
|
||||||
|
TOKEN="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--user_id)
|
||||||
|
USER_ID="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "$TOKEN" || -z "$USER_ID" ]]; then
|
||||||
|
echo "Usage: $0 --token <TOKEN> --user_id <user_id>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1. cd /
|
||||||
|
cd /
|
||||||
|
|
||||||
|
# 2. vaultwarden backup
|
||||||
|
if ! /vaultwarden backup; then
|
||||||
|
echo "vaultwarden backup failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. create archive /data
|
||||||
|
NOW=$(date '+%Y-%m-%d_%H-%M-%S')
|
||||||
|
ARCHIVE="/tmp/vaultwarden_backup_${NOW}.tar.gz"
|
||||||
|
|
||||||
|
tar -czf "$ARCHIVE" /data
|
||||||
|
|
||||||
|
# 4. send archive user <user_id> in telegram
|
||||||
|
response=$(curl -s -F chat_id="$USER_ID" \
|
||||||
|
-F document=@"$ARCHIVE" \
|
||||||
|
"https://api.telegram.org/bot${TOKEN}/sendDocument")
|
||||||
|
|
||||||
|
if ! echo "$response" | grep -q '"ok":true'; then
|
||||||
|
echo "Failed to send archive to telegram: $response"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. rm archive
|
||||||
|
rm -f "$ARCHIVE"
|
||||||
|
|
||||||
|
# 6. rm /data/db_*
|
||||||
|
rm -f /data/db_*
|
||||||
|
|
||||||
|
echo "Backup and send complete."
|
||||||
Reference in New Issue
Block a user