mirror of
https://github.com/davegallant/rfd-fyi.git
synced 2026-03-03 09:36:35 +00:00
Move to a single container
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
FROM dhi.io/golang:1.26-debian13-dev AS build
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
COPY . /src
|
||||
|
||||
RUN CGO_ENABLED=0 go build -o backend .
|
||||
|
||||
FROM dhi.io/static:20251003-musl-alpine3.23
|
||||
|
||||
COPY --from=build /src/backend /backend
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
CMD [ "/backend" ]
|
||||
@@ -1,9 +1,11 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"math/rand/v2"
|
||||
"net/http"
|
||||
"net/url"
|
||||
@@ -17,20 +19,8 @@ import (
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
// @title RFD FYI API
|
||||
// @version 1.0
|
||||
// @description An API for issue tracking
|
||||
// @termsOfService http://swagger.io/terms/
|
||||
|
||||
// @contact.name API Support
|
||||
// @contact.url https://linktr.ee/davegallant
|
||||
// @contact.email davegallant@gmail.com
|
||||
|
||||
// @license.name Apache 2.0
|
||||
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
// @host localhost:8080
|
||||
// @BasePath /api/v1
|
||||
//go:embed dist/*
|
||||
var frontendFS embed.FS
|
||||
|
||||
type App struct {
|
||||
Router *mux.Router
|
||||
@@ -48,22 +38,45 @@ type Redirect struct {
|
||||
func (a *App) Initialize() {
|
||||
a.BasePath = "/api/v1"
|
||||
|
||||
a.Router = mux.NewRouter().PathPrefix(a.BasePath).Subrouter()
|
||||
http.Handle("/", a.Router)
|
||||
|
||||
a.Router = mux.NewRouter()
|
||||
a.initializeRoutes()
|
||||
}
|
||||
|
||||
func (a *App) Run(httpPort string) {
|
||||
log.Info().Msgf("Serving requests on port " + httpPort)
|
||||
if err := http.ListenAndServe(fmt.Sprintf(":"+httpPort), nil); err != nil {
|
||||
if err := http.ListenAndServe(fmt.Sprintf(":%s", httpPort), a.Router); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) initializeRoutes() {
|
||||
a.Router.HandleFunc("/topics", a.listTopics).Methods("GET")
|
||||
a.Router.HandleFunc("/topics/{id}", a.getTopicDetails).Methods("GET")
|
||||
a.Router.HandleFunc(a.BasePath+"/topics", a.listTopics).Methods("GET")
|
||||
a.Router.HandleFunc(a.BasePath+"/topics/{id}", a.getTopicDetails).Methods("GET")
|
||||
|
||||
distFS, err := fs.Sub(frontendFS, "dist")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fileServer := http.FileServer(http.FS(distFS))
|
||||
a.Router.PathPrefix("/").Handler(spaHandler{staticHandler: fileServer, staticFS: distFS})
|
||||
}
|
||||
|
||||
// spaHandler serves static files when they exist, otherwise falls back to
|
||||
// index.html so that client-side routing works.
|
||||
type spaHandler struct {
|
||||
staticHandler http.Handler
|
||||
staticFS fs.FS
|
||||
}
|
||||
|
||||
func (h spaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
path := strings.TrimPrefix(r.URL.Path, "/")
|
||||
if path == "" {
|
||||
path = "index.html"
|
||||
}
|
||||
if _, err := fs.Stat(h.staticFS, path); err != nil {
|
||||
r.URL.Path = "/"
|
||||
}
|
||||
h.staticHandler.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
// func respondWithError(w http.ResponseWriter, code int, message string) {
|
||||
|
||||
6
backend/dist/index.html
vendored
Normal file
6
backend/dist/index.html
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<body>
|
||||
<p>Run the Vite dev server for the frontend.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -11,21 +11,6 @@ import (
|
||||
utils "github.com/davegallant/rfd-fyi/pkg/utils"
|
||||
)
|
||||
|
||||
// @title RFD FYI API
|
||||
// @version 1.0
|
||||
// @description An API for an issue tracking service
|
||||
// @termsOfService http://swagger.io/terms/
|
||||
|
||||
// @contact.name API Support
|
||||
// @contact.url http://www.swagger.io/support
|
||||
// @contact.email support@swagger.io
|
||||
|
||||
// @license.name Apache 2.0
|
||||
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
|
||||
// @host localhost:8080
|
||||
// @BasePath /api/v1
|
||||
|
||||
func main() {
|
||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user