mirror of
https://github.com/cubixle/groxy.git
synced 2026-04-24 19:54:44 +01:00
adds ability to override defaults with env vars, adds debug to config and updates readme.
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user