Files
for-servers/vaultwarden/backuper.sh

105 lines
2.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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