refactor!: Déplacer fichiers statiques vers embed
Bump golang -> `1.21.4` Bump alpine -> `3.18.4` Exposer fichiers html sur `/*` Exposer fichiers css sur `/public/css/*` Exposer fichiers js sur `/public/js/*` Retirer prefix cgo de build step Ajouter `public/` à build step Retirer `public/static/` de `static/` dans run step Retirer mentions à static_dir dans `cmd/server.go` Retirer flag `server.static_dir`, `--static_dir` de serverCmd Retirer paramètre `static_dir` de `runServer` Remplacer middleware `RemoveTrailingSlash` -> `AddTrailingSlash` Ajouter `echo.Group`s pour exposition statique avec config Refactor déclaration de routes api derrière groupe `/api` Fix références de fichiers js et css dans `index.html` et `slider.js` BREAKING: static_dir n'est plus utilisé, les fichiers sont maintenant embedded
This commit is contained in:
parent
b68859f90b
commit
996aa67984
7 changed files with 43 additions and 25 deletions
10
Dockerfile
10
Dockerfile
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1.20.2 as build
|
FROM golang:1.21.4 as build
|
||||||
|
|
||||||
LABEL author="Victor Lacasse-Beaudoin <vlbeaudoin@agecem.org>"
|
LABEL author="Victor Lacasse-Beaudoin <vlbeaudoin@agecem.org>"
|
||||||
LABEL license="MIT"
|
LABEL license="MIT"
|
||||||
|
@ -15,11 +15,13 @@ ADD data/ data/
|
||||||
|
|
||||||
ADD handlers/ handlers/
|
ADD handlers/ handlers/
|
||||||
|
|
||||||
RUN CGO_ENABLED=0 go build -a -installsuffix cgo -o babillard .
|
ADD public/ public/
|
||||||
|
|
||||||
|
RUN CGO_ENABLED=0 go build -a -o babillard .
|
||||||
|
|
||||||
# Alpine
|
# Alpine
|
||||||
|
|
||||||
FROM alpine:3.17.2
|
FROM alpine:3.18.4
|
||||||
|
|
||||||
RUN apk update && apk upgrade --no-cache
|
RUN apk update && apk upgrade --no-cache
|
||||||
|
|
||||||
|
@ -27,8 +29,6 @@ WORKDIR /app
|
||||||
|
|
||||||
ADD contenu/ contenu/
|
ADD contenu/ contenu/
|
||||||
|
|
||||||
ADD public/static/ static/
|
|
||||||
|
|
||||||
COPY --from=build /go/src/app/babillard /usr/bin/babillard
|
COPY --from=build /go/src/app/babillard /usr/bin/babillard
|
||||||
|
|
||||||
CMD ["babillard", "server"]
|
CMD ["babillard", "server"]
|
||||||
|
|
|
@ -3,8 +3,10 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"git.agecem.com/agecem/babillard/handlers"
|
"git.agecem.com/agecem/babillard/handlers"
|
||||||
|
"git.agecem.com/agecem/babillard/public"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
"github.com/labstack/echo/v4/middleware"
|
"github.com/labstack/echo/v4/middleware"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -17,9 +19,9 @@ var serverCmd = &cobra.Command{
|
||||||
Short: "Démarrer le serveur web",
|
Short: "Démarrer le serveur web",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
port := viper.GetInt("server.port")
|
port := viper.GetInt("server.port")
|
||||||
static_dir := viper.GetString("server.static_dir")
|
//static_dir := viper.GetString("server.static_dir")
|
||||||
|
|
||||||
runServer(port, static_dir)
|
runServer(port)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,25 +36,33 @@ func declareFlags() {
|
||||||
|
|
||||||
serverCmd.Flags().String("contenu_dir", "contenu", "Répertoire du contenu à exposer (config: \"server.contenu_dir\")")
|
serverCmd.Flags().String("contenu_dir", "contenu", "Répertoire du contenu à exposer (config: \"server.contenu_dir\")")
|
||||||
viper.BindPFlag("server.contenu_dir", serverCmd.Flags().Lookup("contenu_dir"))
|
viper.BindPFlag("server.contenu_dir", serverCmd.Flags().Lookup("contenu_dir"))
|
||||||
|
|
||||||
serverCmd.Flags().String("static_dir", "static", "Répertoire des fichiers statiques à exposer (config: \"server.static_dir\")")
|
|
||||||
viper.BindPFlag("server.static_dir", serverCmd.Flags().Lookup("static_dir"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func runServer(port int, static_dir string) {
|
func runServer(port int) {
|
||||||
log.Print("[I] Starting webserver")
|
log.Print("[I] Starting webserver")
|
||||||
|
|
||||||
e := echo.New()
|
e := echo.New()
|
||||||
|
|
||||||
g := e.Group("")
|
e.Pre(middleware.AddTrailingSlash())
|
||||||
|
|
||||||
e.Pre(middleware.RemoveTrailingSlash())
|
e.Group("").Use(middleware.StaticWithConfig(middleware.StaticConfig{
|
||||||
|
Root: "/html/",
|
||||||
|
Filesystem: http.FS(public.HTMLFS()),
|
||||||
|
}))
|
||||||
|
e.Group("/public/css").Use(middleware.StaticWithConfig(middleware.StaticConfig{
|
||||||
|
Root: "/css/",
|
||||||
|
Filesystem: http.FS(public.CSSFS()),
|
||||||
|
}))
|
||||||
|
e.Group("/public/js").Use(middleware.StaticWithConfig(middleware.StaticConfig{
|
||||||
|
Root: "/js/",
|
||||||
|
Filesystem: http.FS(public.JSFS()),
|
||||||
|
}))
|
||||||
|
|
||||||
g.Static("/", static_dir)
|
groupAPI := e.Group("/api")
|
||||||
|
|
||||||
g.GET("/api", handlers.HandleAPIShow)
|
groupAPI.GET("/", handlers.HandleAPIShow)
|
||||||
g.GET("/api/contenu", handlers.HandleAPIContenuList)
|
groupAPI.GET("/contenu/", handlers.HandleAPIContenuList)
|
||||||
g.GET("/api/contenu/:filename", handlers.HandleAPIContenuFile)
|
groupAPI.GET("/contenu/:filename/", handlers.HandleAPIContenuFile)
|
||||||
|
|
||||||
e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", port)))
|
e.Logger.Fatal(e.Start(fmt.Sprintf(":%d", port)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,17 @@ package public
|
||||||
|
|
||||||
import "embed"
|
import "embed"
|
||||||
|
|
||||||
//go:embed static/*
|
//go:embed html/*
|
||||||
var embedFS embed.FS
|
var htmlFS embed.FS
|
||||||
|
|
||||||
func GetEmbedFS() embed.FS {
|
func HTMLFS() embed.FS { return htmlFS }
|
||||||
return embedFS
|
|
||||||
}
|
//go:embed css/*
|
||||||
|
var cssFS embed.FS
|
||||||
|
|
||||||
|
func CSSFS() embed.FS { return cssFS }
|
||||||
|
|
||||||
|
//go:embed js/*
|
||||||
|
var jsFS embed.FS
|
||||||
|
|
||||||
|
func JSFS() embed.FS { return jsFS }
|
||||||
|
|
|
@ -5,13 +5,13 @@
|
||||||
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||||||
|
|
||||||
<script src="slider.js"></script>
|
<script src="/public/js/slider.js"></script>
|
||||||
|
|
||||||
<!-- BROKEN, brise slider.js quand inclu
|
<!-- BROKEN, brise slider.js quand inclu
|
||||||
<script src="text.js"></script>
|
<script src="text.js"></script>
|
||||||
!-->
|
!-->
|
||||||
|
|
||||||
<link rel="stylesheet" href="style.css">
|
<link rel="stylesheet" href="/public/css/style.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
|
@ -6,7 +6,7 @@ function afficherIndex() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function afficherImage() {
|
function afficherImage() {
|
||||||
$('#image').attr('src', "api/contenu/"+images[indexImages]);
|
$('#image').attr('src', "/api/contenu/"+images[indexImages]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function augmenterIndex() {
|
function augmenterIndex() {
|
Loading…
Reference in a new issue