mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-10-12 00:16:37 +08:00
feat: 优化网站创建流程 (#591)
This commit is contained in:
parent
42531dae5a
commit
b16308b7ea
8 changed files with 28 additions and 11 deletions
|
@ -78,14 +78,12 @@ func (b *BaseApi) CreateWebsite(c *gin.Context) {
|
||||||
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInvalidParams, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
tx, ctx := helper.GetTxAndContext()
|
|
||||||
err := websiteService.CreateWebsite(ctx, req)
|
err := websiteService.CreateWebsite(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tx.Rollback()
|
|
||||||
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
tx.Commit()
|
|
||||||
helper.SuccessWithData(c, nil)
|
helper.SuccessWithData(c, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/pem"
|
"encoding/pem"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/app/api/v1/helper"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
@ -33,7 +34,7 @@ type WebsiteService struct {
|
||||||
type IWebsiteService interface {
|
type IWebsiteService interface {
|
||||||
PageWebsite(req request.WebsiteSearch) (int64, []response.WebsiteDTO, error)
|
PageWebsite(req request.WebsiteSearch) (int64, []response.WebsiteDTO, error)
|
||||||
GetWebsites() ([]response.WebsiteDTO, error)
|
GetWebsites() ([]response.WebsiteDTO, error)
|
||||||
CreateWebsite(ctx context.Context, create request.WebsiteCreate) error
|
CreateWebsite(create request.WebsiteCreate) error
|
||||||
OpWebsite(req request.WebsiteOp) error
|
OpWebsite(req request.WebsiteOp) error
|
||||||
GetWebsiteOptions() ([]string, error)
|
GetWebsiteOptions() ([]string, error)
|
||||||
UpdateWebsite(req request.WebsiteUpdate) error
|
UpdateWebsite(req request.WebsiteUpdate) error
|
||||||
|
@ -119,7 +120,7 @@ func (w WebsiteService) GetWebsites() ([]response.WebsiteDTO, error) {
|
||||||
return websiteDTOs, nil
|
return websiteDTOs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w WebsiteService) CreateWebsite(ctx context.Context, create request.WebsiteCreate) (err error) {
|
func (w WebsiteService) CreateWebsite(create request.WebsiteCreate) (err error) {
|
||||||
if exist, _ := websiteRepo.GetBy(websiteRepo.WithDomain(create.PrimaryDomain)); len(exist) > 0 {
|
if exist, _ := websiteRepo.GetBy(websiteRepo.WithDomain(create.PrimaryDomain)); len(exist) > 0 {
|
||||||
return buserr.New(constant.ErrDomainIsExist)
|
return buserr.New(constant.ErrDomainIsExist)
|
||||||
}
|
}
|
||||||
|
@ -158,7 +159,7 @@ func (w WebsiteService) CreateWebsite(ctx context.Context, create request.Websit
|
||||||
Operate: constant.Delete,
|
Operate: constant.Delete,
|
||||||
ForceDelete: true,
|
ForceDelete: true,
|
||||||
}
|
}
|
||||||
if err := NewIAppInstalledService().Operate(ctx, req); err != nil {
|
if err := NewIAppInstalledService().Operate(context.Background(), req); err != nil {
|
||||||
global.LOG.Errorf(err.Error())
|
global.LOG.Errorf(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,6 +228,8 @@ func (w WebsiteService) CreateWebsite(ctx context.Context, create request.Websit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tx, ctx := helper.GetTxAndContext()
|
||||||
|
defer tx.Rollback()
|
||||||
if err = websiteRepo.Create(ctx, website); err != nil {
|
if err = websiteRepo.Create(ctx, website); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -252,7 +255,11 @@ func (w WebsiteService) CreateWebsite(ctx context.Context, create request.Websit
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return configDefaultNginx(website, domains, appInstall, runtime, create.RuntimeConfig)
|
if err != configDefaultNginx(website, domains, appInstall, runtime, create.RuntimeConfig) {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tx.Commit()
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w WebsiteService) OpWebsite(req request.WebsiteOp) error {
|
func (w WebsiteService) OpWebsite(req request.WebsiteOp) error {
|
||||||
|
|
|
@ -500,7 +500,7 @@ func checkIsLinkApp(website model.Website) bool {
|
||||||
}
|
}
|
||||||
if website.Type == constant.Runtime {
|
if website.Type == constant.Runtime {
|
||||||
runtime, _ := runtimeRepo.GetFirst(commonRepo.WithByID(website.RuntimeID))
|
runtime, _ := runtimeRepo.GetFirst(commonRepo.WithByID(website.RuntimeID))
|
||||||
return runtime.Resource == constant.AppResourceRemote
|
return runtime.Resource == constant.ResourceAppstore
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ var (
|
||||||
ErrDbUserNotValid = "ErrDbUserNotValid"
|
ErrDbUserNotValid = "ErrDbUserNotValid"
|
||||||
ErrUpdateBuWebsite = "ErrUpdateBuWebsite"
|
ErrUpdateBuWebsite = "ErrUpdateBuWebsite"
|
||||||
Err1PanelNetworkFailed = "Err1PanelNetworkFailed"
|
Err1PanelNetworkFailed = "Err1PanelNetworkFailed"
|
||||||
|
ErrCmdTimeout = "ErrCmdTimeout"
|
||||||
)
|
)
|
||||||
|
|
||||||
// website
|
// website
|
||||||
|
|
|
@ -16,6 +16,7 @@ ErrRepoNotValid: "Remote repository verification failed!"
|
||||||
#common
|
#common
|
||||||
ErrNameIsExist: "Name is already exist"
|
ErrNameIsExist: "Name is already exist"
|
||||||
ErrDemoEnvironment: "Demo server, prohibit this operation!"
|
ErrDemoEnvironment: "Demo server, prohibit this operation!"
|
||||||
|
ErrCmdTimeout: "Command execution timed out!"
|
||||||
|
|
||||||
#app
|
#app
|
||||||
ErrPortInUsed: "{{ .detail }} port already in use"
|
ErrPortInUsed: "{{ .detail }} port already in use"
|
||||||
|
|
|
@ -16,6 +16,7 @@ ErrRepoNotValid: "远程仓库校验失败!"
|
||||||
#common
|
#common
|
||||||
ErrNameIsExist: "名称已存在"
|
ErrNameIsExist: "名称已存在"
|
||||||
ErrDemoEnvironment: "演示服务器,禁止此操作!"
|
ErrDemoEnvironment: "演示服务器,禁止此操作!"
|
||||||
|
ErrCmdTimeout: "命令执行超时!"
|
||||||
|
|
||||||
#app
|
#app
|
||||||
ErrPortInUsed: "{{ .detail }} 端口已被占用!"
|
ErrPortInUsed: "{{ .detail }} 端口已被占用!"
|
||||||
|
|
|
@ -2,16 +2,25 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/buserr"
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Exec(cmdStr string) (string, error) {
|
func Exec(cmdStr string) (string, error) {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
|
||||||
|
defer cancel()
|
||||||
cmd := exec.Command("bash", "-c", cmdStr)
|
cmd := exec.Command("bash", "-c", cmdStr)
|
||||||
var stdout, stderr bytes.Buffer
|
var stdout, stderr bytes.Buffer
|
||||||
cmd.Stdout = &stdout
|
cmd.Stdout = &stdout
|
||||||
cmd.Stderr = &stderr
|
cmd.Stderr = &stderr
|
||||||
err := cmd.Run()
|
err := cmd.Run()
|
||||||
|
if ctx.Err() == context.DeadlineExceeded {
|
||||||
|
return "", buserr.New(constant.ErrCmdTimeout)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errMsg := ""
|
errMsg := ""
|
||||||
if len(stderr.String()) != 0 {
|
if len(stderr.String()) != 0 {
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
round
|
round
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="installed.status !== 'Running'"
|
:disabled="installed.status !== 'Running'"
|
||||||
@click="openUploads(installed.app.name, installed.name)"
|
@click="openUploads(installed.app.key, installed.name)"
|
||||||
v-if="mode === 'installed'"
|
v-if="mode === 'installed'"
|
||||||
>
|
>
|
||||||
{{ $t('database.loadBackup') }}
|
{{ $t('database.loadBackup') }}
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
round
|
round
|
||||||
size="small"
|
size="small"
|
||||||
:disabled="installed.status !== 'Running'"
|
:disabled="installed.status !== 'Running'"
|
||||||
@click="openBackups(installed.app.name, installed.name)"
|
@click="openBackups(installed.app.key, installed.name)"
|
||||||
v-if="mode === 'installed'"
|
v-if="mode === 'installed'"
|
||||||
>
|
>
|
||||||
{{ $t('app.backup') }}
|
{{ $t('app.backup') }}
|
||||||
|
|
Loading…
Add table
Reference in a new issue