adds ability to override defaults with env vars, adds debug to config and updates readme.

This commit is contained in:
cubixle
2022-04-20 21:57:59 +01:00
parent d76f4562dd
commit 97cad0fb2b
4 changed files with 29 additions and 12 deletions

View File

@@ -2,13 +2,14 @@
Groxy is a lightweight, simple HTTP reverse proxy written in golang. Groxy is a lightweight, simple HTTP reverse proxy written in golang.
Groxy was built to run in a docker container so is setup by default to listen on port 80. Groxy was built to run on port 8080 by default. This can be changed with the the `GROXY_PORT` environment variable.
## Config ## Config
The config for groxy is very simple and will hopefully always be simple. The config for groxy is very simple and will hopefully always be simple.
```yaml ```yaml
debug: false
endpoints: endpoints:
- addr: pihole.test - addr: pihole.test
remote_addr: "192.168.1.2:8017" remote_addr: "192.168.1.2:8017"
@@ -16,6 +17,8 @@ endpoints:
remote_addr: "192.168.1.2:9091" remote_addr: "192.168.1.2:9091"
``` ```
By Default groxy will try and read a `groxy.yml` file from its current working directory. To override this you can use the environment variable `GROXY_CONFIG_FILE`.
## Metrics ## Metrics
There are a bunch of different metrics that can be found on port 9090. There are a bunch of different metrics that can be found on port 9090.

View File

@@ -14,7 +14,9 @@ import (
) )
func main() { func main() {
data, err := os.ReadFile("./groxy.yml") cfgFile := getEnvVar("GROXY_CONFIG_FILE", "./groxy.yml")
data, err := os.ReadFile(cfgFile)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
@@ -26,19 +28,30 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
logger := logging.Logger() logger := logging.Logger(eps.Debug)
defer logger.Sync() defer logger.Sync()
handler := reverseproxy.NewReverseProxy(eps.Endpoints, logger) handler := reverseproxy.NewReverseProxy(eps.Endpoints, logger)
go func() { go func() {
logger.Debug("starting metrics server") logger.Info("starting metrics server")
if err := http.ListenAndServe("localhost:9090", promhttp.Handler()); err != nil { port := getEnvVar("GROXY_METRICS_PORT", "9090")
if err := http.ListenAndServe(":"+port, promhttp.Handler()); err != nil {
log.Fatal(err) log.Fatal(err)
} }
}() }()
logger.Debug("starting reverse proxy") port := getEnvVar("GROXY_PORT", "8080")
if err := http.ListenAndServe("localhost:8080", handler); err != nil { logger.Info("starting reverse proxy")
if err := http.ListenAndServe(":"+port, handler); err != nil {
log.Fatal("ListenAndServe:", err) log.Fatal("ListenAndServe:", err)
} }
} }
func getEnvVar(name, defaultValue string) string {
v := os.Getenv(name)
if v == "" {
return defaultValue
}
return v
}

View File

@@ -7,11 +7,11 @@ import (
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
) )
func Logger() *zap.Logger { func Logger(debug bool) *zap.Logger {
// info level enabler level := zapcore.InfoLevel
level := zap.LevelEnablerFunc(func(level zapcore.Level) bool { if debug {
return level == zapcore.DebugLevel level = zapcore.DebugLevel
}) }
// write syncers // write syncers
stdoutSyncer := zapcore.Lock(os.Stdout) stdoutSyncer := zapcore.Lock(os.Stdout)

View File

@@ -19,6 +19,7 @@ type Proxy struct {
} }
type File struct { type File struct {
Debug bool `yaml:"debug"`
Endpoints []Endpoint `yaml:"endpoints"` Endpoints []Endpoint `yaml:"endpoints"`
} }