package migrations import ( "encoding/json" "fmt" "os" "github.com/1Panel-dev/1Panel/agent/app/dto/request" "github.com/1Panel-dev/1Panel/agent/app/model" "github.com/1Panel-dev/1Panel/agent/app/service" "github.com/1Panel-dev/1Panel/agent/constant" "github.com/1Panel-dev/1Panel/agent/global" "github.com/1Panel-dev/1Panel/agent/utils/common" "github.com/1Panel-dev/1Panel/agent/utils/encrypt" "github.com/go-gormigrate/gormigrate/v2" "gorm.io/gorm" ) var AddTable = &gormigrate.Migration{ ID: "20240722-add-table", Migrate: func(tx *gorm.DB) error { return tx.AutoMigrate( &model.AppDetail{}, &model.AppInstallResource{}, &model.AppInstall{}, &model.AppTag{}, &model.Tag{}, &model.App{}, &model.BackupAccount{}, &model.BackupRecord{}, &model.Clam{}, &model.Command{}, &model.ComposeTemplate{}, &model.Compose{}, &model.Cronjob{}, &model.Database{}, &model.DatabaseMysql{}, &model.DatabasePostgresql{}, &model.Favorite{}, &model.Forward{}, &model.Firewall{}, &model.Ftp{}, &model.Group{}, &model.Host{}, &model.ImageRepo{}, &model.JobRecords{}, &model.MonitorBase{}, &model.MonitorIO{}, &model.MonitorNetwork{}, &model.PHPExtensions{}, &model.RedisCommand{}, &model.Runtime{}, &model.Setting{}, &model.Snapshot{}, &model.SnapshotStatus{}, &model.Tag{}, &model.Website{}, &model.WebsiteAcmeAccount{}, &model.WebsiteCA{}, &model.WebsiteDnsAccount{}, &model.WebsiteDomain{}, &model.WebsiteSSL{}, ) }, } var InitHost = &gormigrate.Migration{ ID: "20240722-init-host", Migrate: func(tx *gorm.DB) error { group := model.Group{ Name: "default", Type: "host", IsDefault: true, } if err := tx.Create(&group).Error; err != nil { return err } host := model.Host{ Name: "localhost", Addr: "127.0.0.1", User: "root", Port: 22, AuthMode: "password", GroupID: group.ID, } if err := tx.Create(&host).Error; err != nil { return err } return nil }, } var InitSetting = &gormigrate.Migration{ ID: "20240722-init-setting", Migrate: func(tx *gorm.DB) error { encryptKey := common.RandStr(16) global.CONF.System.EncryptKey = encryptKey if err := tx.Create(&model.Setting{Key: "EncryptKey", Value: encryptKey}).Error; err != nil { return err } if _, err := os.Stat("/opt/1panel/nodeJson"); err == nil { type nodeInfo struct { ServerCrt string `json:"serverCrt"` ServerKey string `json:"serverKey"` CurrentNode string `json:"currentNode"` } nodeJson, err := os.ReadFile("/opt/1panel/nodeJson") if err != nil { return err } var node nodeInfo if err := json.Unmarshal(nodeJson, &node); err != nil { return err } itemKey, _ := encrypt.StringEncrypt(node.ServerKey) if err := tx.Create(&model.Setting{Key: "ServerKey", Value: itemKey}).Error; err != nil { return err } itemCrt, _ := encrypt.StringEncrypt(node.ServerCrt) if err := tx.Create(&model.Setting{Key: "ServerCrt", Value: itemCrt}).Error; err != nil { return err } global.CurrentNode = node.CurrentNode } else { global.CurrentNode = "127.0.0.1" } if err := tx.Create(&model.Setting{Key: "CurrentNode", Value: global.CurrentNode}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "SystemIP", Value: ""}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "DockerSockPath", Value: "unix:///var/run/docker.sock"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "SystemVersion", Value: global.CONF.System.Version}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "SystemStatus", Value: "Free"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "LocalTime", Value: ""}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "TimeZone", Value: common.LoadTimeZoneByCmd()}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "NtpSite", Value: "pool.ntp.org"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "LastCleanTime", Value: ""}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "LastCleanSize", Value: ""}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "LastCleanData", Value: ""}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "DefaultNetwork", Value: "all"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "MonitorStatus", Value: "enable"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "MonitorStoreDays", Value: "7"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "MonitorInterval", Value: "5"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "AppStoreVersion", Value: ""}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "AppStoreSyncStatus", Value: "SyncSuccess"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "AppStoreLastModified", Value: "0"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "FileRecycleBin", Value: "enable"}).Error; err != nil { return err } if err := tx.Create(&model.Setting{Key: "SnapshotIgnore", Value: "*.sock"}).Error; err != nil { return err } _ = os.Remove(("/opt/1panel/nodeJson")) return nil }, } var InitBackupAccount = &gormigrate.Migration{ ID: "20240722-init-backup", Migrate: func(tx *gorm.DB) error { item := &model.BackupAccount{ Type: "LOCAL", Vars: fmt.Sprintf("{\"dir\":\"%s\"}", global.CONF.System.Backup), } if err := tx.Create(item).Error; err != nil { return err } return nil }, } var InitImageRepo = &gormigrate.Migration{ ID: "20240722-init-imagerepo", Migrate: func(tx *gorm.DB) error { item := &model.ImageRepo{ Name: "Docker Hub", Protocol: "https", DownloadUrl: "docker.io", Status: constant.StatusSuccess, } if err := tx.Create(item).Error; err != nil { return err } return nil }, } var InitDefaultGroup = &gormigrate.Migration{ ID: "20240722-init-default-group", Migrate: func(tx *gorm.DB) error { websiteGroup := &model.Group{ Name: "默认", IsDefault: true, Type: "website", } if err := tx.Create(websiteGroup).Error; err != nil { return err } commandGroup := &model.Group{IsDefault: true, Name: "默认", Type: "command"} if err := tx.Create(commandGroup).Error; err != nil { return err } return nil }, } var InitDefaultCA = &gormigrate.Migration{ ID: "20240722-init-default-ca", Migrate: func(tx *gorm.DB) error { caService := service.NewIWebsiteCAService() if _, err := caService.Create(request.WebsiteCACreate{ CommonName: "1Panel-CA", Country: "CN", KeyType: "P256", Name: "1Panel", Organization: "FIT2CLOUD", OrganizationUint: "1Panel", Province: "Beijing", City: "Beijing", }); err != nil { return err } return nil }, } var InitPHPExtensions = &gormigrate.Migration{ ID: "20240722-add-php-extensions", Migrate: func(tx *gorm.DB) error { if err := tx.Create(&model.PHPExtensions{Name: "默认", Extensions: "bcmath,gd,gettext,intl,pcntl,shmop,soap,sockets,sysvsem,xmlrpc,zip"}).Error; err != nil { return err } if err := tx.Create(&model.PHPExtensions{Name: "WordPress", Extensions: "exif,igbinary,imagick,intl,zip,apcu,memcached,opcache,redis,bc,image,shmop,mysqli,pdo_mysql,gd"}).Error; err != nil { return err } if err := tx.Create(&model.PHPExtensions{Name: "Flarum", Extensions: "curl,gd,pdo_mysql,mysqli,bz2,exif,yaf,imap"}).Error; err != nil { return err } if err := tx.Create(&model.PHPExtensions{Name: "苹果CMS-V10", Extensions: "mysqli,pdo_mysql,zip,gd,redis,memcache,memcached"}).Error; err != nil { return err } if err := tx.Create(&model.PHPExtensions{Name: "SeaCMS", Extensions: "mysqli,pdo_mysql,gd,curl"}).Error; err != nil { return err } return nil }, } var AddTask = &gormigrate.Migration{ ID: "20240802-add-task", Migrate: func(tx *gorm.DB) error { return tx.AutoMigrate( &model.Task{}) }, } var UpdateWebsite = &gormigrate.Migration{ ID: "20240807-update-website", Migrate: func(tx *gorm.DB) error { return tx.AutoMigrate( &model.Website{}) }, } var UpdateWebsiteDomain = &gormigrate.Migration{ ID: "20240808-update-website-domain", Migrate: func(tx *gorm.DB) error { return tx.AutoMigrate( &model.WebsiteDomain{}) }, }