From e452dfdb1f047f26855b1d16aa275355f56e86ca Mon Sep 17 00:00:00 2001 From: zhengkunwang223 <31820853+zhengkunwang223@users.noreply.github.com> Date: Thu, 6 Apr 2023 18:32:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E4=B8=80=E7=9B=B4=E5=AE=89=E8=A3=85=E4=B8=AD=E7=9A=84=20BUG=20?= =?UTF-8?q?(#522)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/service/app.go | 2 +- backend/app/service/app_utils.go | 33 ++++++++++++++++++++++++++------ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/backend/app/service/app.go b/backend/app/service/app.go index 14b1b3efc..50b64f430 100644 --- a/backend/app/service/app.go +++ b/backend/app/service/app.go @@ -316,7 +316,7 @@ func (a AppService) Install(ctx context.Context, req request.AppInstallCreate) ( if err := upAppPre(app, appInstall); err != nil { return nil, err } - go upApp(ctx, appInstall.GetComposePath(), appInstall) + go upApp(ctx, appInstall) go updateToolApp(appInstall) ports := []int{appInstall.HttpPort} if appInstall.HttpsPort > 0 { diff --git a/backend/app/service/app_utils.go b/backend/app/service/app_utils.go index cdfa6927e..44d6da4d5 100644 --- a/backend/app/service/app_utils.go +++ b/backend/app/service/app_utils.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/compose-spec/compose-go/types" "github.com/subosito/gotenv" "math" "os" @@ -381,15 +382,35 @@ func upAppPre(app model.App, appInstall model.AppInstall) error { return nil } -func upApp(ctx context.Context, composeFilePath string, appInstall model.AppInstall) { - out, err := compose.Up(composeFilePath) - if err != nil { - if out != "" { - appInstall.Message = out +func upApp(ctx context.Context, appInstall model.AppInstall) { + upProject := func(appInstall model.AppInstall) (err error) { + envStr, err := coverEnvJsonToStr(appInstall.Env) + if err == nil { + var ( + project *types.Project + composeService *composeV2.ComposeService + ) + project, err = composeV2.GetComposeProject(appInstall.Name, appInstall.GetPath(), []byte(appInstall.DockerCompose), []byte(envStr)) + if err != nil { + return err + } + composeService, err = composeV2.NewComposeService() + if err != nil { + return + } + composeService.SetProject(project) + err = composeService.ComposeUp() + if err != nil { + return err + } + return } else { - appInstall.Message = err.Error() + return } + } + if err := upProject(appInstall); err != nil { appInstall.Status = constant.Error + appInstall.Message = err.Error() } else { appInstall.Status = constant.Running }