diff --git a/apps/nginx/versions/1.23.1/config.json b/apps/nginx/versions/1.23.1/config.json index e69de29bb..dedff0eaa 100644 --- a/apps/nginx/versions/1.23.1/config.json +++ b/apps/nginx/versions/1.23.1/config.json @@ -0,0 +1,21 @@ +{ + "formFields": [ + { + "type": "number", + "labelZh": "Http 端口", + "labelEn": "Http Port", + "required": true, + "default": 80, + "envKey": "PANEL_APP_PORT_HTTP" + }, + { + "type": "number", + "labelZh": "Https 端口", + "labelEn": "Https Port", + "required": true, + "default": 443, + "envKey": "PANEL_APP_PORT_HTTPS" + } + ] +} + diff --git a/apps/nginx/versions/1.23.1/docker-compose.yml b/apps/nginx/versions/1.23.1/docker-compose.yml index e69de29bb..779e3c579 100644 --- a/apps/nginx/versions/1.23.1/docker-compose.yml +++ b/apps/nginx/versions/1.23.1/docker-compose.yml @@ -0,0 +1,19 @@ +services: + nginx1.23.1: + container_name: ${CONTAINER_NAME} + image: nginx:1.23.1 + restart: always + networks: + - 1panel + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + volumes: + - ./conf/nginx.conf:/etc/nginx/nginx.conf + - ./log:/var/log/nginx + - ./conf/conf.d:/etc/nginx/conf.d/ + - ./ssl:/etc/nginx/ssl + +networks: + 1panel: + external: true diff --git a/backend/app/api/v1/auth.go b/backend/app/api/v1/auth.go index bb387cc4f..f8232c6ed 100644 --- a/backend/app/api/v1/auth.go +++ b/backend/app/api/v1/auth.go @@ -9,7 +9,6 @@ import ( "github.com/1Panel-dev/1Panel/backend/constant" "github.com/1Panel-dev/1Panel/backend/global" "github.com/1Panel-dev/1Panel/backend/utils/captcha" - "github.com/1Panel-dev/1Panel/backend/utils/qqwry" "github.com/gin-gonic/gin" ) @@ -115,12 +114,12 @@ func saveLoginLogs(c *gin.Context, err error) { logs.Status = constant.StatusSuccess } logs.IP = c.ClientIP() - qqWry, err := qqwry.NewQQwry() - if err != nil { - global.LOG.Errorf("load qqwry datas failed: %s", err) - } - res := qqWry.Find(logs.IP) - logs.Agent = c.GetHeader("User-Agent") - logs.Address = res.Area - _ = logService.CreateLoginLog(logs) + //qqWry, err := qqwry.NewQQwry() + //if err != nil { + // global.LOG.Errorf("load qqwry datas failed: %s", err) + //} + //res := qqWry.Find(logs.IP) + //logs.Agent = c.GetHeader("User-Agent") + //logs.Address = res.Area + //_ = logService.CreateLoginLog(logs) } diff --git a/backend/app/api/v1/website.go b/backend/app/api/v1/website.go index 9ad0a409e..efb4ea3ee 100644 --- a/backend/app/api/v1/website.go +++ b/backend/app/api/v1/website.go @@ -80,6 +80,21 @@ func (b *BaseApi) GetWebSite(c *gin.Context) { helper.SuccessWithData(c, website) } +func (b *BaseApi) GetWebSiteNginx(c *gin.Context) { + + id, err := helper.GetParamID(c) + if err != nil { + helper.ErrorWithDetail(c, constant.CodeErrBadRequest, constant.ErrTypeInternalServer, nil) + return + } + fileInfo, err := websiteService.GetWebsiteNginxConfig(id) + if err != nil { + helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err) + return + } + helper.SuccessWithData(c, fileInfo) +} + func (b *BaseApi) GetWebDomains(c *gin.Context) { websiteId, err := helper.GetIntParamByKey(c, "websiteId") diff --git a/backend/app/model/website.go b/backend/app/model/website.go index b560d4e42..927c6ea42 100644 --- a/backend/app/model/website.go +++ b/backend/app/model/website.go @@ -4,18 +4,16 @@ import "time" type WebSite struct { BaseModel - PrimaryDomain string `gorm:"type:varchar(128);not null" json:"primaryDomain"` - Type string `gorm:"type:varchar(64);not null" json:"type"` - Alias string `gorm:"type:varchar(128);not null" json:"alias"` - Remark string `gorm:"type:longtext;" json:"remark"` - Status string `gorm:"type:varchar(64);not null" json:"status"` - ExpireDate time.Time `json:"expireDate"` - AppInstallID uint `gorm:"type:integer" json:"appInstallId"` - WebSiteGroupID uint `gorm:"type:integer" json:"webSiteGroupId"` - WebSiteSSLID uint `gorm:"type:integer" json:"webSiteSSLId"` - WebsiteDnsAccountID uint `gorm:"type:integer" json:"websiteDnsAccountId"` - WebsiteAcmeAccountID uint `gorm:"type:integer" json:"websiteAcmeAccountId"` - Domains []WebSiteDomain `json:"domains"` + PrimaryDomain string `gorm:"type:varchar(128);not null" json:"primaryDomain"` + Type string `gorm:"type:varchar(64);not null" json:"type"` + Alias string `gorm:"type:varchar(128);not null" json:"alias"` + Remark string `gorm:"type:longtext;" json:"remark"` + Status string `gorm:"type:varchar(64);not null" json:"status"` + ExpireDate time.Time `json:"expireDate"` + AppInstallID uint `gorm:"type:integer" json:"appInstallId"` + WebSiteGroupID uint `gorm:"type:integer" json:"webSiteGroupId"` + WebSiteSSLID uint `gorm:"type:integer" json:"webSiteSSLId"` + Domains []WebSiteDomain `json:"domains"` } func (w WebSite) TableName() string { diff --git a/backend/app/service/website.go b/backend/app/service/website.go index 3a8c9ff1f..390cb63f1 100644 --- a/backend/app/service/website.go +++ b/backend/app/service/website.go @@ -6,8 +6,10 @@ import ( "github.com/1Panel-dev/1Panel/backend/app/dto" "github.com/1Panel-dev/1Panel/backend/app/model" "github.com/1Panel-dev/1Panel/backend/constant" + "github.com/1Panel-dev/1Panel/backend/utils/files" "github.com/pkg/errors" "gorm.io/gorm" + "path" "reflect" "strings" "time" @@ -61,6 +63,9 @@ func (w WebsiteService) CreateWebsite(create dto.WebSiteCreate) error { otherDomainArray := strings.Split(create.OtherDomains, "\n") for _, domain := range otherDomainArray { + if domain == "" { + continue + } domainModel, err := getDomain(domain, website.ID) if err != nil { tx.Rollback() @@ -239,3 +244,30 @@ func (w WebsiteService) UpdateNginxConfigByScope(req dto.NginxConfigReq) error { return updateNginxConfig(website, getNginxParams(req.Params, keys), req.Scope) } + +func (w WebsiteService) GetWebsiteNginxConfig(websiteId uint) (dto.FileInfo, error) { + website, err := websiteRepo.GetFirst(commonRepo.WithByID(websiteId)) + if err != nil { + return dto.FileInfo{}, err + } + + nginxApp, err := appRepo.GetFirst(appRepo.WithKey("nginx")) + if err != nil { + return dto.FileInfo{}, err + } + nginxInstall, err := appInstallRepo.GetFirst(appInstallRepo.WithAppId(nginxApp.ID)) + if err != nil { + return dto.FileInfo{}, err + } + + configPath := path.Join(constant.AppInstallDir, "nginx", nginxInstall.Name, "conf", "conf.d", website.Alias+".conf") + + info, err := files.NewFileInfo(files.FileOption{ + Path: configPath, + Expand: true, + }) + if err != nil { + return dto.FileInfo{}, err + } + return dto.FileInfo{FileInfo: *info}, nil +} diff --git a/backend/router/ro_website.go b/backend/router/ro_website.go index 9180e8743..5aa14b76a 100644 --- a/backend/router/ro_website.go +++ b/backend/router/ro_website.go @@ -18,6 +18,7 @@ func (a *WebsiteRouter) InitWebsiteRouter(Router *gin.RouterGroup) { groupRouter.POST("", baseApi.CreateWebsite) groupRouter.POST("/update", baseApi.UpdateWebSite) groupRouter.GET("/:id", baseApi.GetWebSite) + groupRouter.GET("/:id/nginx", baseApi.GetWebSiteNginx) groupRouter.POST("/search", baseApi.PageWebsite) groupRouter.POST("/del", baseApi.DeleteWebSite) groupRouter.GET("/domains/:websiteId", baseApi.GetWebDomains) diff --git a/frontend/src/api/modules/website.ts b/frontend/src/api/modules/website.ts index 15a56cfce..e6f92de79 100644 --- a/frontend/src/api/modules/website.ts +++ b/frontend/src/api/modules/website.ts @@ -1,6 +1,7 @@ import http from '@/api'; import { ReqPage, ResPage } from '../interface'; import { WebSite } from '../interface/website'; +import { File } from '../interface/file'; export const SearchWebSites = (req: WebSite.WebSiteSearch) => { return http.post>(`/websites/search`, req); @@ -18,6 +19,10 @@ export const GetWebsite = (id: number) => { return http.get(`/websites/${id}`); }; +export const GetWebsiteNginx = (id: number) => { + return http.get(`/websites/${id}/nginx`); +}; + export const DeleteWebsite = (req: WebSite.WebSiteDel) => { return http.post(`/websites/del`, req); }; diff --git a/frontend/src/views/website/website/config/index.vue b/frontend/src/views/website/website/config/index.vue index 5f004f099..f2f24d582 100644 --- a/frontend/src/views/website/website/config/index.vue +++ b/frontend/src/views/website/website/config/index.vue @@ -8,7 +8,9 @@ 反代 - 反代 + + + @@ -18,6 +20,7 @@ import LayoutContent from '@/layout/layout-content.vue'; import { onMounted, ref } from 'vue'; import Basic from './basic/index.vue'; import Safety from './safety/index.vue'; +import Resource from './resource/index.vue'; import router from '@/routers'; const props = defineProps({ diff --git a/frontend/src/views/website/website/config/resource/index.vue b/frontend/src/views/website/website/config/resource/index.vue new file mode 100644 index 000000000..5ddf083f8 --- /dev/null +++ b/frontend/src/views/website/website/config/resource/index.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/src/views/website/website/config/resource/nginx/index.vue b/frontend/src/views/website/website/config/resource/nginx/index.vue new file mode 100644 index 000000000..9a3861508 --- /dev/null +++ b/frontend/src/views/website/website/config/resource/nginx/index.vue @@ -0,0 +1,81 @@ + +