diff --git a/Dockerfile b/Dockerfile index 1a6b520e..a0a3aa47 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,6 @@ FROM golang:1.21-alpine AS backend WORKDIR /backend-build COPY . . -COPY --from=frontend /frontend-build/web/dist ./server/frontend/dist RUN CGO_ENABLED=0 go build -o memos ./bin/memos/main.go @@ -26,6 +25,7 @@ WORKDIR /usr/local/memos RUN apk add --no-cache tzdata ENV TZ="UTC" +COPY --from=frontend /frontend-build/web/dist /usr/local/memos/dist COPY --from=backend /backend-build/memos /usr/local/memos/ EXPOSE 5230 diff --git a/server/frontend/dist/index.html b/server/frontend/dist/index.html deleted file mode 100644 index 4395d918..00000000 --- a/server/frontend/dist/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - Memos - - - -

No frontend embeded.

- - diff --git a/server/frontend/frontend.go b/server/frontend/frontend.go index ff255ecf..7202b55e 100644 --- a/server/frontend/frontend.go +++ b/server/frontend/frontend.go @@ -1,11 +1,10 @@ package frontend import ( - "embed" "fmt" "html/template" - "io/fs" "net/http" + "os" "strings" "github.com/labstack/echo/v4" @@ -20,12 +19,6 @@ import ( "github.com/usememos/memos/store" ) -//go:embed dist -var embeddedFiles embed.FS - -//go:embed dist/index.html -var rawIndexHTML string - type FrontendService struct { Profile *profile.Profile Store *store.Store @@ -42,32 +35,18 @@ func (s *FrontendService) Serve(e *echo.Echo) { // Use echo static middleware to serve the built dist folder. // refer: https://github.com/labstack/echo/blob/master/middleware/static.go e.Use(middleware.StaticWithConfig(middleware.StaticConfig{ - Skipper: defaultAPIRequestSkipper, - HTML5: true, - Filesystem: getFileSystem("dist"), - })) - - assetsGroup := e.Group("assets") - assetsGroup.Use(middleware.GzipWithConfig(middleware.GzipConfig{ + Root: "dist", Skipper: defaultAPIRequestSkipper, - Level: 5, - })) - assetsGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - c.Response().Header().Set(echo.HeaderCacheControl, "max-age=31536000, immutable") - return next(c) - } - }) - assetsGroup.Use(middleware.StaticWithConfig(middleware.StaticConfig{ - Skipper: defaultAPIRequestSkipper, - HTML5: true, - Filesystem: getFileSystem("dist/assets"), + HTML5: true, })) s.registerRoutes(e) } func (s *FrontendService) registerRoutes(e *echo.Echo) { + rawIndexHTMLBytes, _ := os.ReadFile("dist/index.html") + rawIndexHTML := string(rawIndexHTMLBytes) + e.GET("/robots.txt", func(c echo.Context) error { ctx := c.Request().Context() instanceURLSetting, err := s.Store.GetSystemSetting(ctx, &store.FindSystemSetting{ @@ -194,14 +173,6 @@ func generateMemoMetadata(memo *store.Memo, creator *store.User) string { return strings.Join(metadataList, "\n") } -func getFileSystem(path string) http.FileSystem { - fs, err := fs.Sub(embeddedFiles, path) - if err != nil { - panic(err) - } - return http.FS(fs) -} - func defaultAPIRequestSkipper(c echo.Context) bool { path := c.Request().URL.Path return util.HasPrefixes(path, "/api", "/memos.api.v2")