Enhance backup scripts for Nextcloud, Gitea, Paperless, Vaultwarden, Immich, and VPS configurations by adding Telegram notifications upon completion. Include details such as backup size and objects backed up. Update backup documentation to reflect these changes and ensure clarity on backup processes and retention policies.
64 lines
2.4 KiB
Bash
64 lines
2.4 KiB
Bash
#!/bin/bash
|
||
# Единая точка отправки уведомлений в Telegram (шлюз).
|
||
# Вызывают скрипты бэкапов на хосте Proxmox. Позже тот же шлюз можно вызывать с VM 200 / VPS по SSH.
|
||
# Использование: notify-telegram.sh "Заголовок" "Текст сообщения"
|
||
# Секреты: из Vaultwarden (токен — пароль объекта HOME_BOT_TOKEN, chat_id — поле TELEGRAM_SELF_CHAT_ID объекта RESTIC).
|
||
# Файл с мастер-паролем: /root/.bw-master (chmod 600). Если его нет — тихо выходим с 0, не ломаем вызывающий скрипт.
|
||
|
||
set -e
|
||
|
||
TITLE="${1:-Notification}"
|
||
BODY="${2:-}"
|
||
|
||
# Креды из Vaultwarden или из старого конфига (fallback)
|
||
TELEGRAM_BOT_TOKEN=""
|
||
TELEGRAM_CHAT_ID=""
|
||
BW_MASTER_PASSWORD_FILE="${BW_MASTER_PASSWORD_FILE:-/root/.bw-master}"
|
||
if [ -f "$BW_MASTER_PASSWORD_FILE" ] && command -v bw >/dev/null 2>&1 && command -v jq >/dev/null 2>&1; then
|
||
BW_SESSION=$(bw unlock --passwordfile "$BW_MASTER_PASSWORD_FILE" --raw 2>/dev/null) || true
|
||
if [ -n "$BW_SESSION" ]; then
|
||
export BW_SESSION
|
||
TELEGRAM_BOT_TOKEN=$(bw get password "HOME_BOT_TOKEN" 2>/dev/null) || true
|
||
RESTIC_ITEM=$(bw get item "RESTIC" 2>/dev/null) || true
|
||
if [ -n "$RESTIC_ITEM" ]; then
|
||
TELEGRAM_CHAT_ID=$(echo "$RESTIC_ITEM" | jq -r '.fields[] | select(.name=="TELEGRAM_SELF_CHAT_ID") | .value' 2>/dev/null) || true
|
||
fi
|
||
fi
|
||
fi
|
||
if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ -z "$TELEGRAM_CHAT_ID" ]; then
|
||
ENV_FILE="${TELEGRAM_NOTIFY_ENV:-/root/.telegram-notify.env}"
|
||
if [ -f "$ENV_FILE" ]; then
|
||
# shellcheck source=/dev/null
|
||
source "$ENV_FILE"
|
||
fi
|
||
fi
|
||
if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ -z "$TELEGRAM_CHAT_ID" ]; then
|
||
exit 0
|
||
fi
|
||
|
||
if [ -z "$BODY" ]; then
|
||
TEXT="$TITLE"
|
||
else
|
||
TEXT="$TITLE
|
||
|
||
$BODY"
|
||
fi
|
||
|
||
URL="https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage"
|
||
if [ -n "${TELEGRAM_DEBUG:-}" ]; then
|
||
curl -s -w "\nHTTP_CODE:%{http_code}\n" -X POST "$URL" \
|
||
--data-urlencode "chat_id=$TELEGRAM_CHAT_ID" \
|
||
--data-urlencode "text=$TEXT" \
|
||
-d "disable_web_page_preview=true" \
|
||
--max-time 10
|
||
else
|
||
curl -sf -X POST "$URL" \
|
||
--data-urlencode "chat_id=$TELEGRAM_CHAT_ID" \
|
||
--data-urlencode "text=$TEXT" \
|
||
-d "disable_web_page_preview=true" \
|
||
--max-time 10 \
|
||
>/dev/null 2>&1 || true
|
||
fi
|
||
|
||
exit 0
|