real init
This commit is contained in:
+71
@@ -0,0 +1,71 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"embed"
|
||||
"io/fs"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"git.dcntrlized.org/Dcntrlized/Maestro/handlers/actions"
|
||||
"git.dcntrlized.org/Dcntrlized/Maestro/handlers/containers"
|
||||
handlers "git.dcntrlized.org/Dcntrlized/Maestro/handlers/registry"
|
||||
libcontainers "git.dcntrlized.org/Dcntrlized/Maestro/lib/containers"
|
||||
"git.dcntrlized.org/Dcntrlized/Maestro/lib/docker"
|
||||
)
|
||||
|
||||
//go:embed all:frontend/dist
|
||||
var embeddedFrontend embed.FS
|
||||
|
||||
func main() {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
cache := libcontainers.NewContainerCache()
|
||||
|
||||
if os.Getenv("DEV_MODE_STATIC_SERVICES") == "true" {
|
||||
// DEV MODE: Load from file, skip Docker client
|
||||
cache.LoadDevServices("services.json")
|
||||
} else {
|
||||
// PROD MODE: Use Docker
|
||||
dc, err := docker.NewDockerClient()
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to init docker client: %v", err)
|
||||
}
|
||||
defer dc.Close()
|
||||
go cache.WatchContainers(ctx, dc)
|
||||
}
|
||||
|
||||
wsHub := containers.NewWebSocketHub(cache)
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/api/containers", containers.NewListContainersHandler(cache))
|
||||
mux.HandleFunc("/api/ws", wsHub.HandleWS)
|
||||
mux.HandleFunc("/api/containers/install", containers.InstallContainer)
|
||||
mux.HandleFunc("/api/actions", actions.RunAction)
|
||||
mux.HandleFunc("/api/registry", handlers.GetRegistry)
|
||||
|
||||
if os.Getenv("DEV_MODE") != "true" {
|
||||
frontendDir, err := fs.Sub(embeddedFrontend, "frontend/dist")
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to parse embedded frontend subtree: %v", err)
|
||||
}
|
||||
mux.Handle("/", http.FileServer(http.FS(frontendDir)))
|
||||
}
|
||||
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080"
|
||||
}
|
||||
|
||||
server := &http.Server{
|
||||
Addr: ":" + port, // Use the variable here
|
||||
Handler: mux,
|
||||
}
|
||||
|
||||
log.Printf("Server starting on port %s...", port)
|
||||
if err := server.ListenAndServe(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user