From 55ee480ba19bf4200661707b8a23d284992ca7c5 Mon Sep 17 00:00:00 2001 From: CityFun <31820853+zhengkunwang223@users.noreply.github.com> Date: Thu, 8 May 2025 18:02:25 +0800 Subject: [PATCH] fix: fix some bugs with appstore (#8574) --- agent/app/dto/app.go | 1 + agent/app/repo/app.go | 2 +- agent/app/repo/setting.go | 2 +- agent/app/service/app.go | 2 +- agent/app/service/mcp_server.go | 13 +----- agent/app/service/runtime_utils.go | 40 ++++++++++++++++++- .../cmd/server/nginx_conf/php_extensions.json | 35 ++++++++++++++-- agent/i18n/lang/zh.yaml | 2 +- agent/init/migration/migrations/init.go | 2 +- core/constant/common.go | 1 + frontend/src/lang/modules/en.ts | 1 + frontend/src/lang/modules/ja.ts | 1 + frontend/src/lang/modules/ko.ts | 1 + frontend/src/lang/modules/ms.ts | 1 + frontend/src/lang/modules/pt-br.ts | 1 + frontend/src/lang/modules/ru.ts | 1 + frontend/src/lang/modules/zh-Hant.ts | 1 + frontend/src/lang/modules/zh.ts | 1 + frontend/src/views/app-store/apps/index.vue | 5 +-- frontend/vite.config.ts | 5 ++- 20 files changed, 94 insertions(+), 24 deletions(-) diff --git a/agent/app/dto/app.go b/agent/app/dto/app.go index 76c52852d..edd4ca9c8 100644 --- a/agent/app/dto/app.go +++ b/agent/app/dto/app.go @@ -125,6 +125,7 @@ type Locale struct { Ru string `json:"ru"` ZhHant string `json:"zh-hant" yaml:"zh-hant"` Zh string `json:"zh"` + Ko string `json:"ko"` } type AppForm struct { diff --git a/agent/app/repo/app.go b/agent/app/repo/app.go index 1ae312e69..853e94528 100644 --- a/agent/app/repo/app.go +++ b/agent/app/repo/app.go @@ -148,7 +148,7 @@ func (a AppRepo) BatchDelete(ctx context.Context, apps []model.App) error { } func (a AppRepo) DeleteByIDs(ctx context.Context, ids []uint) error { - return getTx(ctx).Debug().Where("id in (?)", ids).Delete(&model.App{}).Error + return getTx(ctx).Where("id in (?)", ids).Delete(&model.App{}).Error } func (a AppRepo) DeleteBy(opts ...DBOption) error { diff --git a/agent/app/repo/setting.go b/agent/app/repo/setting.go index 213c7852d..9b766f445 100644 --- a/agent/app/repo/setting.go +++ b/agent/app/repo/setting.go @@ -102,7 +102,7 @@ func (s *SettingRepo) UpdateOrCreate(key, value string) error { result := global.DB.Where("key = ?", key).First(&setting) if result.Error != nil { if errors.Is(result.Error, gorm.ErrRecordNotFound) { - return global.DB.Debug().Create(&model.Setting{Key: key, Value: value}).Error + return global.DB.Create(&model.Setting{Key: key, Value: value}).Error } return result.Error } diff --git a/agent/app/service/app.go b/agent/app/service/app.go index ae66ab809..698b2a3f5 100644 --- a/agent/app/service/app.go +++ b/agent/app/service/app.go @@ -355,7 +355,7 @@ func (a AppService) Install(req request.AppInstallCreate) (appInstall *model.App } } } - if app.Key == "openresty" && app.Resource == "remote" && common.CompareVersion(appDetail.Version, "1.27") { + if app.Key == "openresty" && (app.Resource == "remote" || app.Resource == "custom") && common.CompareVersion(appDetail.Version, "1.27") { if dir, ok := req.Params["WEBSITE_DIR"]; ok { siteDir := dir.(string) if siteDir == "" || !strings.HasPrefix(siteDir, "/") { diff --git a/agent/app/service/mcp_server.go b/agent/app/service/mcp_server.go index d8a662bf9..277421281 100644 --- a/agent/app/service/mcp_server.go +++ b/agent/app/service/mcp_server.go @@ -405,13 +405,8 @@ func addProxy(server *model.McpServer) { global.LOG.Errorf("[mcp] add proxy failed, err: %v", err) return } - nginxInstall, err := getAppInstallByKey(constant.AppOpenresty) - if err != nil { - global.LOG.Errorf("[mcp] add proxy failed, err: %v", err) - return - } fileOp := files.NewFileOp() - includeDir := path.Join(nginxInstall.GetPath(), "www", "sites", website.Alias, "proxy") + includeDir := GetSitePath(website, SiteProxyDir) if !fileOp.Stat(includeDir) { if err = fileOp.CreateDir(includeDir, 0644); err != nil { return @@ -446,16 +441,12 @@ func addMCPProxy(websiteID uint) error { if len(servers) == 0 { return nil } - nginxInstall, err := getAppInstallByKey(constant.AppOpenresty) - if err != nil { - return err - } website, err := websiteRepo.GetFirst(repo.WithByID(websiteID)) if err != nil { return err } fileOp := files.NewFileOp() - includeDir := path.Join(nginxInstall.GetPath(), "www", "sites", website.Alias, "proxy") + includeDir := GetSitePath(website, SiteProxyDir) if !fileOp.Stat(includeDir) { if err = fileOp.CreateDir(includeDir, 0644); err != nil { return err diff --git a/agent/app/service/runtime_utils.go b/agent/app/service/runtime_utils.go index 6dbf8b333..2b9193e58 100644 --- a/agent/app/service/runtime_utils.go +++ b/agent/app/service/runtime_utils.go @@ -585,7 +585,8 @@ func unInstallPHPExtension(runtime *model.Runtime, delExtensions []string) error for _, del := range delExtensions { if ext.Name == del { delMap[ext.Check] = struct{}{} - _ = fileOP.DeleteFile(path.Join(dir, "extensions", ext.File)) + detail, _ := appDetailRepo.GetFirst(repo.WithByID(runtime.AppDetailID)) + _ = fileOP.DeleteFile(path.Join(dir, "extensions", getExtensionDir(detail.Version), ext.File)) _ = fileOP.DeleteFile(path.Join(dir, "conf", "conf.d", "docker-php-ext-"+ext.Check+".ini")) _ = removePHPIniExt(path.Join(dir, "conf", "php.ini"), ext.File) break @@ -743,3 +744,40 @@ func checkRuntimePortExist(port int, scanPort bool, runtimeID uint) error { } return nil } + +func getExtensionDir(version string) string { + if strings.HasPrefix(version, "8.4") { + return "no-debug-non-zts-20240924" + } + if strings.HasPrefix(version, "8.3") { + return "no-debug-non-zts-20230831" + } + if strings.HasPrefix(version, "8.2") { + return "no-debug-non-zts-20220829" + } + if strings.HasPrefix(version, "8.1") { + return "no-debug-non-zts-20210902" + } + if strings.HasPrefix(version, "8.0") { + return "no-debug-non-zts-20200930" + } + if strings.HasPrefix(version, "7.4") { + return "no-debug-non-zts-20190902" + } + if strings.HasPrefix(version, "7.3") { + return "no-debug-non-zts-20180731" + } + if strings.HasPrefix(version, "7.2") { + return "no-debug-non-zts-20170718" + } + if strings.HasPrefix(version, "7.1") { + return "no-debug-non-zts-20160303" + } + if strings.HasPrefix(version, "7.0") { + return "no-debug-non-zts-20151012" + } + if strings.HasPrefix(version, "5.6") { + return "no-debug-non-zts-20131226" + } + return "" +} diff --git a/agent/cmd/server/nginx_conf/php_extensions.json b/agent/cmd/server/nginx_conf/php_extensions.json index 63e3030bd..971af6230 100644 --- a/agent/cmd/server/nginx_conf/php_extensions.json +++ b/agent/cmd/server/nginx_conf/php_extensions.json @@ -52,7 +52,7 @@ "name": "imagick", "check": "imagick", "file": "imagick.so", - "versions": ["56", "70", "71", "72", "73", "74", "80", "81", "82"], + "versions": ["56", "70", "71", "72", "73", "74", "80", "81", "82","83","84"], "installed": false }, { @@ -327,11 +327,40 @@ "file": "sourceguardian.so", "versions": ["56","70", "71", "72", "73", "74", "80", "81", "82", "83","84"], "installed": false - },{ - "name": "mysqli", + }, + { + "name": "mysqli", "check": "mysqli", "file": "mysqli.so", "versions": ["56","70", "71", "72", "73", "74", "80", "81", "82", "83","84"], "installed": false + }, + { + "name": "pdo_mysql", + "check": "pdo_mysql", + "file": "pdo_mysql.so", + "versions": ["56","70", "71", "72", "73", "74", "80", "81", "82", "83","84"], + "installed": false + }, + { + "name": "igbinary", + "check": "igbinary", + "file": "igbinary.so", + "versions": ["56","70", "71", "72", "73", "74", "80", "81", "82", "83","84"], + "installed": false + }, + { + "name": "zip", + "check": "zip", + "file": "zip.so", + "versions": ["56","70", "71", "72", "73", "74", "80", "81", "82", "83","84"], + "installed": false + }, + { + "name": "shmop", + "check": "shmop", + "file": "shmop.so", + "versions": ["56","70", "71", "72", "73", "74", "80", "81", "82", "83","84"], + "installed": false } ] diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 0f00d75b4..7722679e3 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -78,7 +78,7 @@ PullImageStart: "开始拉取镜像 {{ .name }}" PullImageSuccess: "镜像拉取成功" AppStoreSyncSuccess: "应用商店同步成功" SyncAppDetail: "同步应用配置" -AppVersionNotMatch: "{{ .name }} 应用需要更高的 1Panel 版本,跳过同步" +AppVersionNotMatch: "{{ .name }} 应用不适配当前 1Panel 版本,跳过" MoveSiteDir: "当前升级需要迁移 OpenResty 网站目录" MoveSiteToDir: "迁移网站目录到 {{ .name }}" ErrMoveSiteDir: "迁移网站目录失败" diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go index 83d901cf6..7864ac80f 100644 --- a/agent/init/migration/migrations/init.go +++ b/agent/init/migration/migrations/init.go @@ -212,7 +212,7 @@ var InitPHPExtensions = &gormigrate.Migration{ if err := tx.Create(&model.PHPExtensions{Name: "Default", Extensions: "bcmath,ftp,gd,gettext,intl,mysqli,pcntl,pdo_mysql,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 { + if err := tx.Create(&model.PHPExtensions{Name: "WordPress", Extensions: "exif,igbinary,imagick,intl,zip,apcu,memcached,opcache,redis,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 { diff --git a/core/constant/common.go b/core/constant/common.go index f71b7b883..b2f8d80ec 100644 --- a/core/constant/common.go +++ b/core/constant/common.go @@ -78,6 +78,7 @@ var WebUrlMap = map[string]struct{}{ "/cronjobs": {}, "/cronjobs/cronjob": {}, "/cronjobs/library": {}, + "/cronjobs/operate": {}, "/databases": {}, "/databases/mysql": {}, diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index fa7fd127e..2ced149ae 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -3077,6 +3077,7 @@ const message = { gatewayTimeout: 'Gateway Timeout (504)', belongToIpGroup: 'Belongs to IP Group', notBelongToIpGroup: 'Does not belong to IP Group', + unknownWebsiteKey: 'Unknown Domain', }, monitor: { name: 'Website Monitoring', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 94a803e1d..9c6fac916 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2938,6 +2938,7 @@ const message = { gatewayTimeout: 'ゲートウェイタイムアウト (504)', belongToIpGroup: 'IP グループに属しています', notBelongToIpGroup: 'IP グループに属していません', + unknownWebsiteKey: '未知のドメイン', }, monitor: { name: 'ウェブサイトモニタリング', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 7c21f3fa0..6388a99eb 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2890,6 +2890,7 @@ const message = { gatewayTimeout: '게이트웨이 시간 초과 (504)', belongToIpGroup: 'IP 그룹에 속함', notBelongToIpGroup: 'IP 그룹에 속하지 않음', + unknownWebsiteKey: '알 수 없는 도메인', }, monitor: { name: '웹사이트 모니터링', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 5c235436a..f24aecbea 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -3003,6 +3003,7 @@ const message = { gatewayTimeout: 'Timeout Gateway (504)', belongToIpGroup: 'Tergolong dalam Kumpulan IP', notBelongToIpGroup: 'Tidak tergolong dalam Kumpulan IP', + unknownWebsiteKey: 'Domain Tidak Diketahui', }, monitor: { name: 'Pemantauan Laman Web', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 02a4d2d57..935c2646f 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -3006,6 +3006,7 @@ const message = { gatewayTimeout: 'Tempo Limite da Porta de Entrada (504)', belongToIpGroup: 'Pertence ao Grupo de IP', notBelongToIpGroup: 'Não pertence ao Grupo de IP', + unknownWebsiteKey: 'Domínio Desconhecido', }, monitor: { name: 'Monitoramento de Websites', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 271c155fa..adcfe4e8f 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -2999,6 +2999,7 @@ const message = { gatewayTimeout: 'Тайм-аут шлюза (504)', belongToIpGroup: 'Принадлежит к группе IP', notBelongToIpGroup: 'Не принадлежит к группе IP', + unknownWebsiteKey: 'Неизвестный домен', }, monitor: { name: 'Мониторинг веб-сайта', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index c9bd2fa0b..b3ee9ea94 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2851,6 +2851,7 @@ const message = { gatewayTimeout: '網關超時 (504)', belongToIpGroup: '屬於 IP 組', notBelongToIpGroup: '不屬於 IP 組', + unknownWebsiteKey: '未知域名', }, monitor: { name: '網站監控', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 0fe56d0a2..9210920ce 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2839,6 +2839,7 @@ const message = { gatewayTimeout: '网关超时 (504)', belongToIpGroup: '属于 IP 组', notBelongToIpGroup: '不属于 IP 组', + unknownWebsiteKey: '未知域名', }, monitor: { name: '网站监控', diff --git a/frontend/src/views/app-store/apps/index.vue b/frontend/src/views/app-store/apps/index.vue index f3fbb3323..e958242fd 100644 --- a/frontend/src/views/app-store/apps/index.vue +++ b/frontend/src/views/app-store/apps/index.vue @@ -92,10 +92,9 @@ >