traefik enable in config.

This commit is contained in:
Miroslav Šedivý
2022-07-31 18:47:23 +02:00
parent 91805fcaab
commit bb97bb75d2
4 changed files with 53 additions and 53 deletions
+1
View File
@@ -33,6 +33,7 @@ type Room struct {
InstanceName string
InstanceUrl *url.URL
TraefikEnabled bool // TODO: now set from Server config, needed refactor
TraefikDomain string
TraefikEntrypoint string
TraefikCertresolver string
+6 -9
View File
@@ -73,8 +73,7 @@ func (p *ProxyManagerCtx) Start() {
case err := <-errs:
p.logger.Info().Interface("err", err).Msg("eee")
case msg := <-msgs:
host := msg.ID[:12]
name, port, ok := p.parseLabels(msg.Actor.Attributes)
name, host, ok := p.parseLabels(msg.Actor.Attributes)
if !ok {
break
}
@@ -92,7 +91,7 @@ func (p *ProxyManagerCtx) Start() {
case "start":
p.handlers[name] = httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http",
Host: host + ":" + port,
Host: host,
})
case "stop":
p.handlers[name] = nil
@@ -128,16 +127,15 @@ func (p *ProxyManagerCtx) Refresh() error {
p.handlers = map[string]*httputil.ReverseProxy{}
for _, cont := range containers {
name, port, ok := p.parseLabels(cont.Labels)
name, host, ok := p.parseLabels(cont.Labels)
if !ok {
continue
}
if cont.State == "running" {
host := cont.ID[:12]
p.handlers[name] = httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http",
Host: host + ":" + port,
Host: host,
})
} else {
p.handlers[name] = nil
@@ -147,14 +145,13 @@ func (p *ProxyManagerCtx) Refresh() error {
return nil
}
func (p *ProxyManagerCtx) parseLabels(labels map[string]string) (name string, port string, ok bool) {
func (p *ProxyManagerCtx) parseLabels(labels map[string]string) (name string, host string, ok bool) {
name, ok = labels["m1k1o.neko_rooms.name"]
if !ok {
return
}
// TODO: Do not use trafik for this.
port, ok = labels["traefik.http.services.neko-rooms-"+name+"-frontend.loadbalancer.server.port"]
host, ok = labels["m1k1o.neko_rooms.host"]
return
}
+43 -44
View File
@@ -112,6 +112,8 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
}
}
containerName := manager.config.InstanceName + "-" + roomName
//
// Allocate ports
//
@@ -154,48 +156,6 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
exposedPorts[port] = struct{}{}
}
//
// Set traefik labels
//
containerName := manager.config.InstanceName + "-" + roomName
pathPrefix := path.Join("/", manager.config.PathPrefix, roomName)
// create traefik rule
traefikRule := "PathPrefix(`" + pathPrefix + "`)"
if manager.config.TraefikDomain != "" && manager.config.TraefikDomain != "*" {
// match *.domain.tld as subdomain
if strings.HasPrefix(manager.config.TraefikDomain, "*.") {
traefikRule = fmt.Sprintf(
"Host(`%s.%s`)",
roomName,
strings.TrimPrefix(manager.config.TraefikDomain, "*."),
)
} else {
traefikRule += " && Host(`" + manager.config.TraefikDomain + "`)"
}
} else {
traefikRule += " && HostRegexp(`{host:.+}`)"
}
traefikLabels := map[string]string{
"traefik.enable": "true",
"traefik.http.services." + containerName + "-frontend.loadbalancer.server.port": fmt.Sprintf("%d", frontendPort),
"traefik.http.routers." + containerName + ".entrypoints": manager.config.TraefikEntrypoint,
"traefik.http.routers." + containerName + ".rule": traefikRule,
"traefik.http.middlewares." + containerName + "-rdr.redirectregex.regex": pathPrefix + "$$",
"traefik.http.middlewares." + containerName + "-rdr.redirectregex.replacement": pathPrefix + "/",
"traefik.http.middlewares." + containerName + "-prf.stripprefix.prefixes": pathPrefix + "/",
"traefik.http.routers." + containerName + ".middlewares": containerName + "-rdr," + containerName + "-prf",
"traefik.http.routers." + containerName + ".service": containerName + "-frontend",
}
// optional HTTPS
if manager.config.TraefikCertresolver != "" {
traefikLabels["traefik.http.routers."+containerName+".tls"] = "true"
traefikLabels["traefik.http.routers."+containerName+".tls.certresolver"] = manager.config.TraefikCertresolver
}
//
// Set internal labels
//
@@ -217,8 +177,47 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
BrowserPolicy: browserPolicyLabels,
})
for k, v := range traefikLabels {
labels[k] = v
//
// Set traefik labels
//
if manager.config.TraefikEnabled {
pathPrefix := path.Join("/", manager.config.PathPrefix, roomName)
// create traefik rule
traefikRule := "PathPrefix(`" + pathPrefix + "`)"
if manager.config.TraefikDomain != "" && manager.config.TraefikDomain != "*" {
// match *.domain.tld as subdomain
if strings.HasPrefix(manager.config.TraefikDomain, "*.") {
traefikRule = fmt.Sprintf(
"Host(`%s.%s`)",
roomName,
strings.TrimPrefix(manager.config.TraefikDomain, "*."),
)
} else {
traefikRule += " && Host(`" + manager.config.TraefikDomain + "`)"
}
} else {
traefikRule += " && HostRegexp(`{host:.+}`)"
}
labels["traefik.enable"] = "true"
labels["traefik.http.services."+containerName+"-frontend.loadbalancer.server.port"] = fmt.Sprintf("%d", frontendPort)
labels["traefik.http.routers."+containerName+".entrypoints"] = manager.config.TraefikEntrypoint
labels["traefik.http.routers."+containerName+".rule"] = traefikRule
labels["traefik.http.middlewares."+containerName+"-rdr.redirectregex.regex"] = pathPrefix + "$$"
labels["traefik.http.middlewares."+containerName+"-rdr.redirectregex.replacement"] = pathPrefix + "/"
labels["traefik.http.middlewares."+containerName+"-prf.stripprefix.prefixes"] = pathPrefix + "/"
labels["traefik.http.routers."+containerName+".middlewares"] = containerName + "-rdr," + containerName + "-prf"
labels["traefik.http.routers."+containerName+".service"] = containerName + "-frontend"
// optional HTTPS
if manager.config.TraefikCertresolver != "" {
labels["traefik.http.routers."+containerName+".tls"] = "true"
labels["traefik.http.routers."+containerName+".tls.certresolver"] = manager.config.TraefikCertresolver
}
} else {
labels["m1k1o.neko_rooms.host"] = fmt.Sprintf("%s:%d", containerName, frontendPort)
}
// add custom labels