diff --git a/Dockerfile b/Dockerfile index e57d356..cd5ea21 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,11 +6,6 @@ RUN make FROM ubuntu as base COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ COPY --from=build /app/bin/mproxy /usr/local/bin/ +EXPOSE 80 443 -ENV HTTP_PORT=80 -ENV HTTPS_PORT=443 -ENV DEBUG=false - -EXPOSE $HTTP_PORT $HTTPS_PORT - -CMD mproxy run --http-port=${HTTP_PORT} --https-port=${HTTPS_PORT} --debug=${DEBUG} +CMD [ "mproxy", "run" ] diff --git a/internal/cmd/run.go b/internal/cmd/run.go index 88efa66..59c44e8 100644 --- a/internal/cmd/run.go +++ b/internal/cmd/run.go @@ -24,9 +24,9 @@ func newRunCommand() *runCommand { RunE: runCommand.run, } - runCommand.cmd.Flags().BoolVar(&runCommand.debugLogsEnabled, "debug", false, "Include debugging logs") - runCommand.cmd.Flags().IntVar(&globalConfig.HttpPort, "http-port", server.DefaultHttpPort, "Port to serve HTTP traffic on") - runCommand.cmd.Flags().IntVar(&globalConfig.HttpsPort, "https-port", server.DefaultHttpsPort, "Port to serve HTTPS traffic on") + runCommand.cmd.Flags().BoolVar(&runCommand.debugLogsEnabled, "debug", getEnvBool("DEBUG", false), "Include debugging logs") + runCommand.cmd.Flags().IntVar(&globalConfig.HttpPort, "http-port", getEnvInt("HTTP_PORT", server.DefaultHttpPort), "Port to serve HTTP traffic on") + runCommand.cmd.Flags().IntVar(&globalConfig.HttpsPort, "https-port", getEnvInt("HTTPS_PORT", server.DefaultHttpsPort), "Port to serve HTTPS traffic on") return runCommand } diff --git a/internal/cmd/util.go b/internal/cmd/util.go index 7efcc58..84ed4f9 100644 --- a/internal/cmd/util.go +++ b/internal/cmd/util.go @@ -2,6 +2,12 @@ package cmd import ( "net/rpc" + "os" + "strconv" +) + +const ( + ENV_PREFIX = "MPROXY_" ) func withRPCClient(socketPath string, fn func(client *rpc.Client) error) error { @@ -12,3 +18,45 @@ func withRPCClient(socketPath string, fn func(client *rpc.Client) error) error { defer client.Close() return fn(client) } + +func findEnv(key string) (string, bool) { + value, ok := os.LookupEnv(ENV_PREFIX + key) + if ok { + return value, true + } + + value, ok = os.LookupEnv(key) + if ok { + return value, true + } + + return "", false +} + +func getEnvInt(key string, defaultValue int) int { + value, ok := findEnv(key) + if !ok { + return defaultValue + } + + intValue, err := strconv.Atoi(value) + if err != nil { + return defaultValue + } + + return intValue +} + +func getEnvBool(key string, defaultValue bool) bool { + value, ok := findEnv(key) + if !ok { + return defaultValue + } + + boolValue, err := strconv.ParseBool(value) + if err != nil { + return defaultValue + } + + return boolValue +}