Single binary build

Use go rice for embedding the static files and templates to the binary file
This commit is contained in:
Khanh Ngo 2020-05-21 11:43:03 +07:00
parent c56f042217
commit af16649b3f
No known key found for this signature in database
GPG key ID: D5FAA6A16150E49E
7 changed files with 115 additions and 12 deletions

View file

@ -5,6 +5,7 @@ import (
"io"
"text/template"
"github.com/GeertJohan/go.rice"
"github.com/gorilla/sessions"
"github.com/labstack/echo-contrib/session"
"github.com/labstack/echo/v4"
@ -36,11 +37,44 @@ func New() *echo.Echo {
e := echo.New()
e.Use(session.Middleware(sessions.NewCookieStore([]byte("secret"))))
// create go rice box for embedded template
templateBox, err := rice.FindBox("../templates")
if err != nil {
log.Fatal(err)
}
// read html template file to string
tmplBaseString, err := templateBox.String("base.html")
if err != nil {
log.Fatal(err)
}
tmplLoginString, err := templateBox.String("login.html")
if err != nil {
log.Fatal(err)
}
tmplClientsString, err := templateBox.String("clients.html")
if err != nil {
log.Fatal(err)
}
tmplServerString, err := templateBox.String("server.html")
if err != nil {
log.Fatal(err)
}
tmplGlobalSettingsString, err := templateBox.String("global_settings.html")
if err != nil {
log.Fatal(err)
}
// create template list
templates := make(map[string]*template.Template)
templates["login.html"] = template.Must(template.ParseFiles("templates/login.html"))
templates["clients.html"] = template.Must(template.ParseFiles("templates/clients.html", "templates/base.html"))
templates["server.html"] = template.Must(template.ParseFiles("templates/server.html", "templates/base.html"))
templates["global_settings.html"] = template.Must(template.ParseFiles("templates/global_settings.html", "templates/base.html"))
templates["login.html"] = template.Must(template.New("login").Parse(tmplLoginString))
templates["clients.html"] = template.Must(template.New("clients").Parse(tmplBaseString + tmplClientsString))
templates["server.html"] = template.Must(template.New("server").Parse(tmplBaseString + tmplServerString))
templates["global_settings.html"] = template.Must(template.New("global_settings").Parse(tmplBaseString + tmplGlobalSettingsString))
e.Logger.SetLevel(log.DEBUG)
e.Pre(middleware.RemoveTrailingSlash())
@ -51,7 +85,6 @@ func New() *echo.Echo {
AllowMethods: []string{echo.GET, echo.HEAD, echo.PUT, echo.PATCH, echo.POST, echo.DELETE},
}))
e.Validator = NewValidator()
e.Static("/static", "assets")
e.Renderer = &TemplateRegistry{
templates: templates,
}