Embed fichiers statiques dans exécutable avec go embed #6

Merged
vlbeaudoin merged 2 commits from feature/embed into main 2023-11-29 17:25:31 -05:00
7 changed files with 43 additions and 25 deletions
Showing only changes of commit 996aa67984 - Show all commits

View file

@ -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"]

View file

@ -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)))
} }

View file

@ -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 }

View file

@ -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>

View file

@ -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() {