From 12e23c3517029d16cce8d58c0363dffccd27446c Mon Sep 17 00:00:00 2001 From: yusing Date: Fri, 1 Mar 2024 16:50:26 +0800 Subject: [PATCH] added a simple panel --- Dockerfile | 3 +- README.md | 11 ++- build.sh | 2 +- compose.example.yml | 5 ++ go.mod | 3 +- go.sum | 2 + screenshots/panel.png | Bin 0 -> 102750 bytes src/go-proxy/docker.go | 116 +++++++++++++++++++++++++++++++ main.go => src/go-proxy/main.go | 117 ++++---------------------------- src/go-proxy/panel.go | 80 ++++++++++++++++++++++ templates/panel.html | 116 +++++++++++++++++++++++++++++++ 11 files changed, 342 insertions(+), 113 deletions(-) create mode 100755 screenshots/panel.png create mode 100644 src/go-proxy/docker.go rename main.go => src/go-proxy/main.go (53%) create mode 100644 src/go-proxy/panel.go create mode 100644 templates/panel.html diff --git a/Dockerfile b/Dockerfile index 31a2e14..e066e6c 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ FROM alpine:latest -MAINTAINER yusing@6uo.me +LABEL maintainer="yusing@6uo.me" COPY bin/go-proxy /usr/bin +COPY templates/ /app/templates RUN chmod +rx /usr/bin/go-proxy ENV DOCKER_HOST unix:///var/run/docker.sock diff --git a/README.md b/README.md index f8ca830..dc0171c 100755 --- a/README.md +++ b/README.md @@ -9,6 +9,9 @@ Written in **Go** with *~220 loc*. - subdomain matching **(domain name doesn't matter)** - path matching - Auto hot-reload when container start / die / stop. +- Simple panel to see all reverse proxies and health (visit `https://go-proxy.yourdomain.com`) + + ![panel screenshot](screenshots/panel.png) ## Why am I making this @@ -157,13 +160,9 @@ Transfer/sec: 1.98MB 2. Get dependencies with `go get` -3. build image with following commands +3. build binary with `sh build.sh` - ```shell - mkdir -p bin - CGO_ENABLED=0 GOOS= go build -o bin/go-proxy - docker build -t . - ``` +4. start your container with `docker compose up -d` ## Getting SSL certs diff --git a/build.sh b/build.sh index 3d637fc..f445a54 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/sh mkdir -p bin -CGO_ENABLED=0 GOOS=linux go build -o bin/go-proxy || exit 1 +CGO_ENABLED=0 GOOS=linux go build -o bin/go-proxy src/go-proxy/*.go || exit 1 if [ "$1" = "up" ]; then docker compose up -d --build app && \ diff --git a/compose.example.yml b/compose.example.yml index 73efb66..f4ca5e6 100755 --- a/compose.example.yml +++ b/compose.example.yml @@ -12,3 +12,8 @@ services: - /var/run/docker.sock:/var/run/docker.sock:ro extra_hosts: - host.docker.internal:host-gateway + logging: + driver: 'json-file' + options: + max-file: '1' + max-size: 128k diff --git a/go.mod b/go.mod index f454b9e..8fa68c4 100755 --- a/go.mod +++ b/go.mod @@ -1,8 +1,9 @@ -module go-proxy +module github.com/yusing/go-proxy go 1.21.7 require ( + github.com/deckarep/golang-set/v2 v2.6.0 github.com/docker/docker v25.0.3+incompatible golang.org/x/text v0.14.0 ) diff --git a/go.sum b/go.sum index c65c784..6e9c2df 100755 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= +github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/docker v25.0.3+incompatible h1:D5fy/lYmY7bvZa0XTZ5/UJPljor41F+vdyJG5luQLfQ= diff --git a/screenshots/panel.png b/screenshots/panel.png new file mode 100755 index 0000000000000000000000000000000000000000..a784b778b3dbb8114f8509dfb5c990599cb1f07e GIT binary patch literal 102750 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�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 EACyZ2DF6Tf literal 0 HcmV?d00001 diff --git a/src/go-proxy/docker.go b/src/go-proxy/docker.go new file mode 100644 index 0000000..217f41f --- /dev/null +++ b/src/go-proxy/docker.go @@ -0,0 +1,116 @@ +package go_proxy + +import ( + "fmt" + "log" + "net/url" + "reflect" + "sort" + "strings" + + mapset "github.com/deckarep/golang-set/v2" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" + "golang.org/x/net/context" + "golang.org/x/text/cases" + "golang.org/x/text/language" +) + +type Config struct { + Scheme string + Host string + Port string + Path string +} + +type Route struct { + Url *url.URL + Path string +} + +var dockerClient *client.Client +var subdomainRouteMap map[string]mapset.Set[Route] // subdomain -> path + +func buildContainerCfg(container types.Container) { + var aliases []string + + container_name := strings.TrimPrefix(container.Names[0], "/") + aliases_label, ok := container.Labels["proxy.aliases"] + if !ok { + aliases = []string{container_name} + } else { + aliases = strings.Split(aliases_label, ",") + } + + for _, alias := range aliases { + config := NewConfig() + prefix := fmt.Sprintf("proxy.%s.", alias) + for label, value := range container.Labels { + if strings.HasPrefix(label, prefix) { + field := strings.TrimPrefix(label, prefix) + field = cases.Title(language.Und, cases.NoLower).String(field) + prop := reflect.ValueOf(&config).Elem().FieldByName(field) + prop.Set(reflect.ValueOf(value)) + } + } + if config.Port == "" { + // usually the smaller port is the http one + // so make it the last one to be set (if 80 or 8080 are not exposed) + sort.Slice(container.Ports, func(i, j int) bool { + return container.Ports[i].PrivatePort > container.Ports[j].PrivatePort + }) + for _, port := range container.Ports { + // set first, but keep trying + config.Port = fmt.Sprintf("%d", port.PrivatePort) + // until we find 80 or 8080 + if port.PrivatePort == 80 || port.PrivatePort == 8080 { + break + } + } + } + if config.Port == "" { + // no ports exposed or specified + return + } + if config.Scheme == "" { + if strings.HasSuffix(config.Port, "443") { + config.Scheme = "https" + } else { + config.Scheme = "http" + } + } + if config.Scheme != "http" && config.Scheme != "https" { + log.Printf("%s: unsupported scheme: %s, using http", container_name, config.Scheme) + config.Scheme = "http" + } + if config.Host == "" { + if container.HostConfig.NetworkMode != "host" { + config.Host = container_name + } else { + config.Host = "host.docker.internal" + } + } + _, inMap := subdomainRouteMap[alias] + if !inMap { + subdomainRouteMap[alias] = mapset.NewSet[Route]() + } + url, err := url.Parse(fmt.Sprintf("%s://%s:%s", config.Scheme, config.Host, config.Port)) + if err != nil { + log.Fatal(err) + } + subdomainRouteMap[alias].Add(Route{Url: url, Path: config.Path}) + } +} + +func buildRoutes() { + subdomainRouteMap = make(map[string]mapset.Set[Route]) + containerSlice, err := dockerClient.ContainerList(context.Background(), container.ListOptions{}) + if err != nil { + log.Fatal(err) + } + for _, container := range containerSlice { + buildContainerCfg(container) + } + subdomainRouteMap["go-proxy"] = panelRoute +} diff --git a/main.go b/src/go-proxy/main.go similarity index 53% rename from main.go rename to src/go-proxy/main.go index e83f222..6c64d4e 100755 --- a/main.go +++ b/src/go-proxy/main.go @@ -1,4 +1,4 @@ -package main +package go_proxy import ( "fmt" @@ -7,35 +7,19 @@ import ( "net/http" "net/http/httputil" "net/url" - "reflect" "runtime" - "sort" "strings" "time" "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/client" "golang.org/x/net/context" - "golang.org/x/text/cases" - "golang.org/x/text/language" + + mapset "github.com/deckarep/golang-set/v2" ) -type Config struct { - Scheme string - Host string - Port string - Path string -} - -type Route struct { - Url url.URL - Path string -} - -var dockerClient *client.Client -var subdomainRouteMap map[string][]Route // subdomain -> path +var panelRoute = mapset.NewSet(Route{Url: &url.URL{Scheme: "http", Host: "localhost:81", Path: "/"}, Path: "/"}) // TODO: default + per proxy var transport = &http.Transport{ @@ -95,6 +79,13 @@ func main() { log.Fatal("HTTP server error", err) } }() + go func() { + log.Println("Starting HTTP panel on port 81") + err := http.ListenAndServe(":81", http.HandlerFunc(panelHandler)) + if err != nil { + log.Fatal("HTTP server error", err) + } + }() log.Println("Starting HTTPS server on port 443") err = http.ListenAndServeTLS(":443", "/certs/cert.crt", "/certs/priv.key", mux) if err != nil { @@ -122,13 +113,13 @@ func handler(w http.ResponseWriter, r *http.Request) { http.Error(w, fmt.Sprintf("no matching route for subdomain %s", subdomain), http.StatusNotFound) return } - for _, route := range routeMap { + for route := range routeMap.Iter() { if strings.HasPrefix(r.URL.Path, route.Path) { realPath := strings.TrimPrefix(r.URL.Path, route.Path) origHost := r.Host r.URL.Path = realPath log.Printf("[Route] %s -> %s%s ", origHost, route.Url.String(), route.Path) - proxyServer := httputil.NewSingleHostReverseProxy(&route.Url) + proxyServer := httputil.NewSingleHostReverseProxy(route.Url) proxyServer.Transport = transport proxyServer.ServeHTTP(w, r) return @@ -136,85 +127,3 @@ func handler(w http.ResponseWriter, r *http.Request) { } http.Error(w, fmt.Sprintf("no matching route for path %s for subdomain %s", r.URL.Path, subdomain), http.StatusNotFound) } - -func buildContainerCfg(container types.Container) { - var aliases []string - - container_name := strings.TrimPrefix(container.Names[0], "/") - aliases_label, ok := container.Labels["proxy.aliases"] - if !ok { - aliases = []string{container_name} - } else { - aliases = strings.Split(aliases_label, ",") - } - - for _, alias := range aliases { - config := NewConfig() - prefix := fmt.Sprintf("proxy.%s.", alias) - for label, value := range container.Labels { - if strings.HasPrefix(label, prefix) { - field := strings.TrimPrefix(label, prefix) - field = cases.Title(language.Und, cases.NoLower).String(field) - prop := reflect.ValueOf(&config).Elem().FieldByName(field) - prop.Set(reflect.ValueOf(value)) - } - } - if config.Port == "" { - // usually the smaller port is the http one - // so make it the last one to be set (if 80 or 8080 are not exposed) - sort.Slice(container.Ports, func(i, j int) bool { - return container.Ports[i].PrivatePort > container.Ports[j].PrivatePort - }) - for _, port := range container.Ports { - // set first, but keep trying - config.Port = fmt.Sprintf("%d", port.PrivatePort) - // until we find 80 or 8080 - if port.PrivatePort == 80 || port.PrivatePort == 8080 { - break - } - } - } - if config.Port == "" { - // no ports exposed or specified - return - } - if config.Scheme == "" { - if strings.HasSuffix(config.Port, "443") { - config.Scheme = "https" - } else { - config.Scheme = "http" - } - } - if config.Scheme != "http" && config.Scheme != "https" { - log.Printf("%s: unsupported scheme: %s, using http", container_name, config.Scheme) - config.Scheme = "http" - } - if config.Host == "" { - if container.HostConfig.NetworkMode != "host" { - config.Host = container_name - } else { - config.Host = "host.docker.internal" - } - } - _, inMap := subdomainRouteMap[alias] - if !inMap { - subdomainRouteMap[alias] = make([]Route, 0) - } - url, err := url.Parse(fmt.Sprintf("%s://%s:%s", config.Scheme, config.Host, config.Port)) - if err != nil { - log.Fatal(err) - } - route := Route{Url: *url, Path: config.Path} - subdomainRouteMap[alias] = append(subdomainRouteMap[alias], route) - } -} -func buildRoutes() { - subdomainRouteMap = make(map[string][]Route) - containerSlice, err := dockerClient.ContainerList(context.Background(), container.ListOptions{}) - if err != nil { - log.Fatal(err) - } - for _, container := range containerSlice { - buildContainerCfg(container) - } -} diff --git a/src/go-proxy/panel.go b/src/go-proxy/panel.go new file mode 100644 index 0000000..8a90124 --- /dev/null +++ b/src/go-proxy/panel.go @@ -0,0 +1,80 @@ +package go_proxy + +import ( + "html/template" + "net/http" + "time" +) + +const templateFile = "/app/templates/panel.html" + +var healthCheckHttpClient = &http.Client{ + Timeout: 5 * time.Second, + Transport: &http.Transport{ + DisableKeepAlives: true, + }, +} + +func panelHandler(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/": + panelIndex(w, r) + return + case "/checkhealth": + panelCheckTargetHealth(w, r) + return + default: + http.NotFound(w, r) + return + } +} + +func panelIndex(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + + tmpl, err := template.ParseFiles(templateFile) + + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + err = tmpl.Execute(w, subdomainRouteMap) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + +func panelCheckTargetHealth(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodHead { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + return + } + + targetUrl := r.URL.Query().Get("target") + + if targetUrl == "" { + http.Error(w, "target is required", http.StatusBadRequest) + return + } + + // try HEAD first + // if HEAD is not allowed, try GET + resp, err := healthCheckHttpClient.Head(targetUrl) + if err != nil && resp != nil && resp.StatusCode == http.StatusMethodNotAllowed { + _, err = healthCheckHttpClient.Get(targetUrl) + if err != nil { + http.Error(w, err.Error(), http.StatusServiceUnavailable) + return + } + } + if err != nil { + http.Error(w, err.Error(), http.StatusServiceUnavailable) + return + } + + w.WriteHeader(http.StatusOK) +} diff --git a/templates/panel.html b/templates/panel.html new file mode 100644 index 0000000..5f35c97 --- /dev/null +++ b/templates/panel.html @@ -0,0 +1,116 @@ + + + + + + + + + Route Panel + + + + +
+

Route Panel

+ + + + + + + + + + + {{range $subdomain, $routes := .}} + {{range $route := $routes.Iter}} + + + + + + + {{end}} + {{end}} + +
SubdomainPathURLHealth
{{$subdomain}}{{$route.Path}}{{$route.Url.String}} +
+
+
+ + + \ No newline at end of file