Добавить vaultwarden/backuper.sh

This commit is contained in:
2026-04-15 17:53:04 +00:00
parent 1682165a0a
commit ff7bb9775d

105
vaultwarden/backuper.sh Normal file
View 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."