From a560d98acf6e41709decce7dfb9f31d95a37f7e0 Mon Sep 17 00:00:00 2001 From: Hintay Date: Tue, 4 Feb 2025 01:10:29 +0900 Subject: [PATCH] feat: build with no embedded front-end files --- .air.toml | 2 +- .idea/nginx-ui.iml | 10 +++++++++- app/app.go | 4 ++++ app/app_unembed.go | 10 ++++++++++ internal/middleware/embed.go | 29 +++++++++++++++++++++++++++++ internal/middleware/middleware.go | 28 +++++----------------------- internal/upgrader/info.go | 7 ++++--- router/routers.go | 11 ++++------- router/routers_embed.go | 17 +++++++++++++++++ router/routers_unembed.go | 8 ++++++++ 10 files changed, 91 insertions(+), 35 deletions(-) create mode 100644 app/app_unembed.go create mode 100644 internal/middleware/embed.go create mode 100644 router/routers_embed.go create mode 100644 router/routers_unembed.go diff --git a/.air.toml b/.air.toml index ad1b87b5..19f54c2a 100644 --- a/.air.toml +++ b/.air.toml @@ -7,7 +7,7 @@ tmp_dir = "tmp" [build] # Just plain old shell command. You could use `make` as well. -cmd = "CGO_ENABLED=1 go build -tags=jsoniter -ldflags=\"-X 'github.com/0xJacky/Nginx-UI/settings.buildTime=$(date +%s)'\" -v -o ./tmp/main ." +cmd = "CGO_ENABLED=1 go build -tags=jsoniter,unembed -ldflags=\"-X 'github.com/0xJacky/Nginx-UI/settings.buildTime=$(date +%s)'\" -v -o ./tmp/main ." # Binary file yields from `cmd`. bin = "tmp/main" # Customize binary. diff --git a/.idea/nginx-ui.iml b/.idea/nginx-ui.iml index 5e764c4f..26f9e504 100644 --- a/.idea/nginx-ui.iml +++ b/.idea/nginx-ui.iml @@ -1,6 +1,14 @@ - + + + + + diff --git a/app/app.go b/app/app.go index 804dd769..f00ad958 100644 --- a/app/app.go +++ b/app/app.go @@ -1,3 +1,5 @@ +//go:build !unembed + package app import ( @@ -6,3 +8,5 @@ import ( //go:embed i18n.json dist/* dist/*/* src/language/* src/language/*/* var DistFS embed.FS + +var VersionPath = "dist/version.json" diff --git a/app/app_unembed.go b/app/app_unembed.go new file mode 100644 index 00000000..43733be7 --- /dev/null +++ b/app/app_unembed.go @@ -0,0 +1,10 @@ +//go:build unembed + +package app + +import "embed" + +//go:embed i18n.json src/language/* src/language/*/* src/version.json +var DistFS embed.FS + +var VersionPath = "src/version.json" diff --git a/internal/middleware/embed.go b/internal/middleware/embed.go new file mode 100644 index 00000000..1bf1e09a --- /dev/null +++ b/internal/middleware/embed.go @@ -0,0 +1,29 @@ +//go:build !unembed + +package middleware + +import ( + "io/fs" + "net/http" + "path" + + "github.com/0xJacky/Nginx-UI/app" + "github.com/gin-contrib/static" + "github.com/uozi-tech/cosy/logger" +) + +func MustFs(dir string) (serverFileSystem static.ServeFileSystem) { + + sub, err := fs.Sub(app.DistFS, path.Join("dist", dir)) + + if err != nil { + logger.Error(err) + return + } + + serverFileSystem = ServerFileSystemType{ + http.FS(sub), + } + + return +} diff --git a/internal/middleware/middleware.go b/internal/middleware/middleware.go index 1c250dd2..6b908025 100644 --- a/internal/middleware/middleware.go +++ b/internal/middleware/middleware.go @@ -2,16 +2,14 @@ package middleware import ( "encoding/base64" - "github.com/0xJacky/Nginx-UI/app" - "github.com/0xJacky/Nginx-UI/internal/user" - "github.com/0xJacky/Nginx-UI/settings" - "github.com/gin-contrib/static" - "github.com/gin-gonic/gin" - "github.com/uozi-tech/cosy/logger" - "io/fs" "net/http" "path" "strings" + + "github.com/0xJacky/Nginx-UI/internal/user" + "github.com/0xJacky/Nginx-UI/settings" + "github.com/gin-gonic/gin" + "github.com/uozi-tech/cosy/logger" ) func AuthRequired() gin.HandlerFunc { @@ -72,22 +70,6 @@ func (f ServerFileSystemType) Exists(prefix string, _path string) bool { return err == nil } -func MustFs(dir string) (serverFileSystem static.ServeFileSystem) { - - sub, err := fs.Sub(app.DistFS, path.Join("dist", dir)) - - if err != nil { - logger.Error(err) - return - } - - serverFileSystem = ServerFileSystemType{ - http.FS(sub), - } - - return -} - func CacheJs() gin.HandlerFunc { return func(c *gin.Context) { if strings.Contains(c.Request.URL.String(), "js") { diff --git a/internal/upgrader/info.go b/internal/upgrader/info.go index 6d536b1a..3bede803 100644 --- a/internal/upgrader/info.go +++ b/internal/upgrader/info.go @@ -2,11 +2,12 @@ package upgrader import ( "encoding/json" - "github.com/0xJacky/Nginx-UI/app" - "github.com/pkg/errors" "os" "path/filepath" "runtime" + + "github.com/0xJacky/Nginx-UI/app" + "github.com/pkg/errors" ) type RuntimeInfo struct { @@ -43,7 +44,7 @@ func GetRuntimeInfo() (r RuntimeInfo, err error) { } func GetCurrentVersion() (c CurVersion, err error) { - verJson, err := app.DistFS.ReadFile("dist/version.json") + verJson, err := app.DistFS.ReadFile(app.VersionPath) if err != nil { err = errors.Wrap(err, "service.GetCurrentVersion ReadFile err") return diff --git a/router/routers.go b/router/routers.go index cee3d067..d61cb2f2 100644 --- a/router/routers.go +++ b/router/routers.go @@ -1,6 +1,8 @@ package router import ( + "net/http" + "github.com/0xJacky/Nginx-UI/api/analytic" "github.com/0xJacky/Nginx-UI/api/certificate" "github.com/0xJacky/Nginx-UI/api/cluster" @@ -19,19 +21,14 @@ import ( "github.com/0xJacky/Nginx-UI/api/upstream" "github.com/0xJacky/Nginx-UI/api/user" "github.com/0xJacky/Nginx-UI/internal/middleware" - "github.com/gin-contrib/static" "github.com/gin-gonic/gin" "github.com/uozi-tech/cosy" - "net/http" ) func InitRouter() { r := cosy.GetEngine() - r.Use( - middleware.CacheJs(), - middleware.IPWhiteList(), - static.Serve("/", middleware.MustFs("")), - ) + + initEmbedRoute(r) r.NoRoute(func(c *gin.Context) { c.JSON(http.StatusNotFound, gin.H{ diff --git a/router/routers_embed.go b/router/routers_embed.go new file mode 100644 index 00000000..bcbb6f29 --- /dev/null +++ b/router/routers_embed.go @@ -0,0 +1,17 @@ +//go:build !unembed + +package router + +import ( + "github.com/0xJacky/Nginx-UI/internal/middleware" + "github.com/gin-contrib/static" + "github.com/gin-gonic/gin" +) + +func initEmbedRoute(r *gin.Engine) { + r.Use( + middleware.CacheJs(), + middleware.IPWhiteList(), + static.Serve("/", middleware.MustFs("")), + ) +} diff --git a/router/routers_unembed.go b/router/routers_unembed.go new file mode 100644 index 00000000..a2891cd7 --- /dev/null +++ b/router/routers_unembed.go @@ -0,0 +1,8 @@ +//go:build unembed + +package router + +import "github.com/gin-gonic/gin" + +func initEmbedRoute(r *gin.Engine) { +}