1
0
Эх сурвалжийг харах

增加rclone (#77)

* 增加rclone
配置网页切换内容效果

* feature:增加rclone的配置路径到默认路径去

* fix: 调整docker部署的说明,增加rclone的路径说明

* feat:微调页面显示,按需使用
langren1353 2 жил өмнө
parent
commit
8e64557d3e
4 өөрчлөгдсөн 60 нэмэгдсэн , 13 устгасан
  1. 10 1
      Dockerfile
  2. 3 1
      README.md
  3. 3 3
      web/basic_auth.go
  4. 44 8
      web/writing.html

+ 10 - 1
Dockerfile

@@ -10,7 +10,7 @@ RUN go env -w GO111MODULE=on \
 FROM golang:1.20 AS s3sync
 
 WORKDIR /src/
-RUN git clone --branch 2.55 https://github.com/larrabee/s3sync.git
+RUN git clone --branch 2.61 https://github.com/larrabee/s3sync.git
 
 WORKDIR /src/s3sync
 ENV CGO_ENABLED 0
@@ -35,11 +35,20 @@ RUN sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-
 RUN apt-get install -y postgresql-client-14 \
     && apt-get install -y default-mysql-client
 
+# add RCLone to use directly
+RUN mkdir -p /root/.config/rclone/ && \
+    apt-get install -y curl wget rclone vim
+
 WORKDIR /app
 
 VOLUME /app/backup-x-files
+
+# config ENV and rclone-default-config-path
 ENV TZ=Asia/Shanghai
+ENV XDG_CONFIG_HOME=/app/backup-x-files
+
 COPY --from=builder /app/backup-x /app/backup-x
 COPY --from=s3sync /src/s3sync/s3sync /usr/local/bin/s3sync
+
 EXPOSE 9977
 ENTRYPOINT ["/app/backup-x"]

+ 3 - 1
README.md

@@ -15,13 +15,15 @@
 ## docker中使用
 - 运行docker容器(`/opt/backup-x-files`可替换为主机的目录)
   ```
+  默认启动-rclone的配置会保存到/app/backup-x-files/rclone/rclone.conf:
+  
   docker run -d --name backup-x --restart=always \
     -p 9977:9977 \
     -v /opt/backup-x-files:/app/backup-x-files \
     jeessy/backup-x
   ```
 - 登录 http://your_docker_ip:9977 并配置
-- docker容器默认安装default-mysql-client/postgres-client/[s3sync](https://github.com/larrabee/s3sync)
+- docker容器默认安装default-mysql-client/postgres-client/[s3sync](https://github.com/larrabee/s3sync)/rclone/wget/curl
 
 ## 系统中使用
 - 下载并解压[https://github.com/jeessy2/backup-x/releases](https://github.com/jeessy2/backup-x/releases)

+ 3 - 3
web/basic_auth.go

@@ -33,7 +33,7 @@ func BasicAuth(f ViewFunc) ViewFunc {
 		}
 
 		if ld.FailTimes >= 5 {
-			log.Printf("%s 登失败超过5次! 并延时5分钟响应\n", r.RemoteAddr)
+			log.Printf("%s 登失败超过5次! 并延时5分钟响应\n", r.RemoteAddr)
 			time.Sleep(5 * time.Minute)
 			if ld.FailTimes >= 5 {
 				ld.FailTimes = 0
@@ -67,7 +67,7 @@ func BasicAuth(f ViewFunc) ViewFunc {
 			}
 
 			ld.FailTimes = ld.FailTimes + 1
-			log.Printf("%s 登失败!\n", r.RemoteAddr)
+			log.Printf("%s 登失败!\n", r.RemoteAddr)
 		}
 
 		// 认证失败,提示 401 Unauthorized
@@ -75,6 +75,6 @@ func BasicAuth(f ViewFunc) ViewFunc {
 		w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
 		// 401 状态码
 		w.WriteHeader(http.StatusUnauthorized)
-		log.Printf("%s 请求登!\n", r.RemoteAddr)
+		log.Printf("%s 请求登!\n", r.RemoteAddr)
 	}
 }

+ 44 - 8
web/writing.html

@@ -5,7 +5,7 @@
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <meta name="author" content="jie">
-  <title>backup-x</title>
+  <title>Backup-X</title>
   <!-- Bootstrap CSS -->
   <link rel="stylesheet" href="/static/bootstrap.min.css">
   <link rel="stylesheet" href="/static/common.css">
@@ -18,9 +18,14 @@
     <div class="navbar navbar-dark bg-dark shadow-sm">
       <div class="container d-flex justify-content-between">
         <a href="/" class="navbar-brand d-flex align-items-center">
-          <strong>backup-x</strong>
+          <strong>Backup-X</strong>
+        </a>
+        <a href="https://github.com/jeessy2/backup-x" target="_blank" style="color: white">
+          <strong>Github | Backup-X</strong>
+          <span class="badge badge-secondary">
+            {{.Version}}
+          </span>
         </a>
-        <span class="badge badge-secondary">{{.Version}}</span>
       </div>
     </div>
   </header>
@@ -261,7 +266,19 @@
       </div>
 
       <div class="col-md-3">
-        <p class="font-weight-light text-break" style="margin-top: 115px;font-size: 13px;" id="logs"></p>
+        <div class="nav nav-tabs" role="tablist" style="margin-top: 50px;">
+          <a class="nav-item nav-link active" href="#x0" data-toggle="tab" onclick="changeLog(1)" role="tab">
+            备份日志
+          </a>
+          <a class="nav-item nav-link" href="#x1" data-toggle="tab" onclick="changeLog(2)" role="tab">
+            登录日志
+          </a>
+          <a class="nav-item nav-link" href="#x2" data-toggle="tab" onclick="changeLog(0)" role="tab">
+            全部日志
+          </a>
+        </div>
+        
+        <p class="font-weight-light text-break" style="margin-top: 10px;font-size: 13px;" id="logs"></p>
         <button type="button" class="btn btn-outline-primary btn-sm" id="clearLogBtn">清空日志</button>
       </div>
     </div>
@@ -270,10 +287,22 @@
 
   <script>
     let contentIdx = 0
+    let logList = [] // 0:所有日志;1:日常日志;2:登录日志
 
     function contentChange(i) {
       contentIdx = i
     }
+    
+    function changeLog(type = 0) {
+      const curLogList = logList[type]
+      const totalLogList = logList[0]
+      
+      const failedCount = totalLogList.filter(one => one.includes('登录失败')).length
+      const backupCount = totalLogList.filter(one => one.includes('正在备份项目')).length
+      
+      const html = `备份执行次数:${backupCount}次<br/>历史登录失败:${failedCount}个<br/><br/>` + curLogList.join('<br/>')
+      $("#logs").html(html)
+    }
 
     $(function(){
       $(".submit_btn,.submit_btn_backup_all,.submit_btn_backup_idx").on('click',function(e) {
@@ -317,14 +346,14 @@
       let id = $(that).attr("id").split("_")[1]
       let name = $(that).val()
       let enabled = $("#Enabled_"+id).val()
-      $("#id_"+id).html(enabled == 0?name:name+'<span class="badge badge-pill badge-warning">停用</span>')
+      $("#id_"+id).html(enabled === 0?name:name+'<span class="badge badge-pill badge-warning">停用</span>')
     }
     // enabledChange
     function enabledChange(that) {
       let id = $(that).attr("id").split("_")[1]
       let name = $("#ProjectName_"+id).val()
       let enabled = $(that).val()
-      $("#id_"+id).html(enabled == 0?name:name+'<span class="badge badge-pill badge-warning">停用</span>')
+      $("#id_"+id).html(enabled === 0?name:name+'<span class="badge badge-pill badge-warning">停用</span>')
     }
 
 
@@ -334,7 +363,14 @@
   <script>
     function getLogs() {
       $.get("/logs", function(result){
-        $("#logs").html(result)
+        const curList = result.split("<br/>").filter(one => one.length)
+
+        logList[0] = curList.map(one => one)
+        
+        logList[1] = curList.filter(one => !one.includes("登录"))
+        logList[2] = curList.filter(one => one.includes("登录"))
+        
+        changeLog(1)
       })
     }
     getLogs()
@@ -378,4 +414,4 @@
     })
   </script>
 
-</html>
+</html>