leafmoes commited on
Commit
f883aff
·
1 Parent(s): b7907f2

init aichat

Browse files
Files changed (3) hide show
  1. Dockerfile +6 -0
  2. README.md +4 -5
  3. 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: gray
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 &