feat: add restore backup zip
This commit is contained in:
@@ -564,6 +564,7 @@ nginx -t && nginx -s reload
|
||||
baihu server # 以前台方式启动面板的后台进程服务(面板启动指令)
|
||||
baihu reposync # 供定时任务调用,将远程 Git 仓库的高级特性同步到本地目录中
|
||||
baihu resetpwd # 交互式重置系统 admin 账号密码(密码丢失时可通过进入终端重置)
|
||||
baihu restore <file> # 使用本地的 .zip 备份压缩包文件,一条命令直接全量恢复系统数据
|
||||
```
|
||||
|
||||
终端执行 `baihu` 会直接打印内置支持的高级命令帮助列表。
|
||||
|
||||
@@ -3,6 +3,7 @@ package cmd
|
||||
import (
|
||||
"github.com/engigu/baihu-panel/cmd/reposync"
|
||||
"github.com/engigu/baihu-panel/cmd/resetpwd"
|
||||
"github.com/engigu/baihu-panel/cmd/restore"
|
||||
)
|
||||
|
||||
// CommandHandler 定义命令执行函数
|
||||
@@ -12,4 +13,5 @@ type CommandHandler func(args []string)
|
||||
var Handlers = map[string]CommandHandler{
|
||||
"reposync": reposync.Run,
|
||||
"resetpwd": resetpwd.Run,
|
||||
"restore": restore.Run,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package restore
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/engigu/baihu-panel/internal/bootstrap"
|
||||
"github.com/engigu/baihu-panel/internal/services"
|
||||
)
|
||||
|
||||
func Run(args []string) {
|
||||
if len(args) < 1 {
|
||||
fmt.Println("用法: baihu restore <backup_file.zip>")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
backupFile := args[0]
|
||||
absPath, err := filepath.Abs(backupFile)
|
||||
if err != nil {
|
||||
fmt.Printf("文件路径解析失败: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if _, err := os.Stat(absPath); os.IsNotExist(err) {
|
||||
fmt.Printf("错误: 备份文件 '%s' 不存在\n", absPath)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// 必须初始化环境与数据库才能恢复数据
|
||||
bootstrap.InitBasic()
|
||||
|
||||
backupService := services.NewBackupService()
|
||||
fmt.Printf("正在从 '%s' 恢复系统数据,请勿强制中断...\n", absPath)
|
||||
err = backupService.Restore(absPath)
|
||||
if err != nil {
|
||||
fmt.Printf("恢复备份失败: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("--------------------------------------------------")
|
||||
fmt.Println("系统备份恢复成功!")
|
||||
fmt.Println("注意:部分设定可能需要重启后台服务后才能完全生效。")
|
||||
fmt.Println("--------------------------------------------------")
|
||||
}
|
||||
@@ -20,4 +20,8 @@ var Commands = []CommandInfo{
|
||||
Name: "resetpwd",
|
||||
Description: "重置 admin 用户密码(需要二次确认)",
|
||||
},
|
||||
{
|
||||
Name: "restore",
|
||||
Description: "从本地 zip 文件中全量恢复系统级备份数据",
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user