1
0
mirror of https://github.com/1Panel-dev/1Panel.git synced 2025-03-17 03:04:46 +08:00

fix: 兼容安装目录设置为根目录的情况

This commit is contained in:
ssongliu 2023-07-27 15:52:25 +08:00 committed by ssongliu
parent 40aaa1ceb0
commit 7a67377aa9
14 changed files with 64 additions and 57 deletions

View File

@ -5,11 +5,6 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
"github.com/1Panel-dev/1Panel/backend/app/dto/request"
"github.com/1Panel-dev/1Panel/backend/i18n"
"github.com/subosito/gotenv"
"gopkg.in/yaml.v3"
"math" "math"
"net/http" "net/http"
"os" "os"
@ -20,6 +15,12 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
"github.com/1Panel-dev/1Panel/backend/app/dto/request"
"github.com/1Panel-dev/1Panel/backend/i18n"
"github.com/subosito/gotenv"
"gopkg.in/yaml.v3"
"github.com/1Panel-dev/1Panel/backend/app/repo" "github.com/1Panel-dev/1Panel/backend/app/repo"
"github.com/1Panel-dev/1Panel/backend/utils/env" "github.com/1Panel-dev/1Panel/backend/utils/env"
@ -187,13 +188,13 @@ func deleteAppInstall(install model.AppInstall, deleteBackup bool, forceDelete b
if install.App.Key == constant.AppMysql { if install.App.Key == constant.AppMysql {
_ = mysqlRepo.DeleteAll(ctx) _ = mysqlRepo.DeleteAll(ctx)
} }
uploadDir := fmt.Sprintf("%s/1panel/uploads/app/%s/%s", global.CONF.System.BaseDir, install.App.Key, install.Name) uploadDir := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("1panel/uploads/app/%s/%s", install.App.Key, install.Name))
if _, err := os.Stat(uploadDir); err == nil { if _, err := os.Stat(uploadDir); err == nil {
_ = os.RemoveAll(uploadDir) _ = os.RemoveAll(uploadDir)
} }
if deleteBackup { if deleteBackup {
localDir, _ := loadLocalDir() localDir, _ := loadLocalDir()
backupDir := fmt.Sprintf("%s/app/%s/%s", localDir, install.App.Key, install.Name) backupDir := path.Join(localDir, fmt.Sprintf("app/%s/%s", install.App.Key, install.Name))
if _, err := os.Stat(backupDir); err == nil { if _, err := os.Stat(backupDir); err == nil {
_ = os.RemoveAll(backupDir) _ = os.RemoveAll(backupDir)
} }

View File

@ -34,7 +34,7 @@ func (u *BackupService) AppBackup(req dto.CommonBackup) error {
} }
timeNow := time.Now().Format("20060102150405") timeNow := time.Now().Format("20060102150405")
backupDir := fmt.Sprintf("%s/app/%s/%s", localDir, req.Name, req.DetailName) backupDir := path.Join(localDir, fmt.Sprintf("app/%s/%s", req.Name, req.DetailName))
fileName := fmt.Sprintf("%s_%s.tar.gz", req.DetailName, timeNow) fileName := fmt.Sprintf("%s_%s.tar.gz", req.DetailName, timeNow)
if err := handleAppBackup(&install, backupDir, fileName); err != nil { if err := handleAppBackup(&install, backupDir, fileName); err != nil {
@ -149,7 +149,7 @@ func handleAppRecover(install *model.AppInstall, recoverFile string, isRollback
} }
if !isRollback { if !isRollback {
rollbackFile := fmt.Sprintf("%s/original/app/%s_%s.tar.gz", global.CONF.System.BaseDir, install.Name, time.Now().Format("20060102150405")) rollbackFile := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("original/app/%s_%s.tar.gz", install.Name, time.Now().Format("20060102150405")))
if err := handleAppBackup(install, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil { if err := handleAppBackup(install, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil {
return fmt.Errorf("backup app %s for rollback before recover failed, err: %v", install.Name, err) return fmt.Errorf("backup app %s for rollback before recover failed, err: %v", install.Name, err)
} }

View File

@ -23,7 +23,7 @@ func (u *BackupService) MysqlBackup(req dto.CommonBackup) error {
} }
timeNow := time.Now().Format("20060102150405") timeNow := time.Now().Format("20060102150405")
targetDir := fmt.Sprintf("%s/database/mysql/%s/%s", localDir, req.Name, req.DetailName) targetDir := path.Join(localDir, fmt.Sprintf("database/mysql/%s/%s", req.Name, req.DetailName))
fileName := fmt.Sprintf("%s_%s.sql.gz", req.DetailName, timeNow) fileName := fmt.Sprintf("%s_%s.sql.gz", req.DetailName, timeNow)
if err := handleMysqlBackup(req.DetailName, targetDir, fileName); err != nil { if err := handleMysqlBackup(req.DetailName, targetDir, fileName); err != nil {
@ -137,7 +137,7 @@ func handleMysqlRecover(req dto.CommonRecover, isRollback bool) error {
} }
if isRollback { if isRollback {
rollbackFile := fmt.Sprintf("%s/original/database/%s_%s.sql.gz", global.CONF.System.BaseDir, req.DetailName, time.Now().Format("20060102150405")) rollbackFile := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("original/database/%s_%s.sql.gz", req.DetailName, time.Now().Format("20060102150405")))
if err := cli.Backup(client.BackupInfo{ if err := cli.Backup(client.BackupInfo{
Name: req.DetailName, Name: req.DetailName,
Format: dbInfo.Format, Format: dbInfo.Format,

View File

@ -43,7 +43,7 @@ func (u *BackupService) RedisBackup() error {
fileName = fmt.Sprintf("%s.tar.gz", timeNow) fileName = fmt.Sprintf("%s.tar.gz", timeNow)
} }
} }
backupDir := fmt.Sprintf("%s/database/redis/%s", localDir, redisInfo.Name) backupDir := path.Join(localDir, fmt.Sprintf("database/redis/%s", redisInfo.Name))
if err := handleRedisBackup(redisInfo, backupDir, fileName); err != nil { if err := handleRedisBackup(redisInfo, backupDir, fileName); err != nil {
return err return err
} }
@ -143,7 +143,7 @@ func handleRedisRecover(redisInfo *repo.RootInfo, recoverFile string, isRollback
suffix = "tar.gz" suffix = "tar.gz"
} }
} }
rollbackFile := fmt.Sprintf("%s/original/database/redis/%s_%s.%s", global.CONF.System.BaseDir, redisInfo.Name, time.Now().Format("20060102150405"), suffix) rollbackFile := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("original/database/redis/%s_%s.%s", redisInfo.Name, time.Now().Format("20060102150405"), suffix))
if err := handleRedisBackup(redisInfo, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil { if err := handleRedisBackup(redisInfo, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil {
return fmt.Errorf("backup database %s for rollback before recover failed, err: %v", redisInfo.Name, err) return fmt.Errorf("backup database %s for rollback before recover failed, err: %v", redisInfo.Name, err)
} }

View File

@ -31,7 +31,7 @@ func (u *BackupService) WebsiteBackup(req dto.CommonBackup) error {
} }
timeNow := time.Now().Format("20060102150405") timeNow := time.Now().Format("20060102150405")
backupDir := fmt.Sprintf("%s/website/%s", localDir, req.Name) backupDir := path.Join(localDir, fmt.Sprintf("website/%s", req.Name))
fileName := fmt.Sprintf("%s_%s.tar.gz", website.PrimaryDomain, timeNow) fileName := fmt.Sprintf("%s_%s.tar.gz", website.PrimaryDomain, timeNow)
if err := handleWebsiteBackup(&website, backupDir, fileName); err != nil { if err := handleWebsiteBackup(&website, backupDir, fileName); err != nil {
return err return err
@ -103,7 +103,7 @@ func handleWebsiteRecover(website *model.Website, recoverFile string, isRollback
isOk := false isOk := false
if !isRollback { if !isRollback {
rollbackFile := fmt.Sprintf("%s/original/website/%s_%s.tar.gz", global.CONF.System.BaseDir, website.Alias, time.Now().Format("20060102150405")) rollbackFile := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("original/website/%s_%s.tar.gz", website.Alias, time.Now().Format("20060102150405")))
if err := handleWebsiteBackup(website, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil { if err := handleWebsiteBackup(website, path.Dir(rollbackFile), path.Base(rollbackFile)); err != nil {
return fmt.Errorf("backup website %s for rollback before recover failed, err: %v", website.Alias, err) return fmt.Errorf("backup website %s for rollback before recover failed, err: %v", website.Alias, err)
} }

View File

@ -124,7 +124,7 @@ func (u *CronjobService) handleBackup(cronjob *model.Cronjob, startTime time.Tim
return strings.Join(paths, ","), err return strings.Join(paths, ","), err
default: default:
fileName := fmt.Sprintf("directory%s_%s.tar.gz", strings.ReplaceAll(cronjob.SourceDir, "/", "_"), startTime.Format("20060102150405")) fileName := fmt.Sprintf("directory%s_%s.tar.gz", strings.ReplaceAll(cronjob.SourceDir, "/", "_"), startTime.Format("20060102150405"))
backupDir := fmt.Sprintf("%s/%s/%s", localDir, cronjob.Type, cronjob.Name) backupDir := path.Join(localDir, fmt.Sprintf("%s/%s", cronjob.Type, cronjob.Name))
itemFileDir := fmt.Sprintf("%s/%s", cronjob.Type, cronjob.Name) itemFileDir := fmt.Sprintf("%s/%s", cronjob.Type, cronjob.Name)
global.LOG.Infof("handle tar %s to %s", backupDir, fileName) global.LOG.Infof("handle tar %s to %s", backupDir, fileName)
if err := handleTar(cronjob.SourceDir, backupDir, fileName, cronjob.ExclusionRules); err != nil { if err := handleTar(cronjob.SourceDir, backupDir, fileName, cronjob.ExclusionRules); err != nil {
@ -285,7 +285,7 @@ func (u *CronjobService) handleDatabase(cronjob model.Cronjob, backup model.Back
return paths, err return paths, err
} }
record.Name = dbInfo.MysqlName record.Name = dbInfo.MysqlName
backupDir := fmt.Sprintf("%s/database/mysql/%s/%s", localDir, record.Name, dbName) backupDir := path.Join(localDir, fmt.Sprintf("database/mysql/%s/%s", record.Name, dbName))
record.FileName = fmt.Sprintf("db_%s_%s.sql.gz", dbName, startTime.Format("20060102150405")) record.FileName = fmt.Sprintf("db_%s_%s.sql.gz", dbName, startTime.Format("20060102150405"))
if err = handleMysqlBackup(dbName, backupDir, record.FileName); err != nil { if err = handleMysqlBackup(dbName, backupDir, record.FileName); err != nil {
return paths, err return paths, err
@ -429,7 +429,7 @@ func (u *CronjobService) handleWebsite(cronjob model.Cronjob, backup model.Backu
if err != nil { if err != nil {
return paths, err return paths, err
} }
backupDir := fmt.Sprintf("%s/website/%s", localDir, website.PrimaryDomain) backupDir := path.Join(localDir, fmt.Sprintf("website/%s", website.PrimaryDomain))
record.FileDir = backupDir record.FileDir = backupDir
itemFileDir := strings.TrimPrefix(backupDir, localDir+"/") itemFileDir := strings.TrimPrefix(backupDir, localDir+"/")
if !cronjob.KeepLocal && backup.Type != "LOCAL" { if !cronjob.KeepLocal && backup.Type != "LOCAL" {

View File

@ -7,6 +7,7 @@ import (
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"path"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
@ -221,7 +222,7 @@ func (u *MysqlService) Delete(ctx context.Context, req dto.MysqlDBDelete) error
return err return err
} }
uploadDir := fmt.Sprintf("%s/1panel/uploads/database/mysql/%s/%s", global.CONF.System.BaseDir, app.Name, db.Name) uploadDir := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("1panel/uploads/database/mysql/%s/%s", app.Name, db.Name))
if _, err := os.Stat(uploadDir); err == nil { if _, err := os.Stat(uploadDir); err == nil {
_ = os.RemoveAll(uploadDir) _ = os.RemoveAll(uploadDir)
} }
@ -230,7 +231,7 @@ func (u *MysqlService) Delete(ctx context.Context, req dto.MysqlDBDelete) error
if err != nil && !req.ForceDelete { if err != nil && !req.ForceDelete {
return err return err
} }
backupDir := fmt.Sprintf("%s/database/mysql/%s/%s", localDir, db.MysqlName, db.Name) backupDir := path.Join(localDir, fmt.Sprintf("database/mysql/%s/%s", db.MysqlName, db.Name))
if _, err := os.Stat(backupDir); err == nil { if _, err := os.Stat(backupDir); err == nil {
_ = os.RemoveAll(backupDir) _ = os.RemoveAll(backupDir)
} }

View File

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
@ -163,7 +164,7 @@ func (u *RedisService) SearchBackupListWithPage(req dto.PageInfo) (int64, interf
if err != nil { if err != nil {
return 0, nil, err return 0, nil, err
} }
backupDir := fmt.Sprintf("%s/database/redis/%s", localDir, redisInfo.Name) backupDir := path.Join(localDir, fmt.Sprintf("database/redis/%s", redisInfo.Name))
_ = filepath.Walk(backupDir, func(path string, info os.FileInfo, err error) error { _ = filepath.Walk(backupDir, func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
return nil return nil

View File

@ -7,6 +7,7 @@ import (
"encoding/pem" "encoding/pem"
"fmt" "fmt"
"os" "os"
"path"
"strconv" "strconv"
"strings" "strings"
"time" "time"
@ -172,7 +173,7 @@ func (u *SettingService) UpdatePort(port uint) error {
} }
func (u *SettingService) UpdateSSL(c *gin.Context, req dto.SSLUpdate) error { func (u *SettingService) UpdateSSL(c *gin.Context, req dto.SSLUpdate) error {
secretDir := global.CONF.System.BaseDir + "/1panel/secret/" secretDir := path.Join(global.CONF.System.BaseDir, "1panel/secret/")
if req.SSL == "disable" { if req.SSL == "disable" {
if err := settingRepo.Update("SSL", "disable"); err != nil { if err := settingRepo.Update("SSL", "disable"); err != nil {
return err return err
@ -278,16 +279,16 @@ func (u *SettingService) LoadFromCert() (*dto.SSLInfo, error) {
} }
switch sslType.Value { switch sslType.Value {
case "import": case "import":
if _, err := os.Stat(global.CONF.System.BaseDir + "/1panel/secret/server.crt"); err != nil { if _, err := os.Stat(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt")); err != nil {
return nil, fmt.Errorf("load server.crt file failed, err: %v", err) return nil, fmt.Errorf("load server.crt file failed, err: %v", err)
} }
certFile, _ := os.ReadFile(global.CONF.System.BaseDir + "/1panel/secret/server.crt") certFile, _ := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt"))
data.Cert = string(certFile) data.Cert = string(certFile)
if _, err := os.Stat(global.CONF.System.BaseDir + "/1panel/secret/server.key"); err != nil { if _, err := os.Stat(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key")); err != nil {
return nil, fmt.Errorf("load server.key file failed, err: %v", err) return nil, fmt.Errorf("load server.key file failed, err: %v", err)
} }
keyFile, _ := os.ReadFile(global.CONF.System.BaseDir + "/1panel/secret/server.key") keyFile, _ := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key"))
data.Key = string(keyFile) data.Key = string(keyFile)
case "select": case "select":
sslID, err := settingRepo.Get(settingRepo.WithByKey("SSLID")) sslID, err := settingRepo.Get(settingRepo.WithByKey("SSLID"))
@ -341,7 +342,7 @@ func (u *SettingService) UpdatePassword(c *gin.Context, old, new string) error {
func loadInfoFromCert() (*dto.SSLInfo, error) { func loadInfoFromCert() (*dto.SSLInfo, error) {
var info dto.SSLInfo var info dto.SSLInfo
certFile := global.CONF.System.BaseDir + "/1panel/secret/server.crt" certFile := path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt")
if _, err := os.Stat(certFile); err != nil { if _, err := os.Stat(certFile); err != nil {
return &info, err return &info, err
} }
@ -374,11 +375,11 @@ func loadInfoFromCert() (*dto.SSLInfo, error) {
} }
func checkCertValid(domain string) error { func checkCertValid(domain string) error {
certificate, err := os.ReadFile(global.CONF.System.BaseDir + "/1panel/secret/server.crt.tmp") certificate, err := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt.tmp"))
if err != nil { if err != nil {
return err return err
} }
key, err := os.ReadFile(global.CONF.System.BaseDir + "/1panel/secret/server.key.tmp") key, err := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key.tmp"))
if err != nil { if err != nil {
return err return err
} }

View File

@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"os" "os"
"path"
"strings" "strings"
"time" "time"
@ -126,7 +127,7 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
timeNow := time.Now().Format("20060102150405") timeNow := time.Now().Format("20060102150405")
versionItem, _ := settingRepo.Get(settingRepo.WithByKey("SystemVersion")) versionItem, _ := settingRepo.Get(settingRepo.WithByKey("SystemVersion"))
rootDir := fmt.Sprintf("%s/system/1panel_%s_%s", localDir, versionItem.Value, timeNow) rootDir := path.Join(localDir, fmt.Sprintf("system/1panel_%s_%s", versionItem.Value, timeNow))
backupPanelDir := fmt.Sprintf("%s/1panel", rootDir) backupPanelDir := fmt.Sprintf("%s/1panel", rootDir)
_ = os.MkdirAll(backupPanelDir, os.ModePerm) _ = os.MkdirAll(backupPanelDir, os.ModePerm)
backupDockerDir := fmt.Sprintf("%s/docker", rootDir) backupDockerDir := fmt.Sprintf("%s/docker", rootDir)
@ -180,7 +181,8 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
return return
} }
if err := u.handlePanelDatas(snap.ID, fileOp, "snapshot", global.CONF.System.BaseDir+"/1panel", backupPanelDir, localDir, dockerDataDir); err != nil { dataDir := path.Join(global.CONF.System.BaseDir, "1panel")
if err := u.handlePanelDatas(snap.ID, fileOp, "snapshot", dataDir, backupPanelDir, localDir, dockerDataDir); err != nil {
updateSnapshotStatus(snap.ID, constant.StatusFailed, err.Error()) updateSnapshotStatus(snap.ID, constant.StatusFailed, err.Error())
return return
} }
@ -190,7 +192,7 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
BaseDir: global.CONF.System.BaseDir, BaseDir: global.CONF.System.BaseDir,
DockerDataDir: dockerDataDir, DockerDataDir: dockerDataDir,
BackupDataDir: localDir, BackupDataDir: localDir,
PanelDataDir: global.CONF.System.BaseDir + "/1panel", PanelDataDir: dataDir,
LiveRestoreEnabled: liveRestoreStatus, LiveRestoreEnabled: liveRestoreStatus,
} }
if err := u.saveJson(snapJson, rootDir); err != nil { if err := u.saveJson(snapJson, rootDir); err != nil {
@ -198,7 +200,7 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
return return
} }
if err := handleTar(rootDir, fmt.Sprintf("%s/system", localDir), fmt.Sprintf("1panel_%s_%s.tar.gz", versionItem.Value, timeNow), ""); err != nil { if err := handleTar(rootDir, path.Join(localDir, "system"), fmt.Sprintf("1panel_%s_%s.tar.gz", versionItem.Value, timeNow), ""); err != nil {
updateSnapshotStatus(snap.ID, constant.StatusFailed, err.Error()) updateSnapshotStatus(snap.ID, constant.StatusFailed, err.Error())
return return
} }
@ -207,7 +209,7 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
global.LOG.Infof("start to upload snapshot to %s, please wait", backup.Type) global.LOG.Infof("start to upload snapshot to %s, please wait", backup.Type)
_ = snapshotRepo.Update(snap.ID, map[string]interface{}{"status": constant.StatusUploading}) _ = snapshotRepo.Update(snap.ID, map[string]interface{}{"status": constant.StatusUploading})
localPath := fmt.Sprintf("%s/system/1panel_%s_%s.tar.gz", localDir, versionItem.Value, timeNow) localPath := path.Join(localDir, fmt.Sprintf("system/1panel_%s_%s.tar.gz", versionItem.Value, timeNow))
itemBackupPath := strings.TrimLeft(backup.BackupPath, "/") itemBackupPath := strings.TrimLeft(backup.BackupPath, "/")
itemBackupPath = strings.TrimRight(itemBackupPath, "/") itemBackupPath = strings.TrimRight(itemBackupPath, "/")
if ok, err := backupAccount.Upload(localPath, fmt.Sprintf("%s/system_snapshot/1panel_%s_%s.tar.gz", itemBackupPath, versionItem.Value, timeNow)); err != nil || !ok { if ok, err := backupAccount.Upload(localPath, fmt.Sprintf("%s/system_snapshot/1panel_%s_%s.tar.gz", itemBackupPath, versionItem.Value, timeNow)); err != nil || !ok {
@ -216,7 +218,7 @@ func (u *SnapshotService) SnapshotCreate(req dto.SnapshotCreate) error {
return return
} }
_ = snapshotRepo.Update(snap.ID, map[string]interface{}{"status": constant.StatusSuccess}) _ = snapshotRepo.Update(snap.ID, map[string]interface{}{"status": constant.StatusSuccess})
_ = os.RemoveAll(fmt.Sprintf("%s/system/1panel_%s_%s.tar.gz", localDir, versionItem.Value, timeNow)) _ = os.RemoveAll(path.Join(localDir, fmt.Sprintf("system/1panel_%s_%s.tar.gz", versionItem.Value, timeNow)))
global.LOG.Infof("upload snapshot to %s success", backup.Type) global.LOG.Infof("upload snapshot to %s success", backup.Type)
}() }()
@ -248,7 +250,7 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error {
if err != nil { if err != nil {
return err return err
} }
baseDir := fmt.Sprintf("%s/system/%s", localDir, snap.Name) baseDir := path.Join(localDir, fmt.Sprintf("system/%s", snap.Name))
if _, err := os.Stat(baseDir); err != nil && os.IsNotExist(err) { if _, err := os.Stat(baseDir); err != nil && os.IsNotExist(err) {
_ = os.MkdirAll(baseDir, os.ModePerm) _ = os.MkdirAll(baseDir, os.ModePerm)
} }
@ -300,7 +302,7 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error {
_ = os.MkdirAll(u.OriginalPath, os.ModePerm) _ = os.MkdirAll(u.OriginalPath, os.ModePerm)
snapJson.OldBaseDir = global.CONF.System.BaseDir snapJson.OldBaseDir = global.CONF.System.BaseDir
snapJson.OldPanelDataDir = global.CONF.System.BaseDir + "/1panel" snapJson.OldPanelDataDir = path.Join(global.CONF.System.BaseDir, "1panel")
snapJson.OldBackupDataDir = localDir snapJson.OldBackupDataDir = localDir
recoverPanelDir := fmt.Sprintf("%s/%s/1panel", baseDir, snap.Name) recoverPanelDir := fmt.Sprintf("%s/%s/1panel", baseDir, snap.Name)
liveRestore := false liveRestore := false
@ -397,7 +399,7 @@ func (u *SnapshotService) SnapshotRollback(req dto.SnapshotRecover) error {
} }
fileOp := files.NewFileOp() fileOp := files.NewFileOp()
rootDir := fmt.Sprintf("%s/system/%s/%s", localDir, snap.Name, snap.Name) rootDir := path.Join(localDir, fmt.Sprintf("system/%s/%s", snap.Name, snap.Name))
_ = settingRepo.Update("SystemStatus", "Rollbacking") _ = settingRepo.Update("SystemStatus", "Rollbacking")
_ = snapshotRepo.Update(snap.ID, map[string]interface{}{"rollback_status": constant.StatusWaiting}) _ = snapshotRepo.Update(snap.ID, map[string]interface{}{"rollback_status": constant.StatusWaiting})
@ -728,8 +730,9 @@ func (u *SnapshotService) Delete(req dto.BatchDeleteReq) error {
return err return err
} }
for _, snap := range backups { for _, snap := range backups {
if _, err := os.Stat(fmt.Sprintf("%s/system/%s/%s.tar.gz", localDir, snap.Name, snap.Name)); err == nil { itemFile := path.Join(localDir, fmt.Sprintf("system/%s/%s.tar.gz", snap.Name, snap.Name))
_ = os.Remove(fmt.Sprintf("%s/system/%s/%s.tar.gz", localDir, snap.Name, snap.Name)) if _, err := os.Stat(itemFile); err == nil {
_ = os.Remove(itemFile)
} }
} }
if err := snapshotRepo.Delete(commonRepo.WithIdsIn(req.Ids)); err != nil { if err := snapshotRepo.Delete(commonRepo.WithIdsIn(req.Ids)); err != nil {

View File

@ -9,8 +9,6 @@ import (
"encoding/pem" "encoding/pem"
"errors" "errors"
"fmt" "fmt"
"github.com/1Panel-dev/1Panel/backend/utils/compose"
"github.com/1Panel-dev/1Panel/backend/utils/env"
"os" "os"
"path" "path"
"reflect" "reflect"
@ -19,6 +17,9 @@ import (
"strings" "strings"
"time" "time"
"github.com/1Panel-dev/1Panel/backend/utils/compose"
"github.com/1Panel-dev/1Panel/backend/utils/env"
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper" "github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
"github.com/1Panel-dev/1Panel/backend/utils/cmd" "github.com/1Panel-dev/1Panel/backend/utils/cmd"
"github.com/1Panel-dev/1Panel/backend/utils/common" "github.com/1Panel-dev/1Panel/backend/utils/common"
@ -424,13 +425,13 @@ func (w WebsiteService) DeleteWebsite(req request.WebsiteDelete) error {
if req.DeleteBackup { if req.DeleteBackup {
localDir, _ := loadLocalDir() localDir, _ := loadLocalDir()
backupDir := fmt.Sprintf("%s/website/%s", localDir, website.Alias) backupDir := path.Join(localDir, fmt.Sprintf("website/%s", website.Alias))
if _, err := os.Stat(backupDir); err == nil { if _, err := os.Stat(backupDir); err == nil {
_ = os.RemoveAll(backupDir) _ = os.RemoveAll(backupDir)
} }
global.LOG.Infof("delete website %s backups successful", website.Alias) global.LOG.Infof("delete website %s backups successful", website.Alias)
} }
uploadDir := fmt.Sprintf("%s/1panel/uploads/website/%s", global.CONF.System.BaseDir, website.Alias) uploadDir := path.Join(global.CONF.System.BaseDir, fmt.Sprintf("1panel/uploads/website/%s", website.Alias))
if _, err := os.Stat(uploadDir); err == nil { if _, err := os.Stat(uploadDir); err == nil {
_ = os.RemoveAll(uploadDir) _ = os.RemoveAll(uploadDir)
} }

View File

@ -47,9 +47,6 @@ func Init() {
password = loadParams("ORIGINAL_PASSWORD") password = loadParams("ORIGINAL_PASSWORD")
entrance = loadParams("ORIGINAL_ENTRANCE") entrance = loadParams("ORIGINAL_ENTRANCE")
if strings.HasSuffix(baseDir, "/") {
baseDir = baseDir[:strings.LastIndex(baseDir, "/")]
}
reader := bytes.NewReader(conf.AppYaml) reader := bytes.NewReader(conf.AppYaml)
if err := v.ReadConfig(reader); err != nil { if err := v.ReadConfig(reader); err != nil {
panic(fmt.Errorf("Fatal error config file: %s \n", err)) panic(fmt.Errorf("Fatal error config file: %s \n", err))
@ -88,12 +85,12 @@ func Init() {
global.CONF = serverConfig global.CONF = serverConfig
global.CONF.System.BaseDir = baseDir global.CONF.System.BaseDir = baseDir
global.CONF.System.IsDemo = v.GetBool("system.is_demo") global.CONF.System.IsDemo = v.GetBool("system.is_demo")
global.CONF.System.DataDir = global.CONF.System.BaseDir + "/1panel" global.CONF.System.DataDir = path.Join(global.CONF.System.BaseDir, "1panel")
global.CONF.System.Cache = global.CONF.System.DataDir + "/cache" global.CONF.System.Cache = path.Join(global.CONF.System.DataDir, "cache")
global.CONF.System.Backup = global.CONF.System.DataDir + "/backup" global.CONF.System.Backup = path.Join(global.CONF.System.DataDir, "backup")
global.CONF.System.DbPath = global.CONF.System.DataDir + "/db" global.CONF.System.DbPath = path.Join(global.CONF.System.DataDir, "db")
global.CONF.System.LogPath = global.CONF.System.DataDir + "/log" global.CONF.System.LogPath = path.Join(global.CONF.System.DataDir, "log")
global.CONF.System.TmpDir = global.CONF.System.DataDir + "/tmp" global.CONF.System.TmpDir = path.Join(global.CONF.System.DataDir, "tmp")
global.CONF.System.Port = port global.CONF.System.Port = port
global.CONF.System.Version = version global.CONF.System.Version = version
global.CONF.System.Username = username global.CONF.System.Username = username

View File

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"os" "os"
"path"
"time" "time"
"github.com/1Panel-dev/1Panel/backend/init/app" "github.com/1Panel-dev/1Panel/backend/init/app"
@ -58,11 +59,11 @@ func Start() {
panic(err) panic(err)
} }
} else { } else {
certificate, err := os.ReadFile(global.CONF.System.BaseDir + "/1panel/secret/server.crt") certificate, err := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt"))
if err != nil { if err != nil {
panic(err) panic(err)
} }
key, err := os.ReadFile(global.CONF.System.BaseDir + "/1panel/secret/server.key") key, err := os.ReadFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key"))
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -9,6 +9,7 @@ import (
"math/big" "math/big"
"net" "net"
"os" "os"
"path"
"time" "time"
"github.com/1Panel-dev/1Panel/backend/global" "github.com/1Panel-dev/1Panel/backend/global"
@ -90,7 +91,7 @@ func GenerateSSL(domain string) error {
pemBytes = append(pemBytes, pem.EncodeToMemory(clientCertBlock)...) pemBytes = append(pemBytes, pem.EncodeToMemory(clientCertBlock)...)
pemBytes = append(pemBytes, pem.EncodeToMemory(interCertBlock)...) pemBytes = append(pemBytes, pem.EncodeToMemory(interCertBlock)...)
pemBytes = append(pemBytes, pem.EncodeToMemory(rootCertBlock)...) pemBytes = append(pemBytes, pem.EncodeToMemory(rootCertBlock)...)
certOut, err := os.OpenFile(global.CONF.System.BaseDir+"/1panel/secret/server.crt.tmp", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) certOut, err := os.OpenFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.crt.tmp"), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }
@ -99,7 +100,7 @@ func GenerateSSL(domain string) error {
return err return err
} }
keyOut, err := os.OpenFile(global.CONF.System.BaseDir+"/1panel/secret/server.key.tmp", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) keyOut, err := os.OpenFile(path.Join(global.CONF.System.BaseDir, "1panel/secret/server.key.tmp"), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil { if err != nil {
return err return err
} }