Skip to content

Commit

Permalink
feat: 🎸 telegram message support
Browse files Browse the repository at this point in the history
  • Loading branch information
monlor committed Oct 12, 2024
1 parent f1f0448 commit 5796d9e
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 22 deletions.
11 changes: 4 additions & 7 deletions webdav-backup/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
FROM alpine:latest

LABEL MAINTAINER [email protected]
LABEL VERSION 1.0.0
LABEL VERSION 1.0.1

# 安装必要的工具
RUN apk add --no-cache bash curl tar pv
RUN apk add --no-cache bash curl tar pv && mkdir -p /data

# 复制脚本到容器
COPY --chmod=755 *.sh /

# 设置环境变量
ENV WEBDAV_URL=""
ENV WEBDAV_USERNAME=""
ENV WEBDAV_PASSWORD=""
ENV WEBDAV_PATH=""
ENV BACKUP_DIRS=""
ENV BACKUP_INTERVAL="60"
ENV BACKUP_DIRS="/data"
ENV BACKUP_TASK_NAME="默认备份任务"

# 运行脚本
CMD ["/entrypoint.sh"]
29 changes: 16 additions & 13 deletions webdav-backup/README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# WebDAV备份工具

这个工具可以定期将指定的多个目录备份到WebDAV服务器,并提供恢复功能。
这个工具可以定期将指定的目录备份到WebDAV服务器,并提供恢复功能。

## 功能

- 定时备份指定的多个目录
- 定时备份指定的目录
- 将备份文件上传到WebDAV服务器
- 可配置的备份间隔时间
- 从WebDAV服务器恢复指定的备份文件
- 支持 Telegram 通知(启动时和备份失败时)
- 可自定义备份任务名称

## 使用方法

Expand All @@ -18,19 +20,15 @@ docker run -d \
-e WEBDAV_URL="https://your-webdav-server.com/backup" \
-e WEBDAV_USERNAME="your_username" \
-e WEBDAV_PASSWORD="your_password" \
-e WEBDAV_PATH="/backup" \
-e BACKUP_DIRS="/path/to/dir1 /path/to/dir2" \
-e BACKUP_INTERVAL="60" \
-v /path/to/dir1:/path/to/dir1 \
-v /path/to/dir2:/path/to/dir2 \
-v /path/to/data:/data \
monlor/webdav-backup
```

### 恢复

要恢复备份,请按照以下步骤操作:

1. 首先,确保备份容器正在运行。如果没有运行,请使用上面的命令启动它。
1. 确保备份容器正在运行。如果没有运行,请使用上面的命令启动它。

2. 进入运行中的容器:

Expand All @@ -50,12 +48,15 @@ docker exec -it <container_id_or_name> /bin/bash

## 环境变量

- `WEBDAV_URL`: WebDAV服务器的URL
- `WEBDAV_USERNAME`: WebDAV服务器的用户名
- `WEBDAV_PASSWORD`: WebDAV服务器的密码
- `WEBDAV_PATH`: WebDAV服务器上的备份路径,默认为 "/backup"
- `BACKUP_DIRS`: 要备份的目录,用空格分隔多个目录
- `WEBDAV_URL`: WebDAV服务器的URL(必需), 格式为 https://your-webdav-server.com/dav
- `WEBDAV_USERNAME`: WebDAV服务器的用户名(必需)
- `WEBDAV_PASSWORD`: WebDAV服务器的密码(必需)
- `WEBDAV_PATH`: WebDAV服务器上的备份路径,默认为 空,格式为 /backup
- `BACKUP_DIRS`: 要备份的目录,用空格分隔多个目录,默认为 "/data"
- `BACKUP_INTERVAL`: 备份间隔时间(分钟),默认为60分钟
- `BACKUP_TASK_NAME`: 备份任务的名称,默认为 "默认备份任务"
- `TELEGRAM_BOT_TOKEN`: Telegram Bot 的 token(可选)
- `TELEGRAM_CHAT_ID`: 接收 Telegram 通知的聊天 ID(可选)

## 注意事项

Expand All @@ -64,6 +65,8 @@ docker exec -it <container_id_or_name> /bin/bash
- 考虑实现备份文件的轮换或清理机制,以防止WebDAV服务器存储空间耗尽
- 恢复操作会覆盖目标目录中的现有数据,请谨慎操作
- 在执行恢复操作之前,请确保您有足够的权限访问和修改目标目录
- 如果配置了 Telegram 通知,程序会在启动时发送一条包含所有重要参数的通知消息
- 如果配置了 Telegram 通知,只有在备份失败时才会发送额外的通知

## 贡献

Expand Down
45 changes: 43 additions & 2 deletions webdav-backup/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,52 @@ if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD"
exit 1
fi

# 检查 Telegram 相关环境变量
if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then
TELEGRAM_ENABLED=true
echo "Telegram 通知已启用"
else
TELEGRAM_ENABLED=false
echo "Telegram 通知未启用"
fi

# 添加发送 Telegram 消息的函数
send_telegram_message() {
if [ "$TELEGRAM_ENABLED" = true ]; then
response=$(curl -s -w "\n%{http_code}" -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="$1" \
-d parse_mode="HTML")

body=$(echo "$response" | sed '$d')
status_code=$(echo "$response" | tail -n1)

if [ "$status_code" != "200" ]; then
echo "Telegram 消息发送成功"
else
echo "Telegram 消息发送失败. 状态码: $status_code, 响应: $body"
fi
fi
}

echo "开始备份任务..."
echo "备份任务名称: ${BACKUP_TASK_NAME}"
echo "备份目录: ${BACKUP_DIRS}"
echo "备份间隔: ${BACKUP_INTERVAL} 分钟"
echo "WebDAV URL: ${WEBDAV_URL}"
echo "WebDAV 用户名: ${WEBDAV_USERNAME}"
echo "WebDAV 路径: ${WEBDAV_PATH}"

# 发送启动通知
startup_message="<b>WebDAV 备份任务已启动</b>%0A"
startup_message+="任务名称: ${BACKUP_TASK_NAME}%0A"
startup_message+="备份目录: ${BACKUP_DIRS}%0A"
startup_message+="备份间隔: ${BACKUP_INTERVAL} 分钟%0A"
startup_message+="WebDAV URL: ${WEBDAV_URL}%0A"
startup_message+="WebDAV 路径: ${WEBDAV_PATH}"

send_telegram_message "$startup_message"

# 无限循环执行备份
while true; do
# 获取当前日期
Expand Down Expand Up @@ -52,7 +91,9 @@ while true; do
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ]; then
echo "备份完成: ${CURRENT_DATE}/${BACKUP_FILE}"
else
echo "错误: 无法上传备份文件 ${BACKUP_FILE}. HTTP 状态码: ${HTTP_CODE}"
error_message="错误: 无法上传备份文件 ${BACKUP_FILE}. HTTP 状态码: ${HTTP_CODE}"
echo "$error_message"
send_telegram_message "<b>WebDAV 备份失败</b>%0A任务名称: ${BACKUP_TASK_NAME}%0A${error_message}"
fi

# 清理临时文件
Expand All @@ -64,4 +105,4 @@ while true; do
echo "等待 ${BACKUP_INTERVAL} 分钟后再进行备份..."
sleep $((BACKUP_INTERVAL * 60))

done
done

0 comments on commit 5796d9e

Please sign in to comment.