mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-03-14 01:34:47 +08:00
feat: 应用商店支持多容器的本地应用 (#1108)
Refs https://github.com/1Panel-dev/1Panel/issues/635
This commit is contained in:
parent
f5cd45438b
commit
c052887d58
@ -286,32 +286,25 @@ func (a AppService) Install(ctx context.Context, req request.AppInstallCreate) (
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
servicesMap := value.(map[string]interface{})
|
servicesMap := value.(map[string]interface{})
|
||||||
changeKeys := make(map[string]string, len(servicesMap))
|
containerName := constant.ContainerPrefix + app.Key + "-" + common.RandStr(4)
|
||||||
|
if req.Advanced && req.ContainerName != "" {
|
||||||
|
containerName = req.ContainerName
|
||||||
|
}
|
||||||
|
req.Params[constant.ContainerName] = containerName
|
||||||
|
appInstall.ContainerName = containerName
|
||||||
|
|
||||||
index := 0
|
index := 0
|
||||||
for k := range servicesMap {
|
for k := range servicesMap {
|
||||||
serviceName := k + "-" + common.RandStr(4)
|
appInstall.ServiceName = k
|
||||||
changeKeys[k] = serviceName
|
|
||||||
containerName := constant.ContainerPrefix + k + "-" + common.RandStr(4)
|
|
||||||
if req.Advanced && req.ContainerName != "" {
|
|
||||||
containerName = req.ContainerName
|
|
||||||
}
|
|
||||||
if index > 0 {
|
if index > 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
req.Params[constant.ContainerName] = containerName
|
|
||||||
appInstall.ServiceName = serviceName
|
|
||||||
appInstall.ContainerName = containerName
|
|
||||||
index++
|
index++
|
||||||
}
|
}
|
||||||
for k, v := range changeKeys {
|
|
||||||
servicesMap[v] = servicesMap[k]
|
|
||||||
delete(servicesMap, k)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = addDockerComposeCommonParam(composeMap, appInstall.ServiceName, req.AppContainerConfig, req.Params); err != nil {
|
if err = addDockerComposeCommonParam(composeMap, appInstall.ServiceName, req.AppContainerConfig, req.Params); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
composeByte []byte
|
composeByte []byte
|
||||||
paramByte []byte
|
paramByte []byte
|
||||||
|
@ -412,15 +412,15 @@ func handleMap(params map[string]interface{}, envParams map[string]string) {
|
|||||||
|
|
||||||
func downloadApp(app model.App, appDetail model.AppDetail, appInstall *model.AppInstall) (err error) {
|
func downloadApp(app model.App, appDetail model.AppDetail, appInstall *model.AppInstall) (err error) {
|
||||||
appResourceDir := path.Join(constant.AppResourceDir, app.Resource)
|
appResourceDir := path.Join(constant.AppResourceDir, app.Resource)
|
||||||
if !appDetail.Update {
|
appDownloadDir := path.Join(appResourceDir, app.Key)
|
||||||
|
appVersionDir := path.Join(appDownloadDir, appDetail.Version)
|
||||||
|
fileOp := files.NewFileOp()
|
||||||
|
if !appDetail.Update && fileOp.Stat(appVersionDir) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fileOp := files.NewFileOp()
|
|
||||||
appDownloadDir := path.Join(appResourceDir, app.Key)
|
|
||||||
if !fileOp.Stat(appDownloadDir) {
|
if !fileOp.Stat(appDownloadDir) {
|
||||||
_ = fileOp.CreateDir(appDownloadDir, 0755)
|
_ = fileOp.CreateDir(appDownloadDir, 0755)
|
||||||
}
|
}
|
||||||
appVersionDir := path.Join(appDownloadDir, appDetail.Version)
|
|
||||||
if !fileOp.Stat(appVersionDir) {
|
if !fileOp.Stat(appVersionDir) {
|
||||||
_ = fileOp.CreateDir(appVersionDir, 0755)
|
_ = fileOp.CreateDir(appVersionDir, 0755)
|
||||||
}
|
}
|
||||||
@ -445,6 +445,8 @@ func downloadApp(app model.App, appDetail model.AppDetail, appInstall *model.App
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
_ = fileOp.DeleteFile(filePath)
|
_ = fileOp.DeleteFile(filePath)
|
||||||
|
appDetail.Update = false
|
||||||
|
_ = appDetailRepo.Update(context.Background(), appDetail)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
frontend/components.d.ts
vendored
1
frontend/components.d.ts
vendored
@ -69,6 +69,7 @@ declare module 'vue' {
|
|||||||
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
||||||
ElTabs: typeof import('element-plus/es')['ElTabs']
|
ElTabs: typeof import('element-plus/es')['ElTabs']
|
||||||
ElTag: typeof import('element-plus/es')['ElTag']
|
ElTag: typeof import('element-plus/es')['ElTag']
|
||||||
|
ElText: typeof import('element-plus/es')['ElText']
|
||||||
ElTooltip: typeof import('element-plus/es')['ElTooltip']
|
ElTooltip: typeof import('element-plus/es')['ElTooltip']
|
||||||
ElUpload: typeof import('element-plus/es')['ElUpload']
|
ElUpload: typeof import('element-plus/es')['ElUpload']
|
||||||
Err_domain: typeof import('./src/components/error-message/err_domain.vue')['default']
|
Err_domain: typeof import('./src/components/error-message/err_domain.vue')['default']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user