Skip to content

Commit 6cf7192

Browse files
committed
chore: add ssr placeholder in index.html
1 parent 6763dab commit 6cf7192

9 files changed

Lines changed: 47 additions & 29 deletions

File tree

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ tmp
66

77
# Frontend asset
88
web/dist
9-
server/dist
109

1110
# build folder
1211
build

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ FROM golang:1.21-alpine AS backend
1515
WORKDIR /backend-build
1616

1717
COPY . .
18-
COPY --from=frontend /frontend-build/web/dist ./server/dist
18+
COPY --from=frontend /frontend-build/web/dist ./server/frontend/dist
1919

2020
RUN CGO_ENABLED=0 go build -o memos ./bin/memos/main.go
2121

docs/development-windows.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ Memos should now be running at [http://localhost:3001](http://localhost:3001) an
5656

5757
## Building
5858

59-
Frontend must be built before backend. The built frontend must be placed in the backend ./server/dist directory. Otherwise, you will get a "No frontend embeded" error.
59+
Frontend must be built before backend. The built frontend must be placed in the backend ./server/frontend/dist directory. Otherwise, you will get a "No frontend embeded" error.
6060

6161
### Frontend
6262

6363
```powershell
64-
Move-Item "./server/dist" "./server/dist.bak"
64+
Move-Item "./server/frontend/dist" "./server/frontend/dist.bak"
6565
cd web; pnpm i --frozen-lockfile; pnpm build; cd ..;
6666
Move-Item "./web/dist" "./server/" -Force
6767
```

scripts/build.ps1

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,16 @@ if (!$?) {
8585
}
8686

8787
Write-Host "`nBacking up frontend placeholder..." -f Magenta
88-
Move-Item "$repoRoot/server/dist" "$repoRoot/server/dist.bak" -Force -ErrorAction Stop
88+
Move-Item "$repoRoot/server/frontend/dist" "$repoRoot/server/frontend/dist.bak" -Force -ErrorAction Stop
8989
if (!$?) {
9090
Write-Host -BackgroundColor red -ForegroundColor white "Could not backup frontend placeholder. See above."
9191
Exit 1
9292
}
9393

94-
Write-Host "Moving frontend build to ./server/dist..." -f Magenta
94+
Write-Host "Moving frontend build to ./server/frontend/dist..." -f Magenta
9595
Move-Item "$repoRoot/web/dist" "$repoRoot/server/" -Force -ErrorAction Stop
9696
if (!$?) {
97-
Write-Host -BackgroundColor red -ForegroundColor white "Could not move frontend build to /server/dist. See above."
97+
Write-Host -BackgroundColor red -ForegroundColor white "Could not move frontend build to /server/frontend/dist. See above."
9898
Exit 1
9999
}
100100

@@ -126,15 +126,15 @@ Write-Host "Backend built!" -f green
126126
Write-Host "`nFrontend build took $($frontendTime.TotalSeconds) seconds." -f Cyan
127127
Write-Host "Backend builds took $($backendTime.TotalSeconds) seconds." -f Cyan
128128

129-
Write-Host "`nRemoving frontend from ./server/dist ..." -f Magenta
130-
Remove-Item "$repoRoot/server/dist" -Recurse -Force -ErrorAction SilentlyContinue
129+
Write-Host "`nRemoving frontend from ./server/frontend/dist ..." -f Magenta
130+
Remove-Item "$repoRoot/server/frontend/dist" -Recurse -Force -ErrorAction SilentlyContinue
131131
if (!$?) {
132-
Write-Host -BackgroundColor red -ForegroundColor white "Could not remove frontend from /server/dist. See above."
132+
Write-Host -BackgroundColor red -ForegroundColor white "Could not remove frontend from /server/frontend/dist. See above."
133133
Exit 1
134134
}
135135

136136
Write-Host "Restoring frontend placeholder..." -f Magenta
137-
Move-Item "$repoRoot/server/dist.bak" "$repoRoot/server/dist" -Force -ErrorAction Stop
137+
Move-Item "$repoRoot/server/frontend/dist.bak" "$repoRoot/server/frontend/dist" -Force -ErrorAction Stop
138138
if (!$?) {
139139
Write-Host -BackgroundColor red -ForegroundColor white "Could not restore frontend placeholder. See above."
140140
Exit 1

scripts/build.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,13 @@ echo -e "\033[32mFrontend built!\033[0m"
9393
cd $repo_root
9494

9595
echo -e "\n\033[35mBacking up frontend placeholder...\033[0m"
96-
mv -f "$repo_root/server/dist" "$repo_root/server/dist.bak"
96+
mv -f "$repo_root/server/frontend/dist" "$repo_root/server/frontend/dist.bak"
9797
if [ $? -ne 0 ]; then
9898
echo -e "\033[0;31mFailed to backup frontend placeholder! Exiting.\033[0m"
9999
exit 1
100100
fi
101101

102-
echo -e "\033[35mMoving frontend build to ./server/dist...\033[0m"
102+
echo -e "\033[35mMoving frontend build to ./server/frontend/dist...\033[0m"
103103
mv -f "$repo_root/web/dist" "$repo_root/server/"
104104
if [ $? -ne 0 ]; then
105105
echo -e "\033[0;31mFailed to move frontend build! Exiting.\033[0m"
@@ -129,16 +129,16 @@ done
129129

130130
echo -e "\033[32mBackend built!\033[0m"
131131

132-
echo -e "\n\033[35mRemoving frontend from ./server/dist...\033[0m"
133-
rm -rf $repo_root/server/dist
132+
echo -e "\n\033[35mRemoving frontend from ./server/frontend/dist...\033[0m"
133+
rm -rf $repo_root/server/frontend/dist
134134
if [ $? -ne 0 ]
135135
then
136-
echo -e "\033[93mCould not remove frontend from /server/dist.\033[0m"
136+
echo -e "\033[93mCould not remove frontend from /server/frontend/dist.\033[0m"
137137
exit 1
138138
fi
139139

140140
echo -e "\033[35mRestoring frontend placeholder...\033[0m"
141-
mv $repo_root/server/dist.bak $repo_root/server/dist
141+
mv $repo_root/server/frontend/dist.bak $repo_root/server/frontend/dist
142142
if [ $? -ne 0 ]
143143
then
144144
echo -e "\033[93mCould not restore frontend placeholder.\033e[0m"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
77
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
88
<title>Memos</title>
9+
<!-- memos.metadata -->
910
</head>
1011
<body>
1112
<p>No frontend embeded.</p>
Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package server
1+
package frontend
22

33
import (
44
"embed"
55
"io/fs"
66
"net/http"
7+
"strings"
78

89
"github.com/labstack/echo/v4"
910
"github.com/labstack/echo/v4/middleware"
@@ -14,16 +15,10 @@ import (
1415
//go:embed dist
1516
var embeddedFiles embed.FS
1617

17-
func getFileSystem(path string) http.FileSystem {
18-
fs, err := fs.Sub(embeddedFiles, path)
19-
if err != nil {
20-
panic(err)
21-
}
18+
//go:embed dist/index.html
19+
var rawIndexHTML string
2220

23-
return http.FS(fs)
24-
}
25-
26-
func embedFrontend(e *echo.Echo) {
21+
func Serve(e *echo.Echo) {
2722
// Use echo static middleware to serve the built dist folder
2823
// refer: https://github.com/labstack/echo/blob/master/middleware/static.go
2924
e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
@@ -33,6 +28,10 @@ func embedFrontend(e *echo.Echo) {
3328
}))
3429

3530
assetsGroup := e.Group("assets")
31+
assetsGroup.Use(middleware.GzipWithConfig(middleware.GzipConfig{
32+
Skipper: defaultAPIRequestSkipper,
33+
Level: 5,
34+
}))
3635
assetsGroup.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
3736
return func(c echo.Context) error {
3837
c.Response().Header().Set(echo.HeaderCacheControl, "max-age=31536000, immutable")
@@ -44,6 +43,23 @@ func embedFrontend(e *echo.Echo) {
4443
HTML5: true,
4544
Filesystem: getFileSystem("dist/assets"),
4645
}))
46+
47+
registerRoutes(e)
48+
}
49+
50+
func registerRoutes(e *echo.Echo) {
51+
e.GET("/m/:memoID", func(c echo.Context) error {
52+
indexHTML := strings.ReplaceAll(rawIndexHTML, "<!-- memos.metadata -->", "<meta name=\"memos-memo-id\" content=\""+c.Param("memoID")+"\">"+"\n")
53+
return c.HTML(http.StatusOK, indexHTML)
54+
})
55+
}
56+
57+
func getFileSystem(path string) http.FileSystem {
58+
fs, err := fs.Sub(embeddedFiles, path)
59+
if err != nil {
60+
panic(err)
61+
}
62+
return http.FS(fs)
4763
}
4864

4965
func defaultAPIRequestSkipper(c echo.Context) bool {

server/server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
apiv1 "github.com/usememos/memos/api/v1"
1717
apiv2 "github.com/usememos/memos/api/v2"
1818
"github.com/usememos/memos/plugin/telegram"
19+
"github.com/usememos/memos/server/frontend"
1920
"github.com/usememos/memos/server/integration"
2021
"github.com/usememos/memos/server/profile"
2122
"github.com/usememos/memos/server/service/backup"
@@ -83,7 +84,7 @@ func NewServer(ctx context.Context, profile *profile.Profile, store *store.Store
8384
s.ID = serverID
8485

8586
// Serve frontend.
86-
embedFrontend(e)
87+
frontend.Serve(e)
8788

8889
// Serve swagger in dev/demo mode.
8990
if profile.Mode == "dev" || profile.Mode == "demo" {

web/index.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#27272a" />
88
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
99
<link rel="manifest" href="/manifest.json" />
10-
<title>memos</title>
10+
<title>Memos</title>
11+
<!-- memos.metadata -->
1112
</head>
1213
<body>
1314
<div id="root"></div>

0 commit comments

Comments
 (0)