diff --git a/apps/list.json b/apps/list.json index 019446c99..7ca649cd0 100644 --- a/apps/list.json +++ b/apps/list.json @@ -93,7 +93,7 @@ "author": "phpmyadmin", "type": "tool", "required": ["mysql"], - "limit": 0, + "limit": 1, "crossVersionUpdate": true, "source": "https://www.phpmyadmin.net/" }, @@ -106,7 +106,7 @@ "author": "redis-commander", "type": "tool", "required": ["redis"], - "limit": 0, + "limit": 1, "crossVersionUpdate": true, "source": "https://github.com/joeferner/redis-commander" } diff --git a/backend/app/dto/app.go b/backend/app/dto/app.go index 620370bbb..22b04b036 100644 --- a/backend/app/dto/app.go +++ b/backend/app/dto/app.go @@ -183,3 +183,8 @@ type AppResource struct { Type string `json:"type"` Name string `json:"name"` } + +var AppToolMap = map[string]string{ + "mysql": "phpmyadmin", + "redis": "redis-commander", +} diff --git a/backend/app/repo/app_install.go b/backend/app/repo/app_install.go index d015d4631..41f7574cd 100644 --- a/backend/app/repo/app_install.go +++ b/backend/app/repo/app_install.go @@ -3,7 +3,6 @@ package repo import ( "context" "encoding/json" - "github.com/1Panel-dev/1Panel/backend/app/model" "github.com/1Panel-dev/1Panel/backend/global" "gorm.io/gorm" @@ -132,10 +131,7 @@ func (a *AppInstallRepo) LoadBaseInfoByKey(key string) (*RootInfo, error) { if ok { info.Password = password } - port, ok := envMap["PANEL_APP_PORT_HTTP"].(float64) - if ok { - info.Port = int64(port) - } + info.Port = int64(appInstall.HttpPort) info.ID = appInstall.ID info.ContainerName = appInstall.ContainerName info.Name = appInstall.Name diff --git a/backend/app/service/app.go b/backend/app/service/app.go index d038ce1f9..31adaeb30 100644 --- a/backend/app/service/app.go +++ b/backend/app/service/app.go @@ -226,6 +226,7 @@ func (a AppService) Install(name string, appDetailId uint, params map[string]int } tx.Commit() go upApp(appInstall.GetComposePath(), appInstall) + go updateToolApp(appInstall) return &appInstall, nil } diff --git a/backend/app/service/app_utils.go b/backend/app/service/app_utils.go index ada5f86fc..430734792 100644 --- a/backend/app/service/app_utils.go +++ b/backend/app/service/app_utils.go @@ -634,3 +634,53 @@ func getAppInstallByKey(key string) (model.AppInstall, error) { } return appInstall, nil } + +func updateToolApp(installed model.AppInstall) { + tooKey, ok := dto.AppToolMap[installed.App.Key] + if !ok { + return + } + toolInstall, _ := getAppInstallByKey(tooKey) + if reflect.DeepEqual(toolInstall, model.AppInstall{}) { + return + } + paramMap := make(map[string]string) + _ = json.Unmarshal([]byte(installed.Param), ¶mMap) + envMap := make(map[string]interface{}) + _ = json.Unmarshal([]byte(toolInstall.Env), &envMap) + if password, ok := paramMap["PANEL_DB_ROOT_PASSWORD"]; ok { + envMap["PANEL_DB_ROOT_PASSWORD"] = password + } + if _, ok := envMap["PANEL_REDIS_HOST"]; ok { + envMap["PANEL_REDIS_HOST"] = installed.ServiceName + } + if _, ok := envMap["PANEL_DB_HOST"]; ok { + envMap["PANEL_DB_HOST"] = installed.ServiceName + } + + envPath := path.Join(toolInstall.GetPath(), ".env") + contentByte, err := json.Marshal(envMap) + if err != nil { + global.LOG.Errorf("update tool app [%s] error : %s", toolInstall.Name, err.Error()) + return + } + envFileMap := make(map[string]string) + handleMap(envMap, envFileMap) + if err = godotenv.Write(envFileMap, envPath); err != nil { + global.LOG.Errorf("update tool app [%s] error : %s", toolInstall.Name, err.Error()) + return + } + toolInstall.Env = string(contentByte) + if err := appInstallRepo.Save(&toolInstall); err != nil { + global.LOG.Errorf("update tool app [%s] error : %s", toolInstall.Name, err.Error()) + return + } + if out, err := compose.Down(toolInstall.GetComposePath()); err != nil { + global.LOG.Errorf("update tool app [%s] error : %s", toolInstall.Name, out) + return + } + if out, err := compose.Up(toolInstall.GetComposePath()); err != nil { + global.LOG.Errorf("update tool app [%s] error : %s", toolInstall.Name, out) + return + } +} diff --git a/backend/i18n/lang/zh.yaml b/backend/i18n/lang/zh.yaml index de1238cb6..e43e2423e 100644 --- a/backend/i18n/lang/zh.yaml +++ b/backend/i18n/lang/zh.yaml @@ -29,6 +29,7 @@ ErrFileToLarge: "文件超过10M,无法打开" #website ErrDomainIsExist: "域名已存在" ErrAliasIsExist: "代号已存在" +ErrAppDelete: '' #ssl ErrSSLCannotDelete: "证书正在被网站使用,无法删除"