Files
for-servers/vaultwarden/backuper.sh

110 lines
2.7 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
# Значения по умолчанию
MODE="host" # host или docker
REQUIRED_CMDS=(curl tar date)
PKGS_MISSING=()
# Парсинг параметров
while [[ $# -gt 0 ]]; do
case "$1" in
--token)
TOKEN="$2"
shift 2
;;
--user_id)
USER_ID="$2"
shift 2
;;
--mode)
MODE="$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> [--mode host|docker]"
exit 1
fi
# Проверка наличия зависимостей
for cmd in "${REQUIRED_CMDS[@]}"; do
if ! command -v "$cmd" >/dev/null 2>&1; then
PKGS_MISSING+=("$cmd")
fi
done
install_packages() {
local PKGS=("$@")
if command -v apk >/dev/null 2>&1; then
apk add --no-cache "${PKGS[@]}"
elif command -v apt-get >/dev/null 2>&1; then
apt-get update && apt-get install -y "${PKGS[@]}"
elif command -v dnf >/dev/null 2>&1; then
dnf install -y "${PKGS[@]}"
elif command -v yum >/dev/null 2>&1; then
yum install -y "${PKGS[@]}"
elif command -v zypper >/dev/null 2>&1; then
zypper install -y "${PKGS[@]}"
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
echo "Необходимые пакеты отсутствуют: ${PKGS_MISSING[*]}"
if [[ "$MODE" == "docker" ]]; then
echo "Режим работы: docker (root ожидается, sudo не используется)"
install_packages "${PKGS_MISSING[@]}"
else
# HOST
if [[ "$EUID" -ne 0 ]]; then
echo "Запустите скрипт с правами root (или через sudo), чтобы автоматически установить зависимости."
exit 1
fi
install_packages "${PKGS_MISSING[@]}"
fi
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."