diff --git a/coolify/proxy/caddy/service-man/main.go b/coolify/proxy/caddy/service-man/main.go index 32dd7e9..8d19e27 100644 --- a/coolify/proxy/caddy/service-man/main.go +++ b/coolify/proxy/caddy/service-man/main.go @@ -31,6 +31,7 @@ type Config struct { // Template for generating Caddy configuration const caddyTemplate = `{{- range $service := .Services -}} {{ join $service.Domains " " }} { +{{- if $service.IPRange }} @lan { remote_ip {{ $service.IPRange }} } @@ -40,6 +41,11 @@ const caddyTemplate = `{{- range $service := .Services -}} handle { respond "Njet Molotoff" 403 } +{{- else }} + handle { + reverse_proxy {{ $service.Backend }} + } +{{- end }} } {{ end }}` @@ -111,15 +117,12 @@ func loadConfig(filename string) (*Config, error) { } func validateConfig(config *Config) error { - // Validate IP ranges are defined for filename, fileConfig := range config.Files { for i, service := range fileConfig.Services { - if service.IPRange == "" { - return fmt.Errorf("service %d in file %s has no IP range specified", i+1, filename) - } - - if _, exists := config.IPRanges[service.IPRange]; !exists { - return fmt.Errorf("IP range '%s' not defined for service %d in file %s", service.IPRange, i+1, filename) + if service.IPRange != "" { + if _, exists := config.IPRanges[service.IPRange]; !exists { + return fmt.Errorf("IP range '%s' not defined for service %d in file %s", service.IPRange, i+1, filename) + } } if len(service.Domains) == 0 { @@ -249,10 +252,15 @@ func generateCaddyContent(fileConfig FileConfig, ipRanges map[string]string) (st logger.Trace("Resolving service %d: domains=%v, backend=%s, ip_range=%s", i, service.Domains, service.Backend, service.IPRange) + resolvedIPRange := "" + if service.IPRange != "" { + resolvedIPRange = ipRanges[service.IPRange] + } + templateData.Services[i] = ServiceConfig{ Domains: service.Domains, Backend: service.Backend, - IPRange: ipRanges[service.IPRange], + IPRange: resolvedIPRange, } }