init aichat
Browse files- Dockerfile +6 -0
- README.md +4 -5
- sync_data.sh +144 -0
Dockerfile
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM ghcr.io/open-webui/open-webui:main
|
| 2 |
+
|
| 3 |
+
COPY sync_data.sh sync_data.sh
|
| 4 |
+
|
| 5 |
+
RUN chmod -R 777 ./data && \
|
| 6 |
+
sed -i "1r sync_data.sh" ./start.sh
|
README.md
CHANGED
|
@@ -1,10 +1,9 @@
|
|
| 1 |
---
|
| 2 |
title: AiChat
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
colorTo: red
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
---
|
| 2 |
title: AiChat
|
| 3 |
+
emoji: 😻
|
| 4 |
+
colorFrom: purple
|
| 5 |
colorTo: red
|
| 6 |
sdk: docker
|
| 7 |
pinned: false
|
| 8 |
+
app_port: 8080
|
| 9 |
+
---
|
|
|
sync_data.sh
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# 检查必要的WebDAV环境变量
|
| 4 |
+
if [ -z "$WEBDAV_URL" ] || [ -z "$WEBDAV_USERNAME" ] || [ -z "$WEBDAV_PASSWORD" ]; then
|
| 5 |
+
echo "缺少必要的WebDAV环境变量: WEBDAV_URL, WEBDAV_USERNAME 或 WEBDAV_PASSWORD"
|
| 6 |
+
exit 1
|
| 7 |
+
fi
|
| 8 |
+
|
| 9 |
+
# 去除WEBDAV_URL末尾的斜杠(如果有的话)
|
| 10 |
+
WEBDAV_URL=$(echo "$WEBDAV_URL" | sed 's/\/$//')
|
| 11 |
+
|
| 12 |
+
# 创建数据目录
|
| 13 |
+
mkdir -p ./data/webdav
|
| 14 |
+
|
| 15 |
+
check_webdav_webui_latest_exists() {
|
| 16 |
+
http_code=$(curl --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" --head --silent --write-out "%{http_code}" "$WEBDAV_URL/OpenWebUI/webui_latest.db" -o /dev/null)
|
| 17 |
+
if [ "$http_code" -eq 200 ]; then
|
| 18 |
+
return 0 # 文件存在
|
| 19 |
+
else
|
| 20 |
+
return 1 # 文件不存在
|
| 21 |
+
fi
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
# 从WebDAV拉取最新的webui_latest.db文件
|
| 25 |
+
download_latest_db() {
|
| 26 |
+
echo "检查云端是否存在webui_latest.db文件..."
|
| 27 |
+
|
| 28 |
+
if check_webdav_webui_latest_exists; then
|
| 29 |
+
echo "云端存在webui_latest.db文件,开始拉取..."
|
| 30 |
+
curl -o ./data/webdav/webui_latest.db \
|
| 31 |
+
--user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" \
|
| 32 |
+
"$WEBDAV_URL/OpenWebUI/webui_latest.db" && {
|
| 33 |
+
echo "最新的webui_latest.db文件拉取成功"
|
| 34 |
+
cp ./data/webdav/webui_latest.db ./data/webui.db
|
| 35 |
+
} || {
|
| 36 |
+
echo "拉取webui_latest.db文件失败"
|
| 37 |
+
}
|
| 38 |
+
else
|
| 39 |
+
echo "云端不存在webui_latest.db文件,跳过拉取"
|
| 40 |
+
fi
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
# 比较两个文件的hash值
|
| 44 |
+
compare_hashes() {
|
| 45 |
+
local file1=$1
|
| 46 |
+
local file2=$2
|
| 47 |
+
local hash1
|
| 48 |
+
local hash2
|
| 49 |
+
|
| 50 |
+
# 检查文件是否存在
|
| 51 |
+
if [ ! -f "$file1" ] || [ ! -f "$file2" ]; then
|
| 52 |
+
echo "文件 $file1 或 $file2 不存在,无法比较哈希值"
|
| 53 |
+
return 1
|
| 54 |
+
fi
|
| 55 |
+
|
| 56 |
+
# 计算文件的hash值
|
| 57 |
+
hash1=$(sha256sum "$file1" | awk '{print $1}')
|
| 58 |
+
hash2=$(sha256sum "$file2" | awk '{print $1}')
|
| 59 |
+
|
| 60 |
+
# 比较hash值
|
| 61 |
+
if [ "$hash1" == "$hash2" ]; then
|
| 62 |
+
return 0 # 哈希值相同
|
| 63 |
+
else
|
| 64 |
+
return 1 # 哈希值不同
|
| 65 |
+
fi
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
# 上传备份文件到WebDAV
|
| 69 |
+
upload_to_webdav() {
|
| 70 |
+
echo "检查是否需要上传文件到 WebDAV..."
|
| 71 |
+
|
| 72 |
+
# 如果 ./data/webui.db 文件不存在,跳过上传
|
| 73 |
+
if [ ! -f ./data/webui.db ]; then
|
| 74 |
+
echo "数据库未初始化,跳过上传"
|
| 75 |
+
return
|
| 76 |
+
fi
|
| 77 |
+
|
| 78 |
+
# 检查云端是否存在webui_latest.db文件
|
| 79 |
+
if check_webdav_webui_latest_exists; then
|
| 80 |
+
# 比较本地和云端的webui.db文件hash值
|
| 81 |
+
if compare_hashes ./data/webui.db ./data/webdav/webui_latest.db; then
|
| 82 |
+
echo "本地和云端的webui.db文件哈希值一致,跳过上传"
|
| 83 |
+
return
|
| 84 |
+
fi
|
| 85 |
+
echo "本地和云端的webui.db文件哈希值不同,准备上传..."
|
| 86 |
+
else
|
| 87 |
+
echo "云端不存在webui_latest.db文件,直接上传文件"
|
| 88 |
+
fi
|
| 89 |
+
|
| 90 |
+
# 上传最新的webui_latest.db到 WebDAV
|
| 91 |
+
cp ./data/webui.db ./data/webdav/webui_latest.db
|
| 92 |
+
curl -T ./data/webdav/webui_latest.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/OpenWebUI/webui_latest.db" && {
|
| 93 |
+
echo "最新的webui_latest.db上传成功"
|
| 94 |
+
} || {
|
| 95 |
+
echo "上传webui_latest.db失败"
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
# 上传以日期命名的备份文件
|
| 99 |
+
FILENAME="webui_$(date +'%m_%d').db"
|
| 100 |
+
curl -T ./data/webdav/webui_latest.db --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/OpenWebUI/$FILENAME" && {
|
| 101 |
+
echo "备份文件 $FILENAME 上传成功"
|
| 102 |
+
} || {
|
| 103 |
+
echo "上传备份文件 $FILENAME 失败"
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
# 获取当前 WebDAV 目录中的所有备份文件,按时间排序
|
| 107 |
+
echo "检查云端备份文件..."
|
| 108 |
+
backup_files=$(curl -s --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/OpenWebUI/" | grep -o 'webui_.*\.db' | grep -v 'webui_latest.db' | sort)
|
| 109 |
+
|
| 110 |
+
# 如果备份文件超过 5 个,则删除最旧的一个
|
| 111 |
+
backup_count=$(echo "$backup_files" | wc -l)
|
| 112 |
+
if [ "$backup_count" -gt 5 ]; then
|
| 113 |
+
oldest_file=$(echo "$backup_files" | head -n 1)
|
| 114 |
+
echo "云端备份文件超过5个,删除最旧的备份文件: $oldest_file"
|
| 115 |
+
|
| 116 |
+
curl -X DELETE --user "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$WEBDAV_URL/OpenWebUI/$oldest_file" && {
|
| 117 |
+
echo "删除最旧备份文件成功"
|
| 118 |
+
} || {
|
| 119 |
+
echo "删除最旧备份文件失败"
|
| 120 |
+
}
|
| 121 |
+
fi
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
# 定义同步函数
|
| 125 |
+
sync_data() {
|
| 126 |
+
while true; do
|
| 127 |
+
echo "正在开始同步"
|
| 128 |
+
|
| 129 |
+
# 上传文件到WebDAV
|
| 130 |
+
upload_to_webdav
|
| 131 |
+
|
| 132 |
+
# 等待时间间隔
|
| 133 |
+
SYNC_INTERVAL=${SYNC_INTERVAL:-7200}
|
| 134 |
+
echo "当前时间 $(date '+%Y-%m-%d %H:%M:%S')"
|
| 135 |
+
echo "等待 ${SYNC_INTERVAL} 秒后进行下一次同步..."
|
| 136 |
+
sleep $SYNC_INTERVAL
|
| 137 |
+
done
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
# 初始拉取最新的webui_latest.db文件
|
| 141 |
+
download_latest_db
|
| 142 |
+
|
| 143 |
+
# 后台启动同步进程
|
| 144 |
+
sync_data &
|