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