mirror of
https://github.com/m1k1o/neko-rooms.git
synced 2026-11-02 22:51:34 -06:00
traefik enabled.
This commit is contained in:
+31
-17
@@ -13,6 +13,15 @@ import (
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
type Traefik struct {
|
||||
Enabled bool
|
||||
Domain string
|
||||
Entrypoint string
|
||||
Certresolver string
|
||||
Network string
|
||||
Port string // deprecated
|
||||
}
|
||||
|
||||
type Room struct {
|
||||
Mux bool
|
||||
EprMin uint16
|
||||
@@ -33,12 +42,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
|
||||
TraefikNetwork string
|
||||
TraefikPort string // deprecated
|
||||
Traefik Traefik
|
||||
}
|
||||
|
||||
func (Room) Init(cmd *cobra.Command) error {
|
||||
@@ -125,6 +129,11 @@ func (Room) Init(cmd *cobra.Command) error {
|
||||
|
||||
// Traefik
|
||||
|
||||
cmd.PersistentFlags().Bool("traefik.enabled", true, "traefik: enabled or disabled")
|
||||
if err := viper.BindPFlag("traefik.enabled", cmd.PersistentFlags().Lookup("traefik.enabled")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd.PersistentFlags().String("traefik.domain", "", "traefik: domain on which will be container hosted (if empty or '*', match all; for neko-rooms as subdomain use '*.domain.tld')")
|
||||
if err := viper.BindPFlag("traefik.domain", cmd.PersistentFlags().Lookup("traefik.domain")); err != nil {
|
||||
return err
|
||||
@@ -225,14 +234,15 @@ func (s *Room) Set() {
|
||||
}
|
||||
}
|
||||
|
||||
s.TraefikDomain = viper.GetString("traefik.domain")
|
||||
s.TraefikEntrypoint = viper.GetString("traefik.entrypoint")
|
||||
s.TraefikCertresolver = viper.GetString("traefik.certresolver")
|
||||
s.TraefikNetwork = viper.GetString("traefik.network")
|
||||
s.Traefik.Enabled = viper.GetBool("traefik.enabled")
|
||||
s.Traefik.Domain = viper.GetString("traefik.domain")
|
||||
s.Traefik.Entrypoint = viper.GetString("traefik.entrypoint")
|
||||
s.Traefik.Certresolver = viper.GetString("traefik.certresolver")
|
||||
s.Traefik.Network = viper.GetString("traefik.network")
|
||||
|
||||
// deprecated
|
||||
s.TraefikPort = viper.GetString("traefik.port")
|
||||
if s.TraefikPort != "" {
|
||||
s.Traefik.Port = viper.GetString("traefik.port")
|
||||
if s.Traefik.Port != "" {
|
||||
if s.InstanceUrl != nil {
|
||||
log.Warn().Msg("deprecated `traefik.port` config item is ignored when `instance.url` is set")
|
||||
} else {
|
||||
@@ -252,17 +262,21 @@ func (s *Room) GetInstanceUrl() url.URL {
|
||||
Path: "/",
|
||||
}
|
||||
|
||||
if s.TraefikCertresolver != "" {
|
||||
if !s.Traefik.Enabled {
|
||||
return instanceUrl
|
||||
}
|
||||
|
||||
if s.Traefik.Certresolver != "" {
|
||||
instanceUrl.Scheme = "https"
|
||||
}
|
||||
|
||||
if s.TraefikDomain != "" && s.TraefikDomain != "*" {
|
||||
instanceUrl.Host = s.TraefikDomain
|
||||
if s.Traefik.Domain != "" && s.Traefik.Domain != "*" {
|
||||
instanceUrl.Host = s.Traefik.Domain
|
||||
}
|
||||
|
||||
// deprecated
|
||||
if s.TraefikPort != "" {
|
||||
instanceUrl.Host += ":" + s.TraefikPort
|
||||
if s.Traefik.Port != "" {
|
||||
instanceUrl.Host += ":" + s.Traefik.Port
|
||||
}
|
||||
|
||||
return instanceUrl
|
||||
|
||||
@@ -13,7 +13,6 @@ type Server struct {
|
||||
Proxy bool
|
||||
PProf bool
|
||||
|
||||
InternalProxy bool
|
||||
AdminPathPrefix string
|
||||
}
|
||||
|
||||
@@ -48,12 +47,6 @@ func (Server) Init(cmd *cobra.Command) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// WIP.
|
||||
cmd.PersistentFlags().Bool("internal_proxy", false, "use internal proxy instead of traefik")
|
||||
if err := viper.BindPFlag("internal_proxy", cmd.PersistentFlags().Lookup("internal_proxy")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cmd.PersistentFlags().String("admin_path_prefix", "/", "set custom path prefix for admin")
|
||||
if err := viper.BindPFlag("admin_path_prefix", cmd.PersistentFlags().Lookup("admin_path_prefix")); err != nil {
|
||||
return err
|
||||
@@ -70,6 +63,5 @@ func (s *Server) Set() {
|
||||
s.Proxy = viper.GetBool("proxy")
|
||||
s.PProf = viper.GetBool("pprof")
|
||||
|
||||
s.InternalProxy = viper.GetBool("internal_proxy")
|
||||
s.AdminPathPrefix = viper.GetString("admin_path_prefix")
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ func (manager *RoomManagerCtx) serializeLabels(labels RoomLabels) map[string]str
|
||||
}
|
||||
|
||||
// Only when using traefik is the URL fixed with the room itself and not with neko-rooms.
|
||||
if manager.config.TraefikEnabled {
|
||||
if manager.config.Traefik.Enabled {
|
||||
labelsMap["m1k1o.neko_rooms.url"] = manager.config.GetRoomUrl(labels.Name)
|
||||
}
|
||||
|
||||
|
||||
+14
-11
@@ -180,21 +180,21 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
|
||||
// Set traefik labels
|
||||
//
|
||||
|
||||
if manager.config.TraefikEnabled {
|
||||
if t := manager.config.Traefik; t.Enabled {
|
||||
pathPrefix := path.Join("/", manager.config.PathPrefix, roomName)
|
||||
|
||||
// create traefik rule
|
||||
traefikRule := "PathPrefix(`" + pathPrefix + "`)"
|
||||
if manager.config.TraefikDomain != "" && manager.config.TraefikDomain != "*" {
|
||||
if t.Domain != "" && t.Domain != "*" {
|
||||
// match *.domain.tld as subdomain
|
||||
if strings.HasPrefix(manager.config.TraefikDomain, "*.") {
|
||||
if strings.HasPrefix(t.Domain, "*.") {
|
||||
traefikRule = fmt.Sprintf(
|
||||
"Host(`%s.%s`)",
|
||||
roomName,
|
||||
strings.TrimPrefix(manager.config.TraefikDomain, "*."),
|
||||
strings.TrimPrefix(t.Domain, "*."),
|
||||
)
|
||||
} else {
|
||||
traefikRule += " && Host(`" + manager.config.TraefikDomain + "`)"
|
||||
traefikRule += " && Host(`" + t.Domain + "`)"
|
||||
}
|
||||
} else {
|
||||
traefikRule += " && HostRegexp(`{host:.+}`)"
|
||||
@@ -202,7 +202,7 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
|
||||
|
||||
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+".entrypoints"] = t.Entrypoint
|
||||
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 + "/"
|
||||
@@ -211,9 +211,9 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
|
||||
labels["traefik.http.routers."+containerName+".service"] = containerName + "-frontend"
|
||||
|
||||
// optional HTTPS
|
||||
if manager.config.TraefikCertresolver != "" {
|
||||
if t.Certresolver != "" {
|
||||
labels["traefik.http.routers."+containerName+".tls"] = "true"
|
||||
labels["traefik.http.routers."+containerName+".tls.certresolver"] = manager.config.TraefikCertresolver
|
||||
labels["traefik.http.routers."+containerName+".tls.certresolver"] = t.Certresolver
|
||||
}
|
||||
} else {
|
||||
labels["m1k1o.neko_rooms.host"] = fmt.Sprintf("%s:%d", containerName, frontendPort)
|
||||
@@ -224,8 +224,11 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
|
||||
// replace dynamic values in labels
|
||||
label = strings.Replace(label, "{containerName}", containerName, -1)
|
||||
label = strings.Replace(label, "{roomName}", roomName, -1)
|
||||
label = strings.Replace(label, "{traefikEntrypoint}", manager.config.TraefikEntrypoint, -1)
|
||||
label = strings.Replace(label, "{traefikCertresolver}", manager.config.TraefikCertresolver, -1)
|
||||
|
||||
if t := manager.config.Traefik; t.Enabled {
|
||||
label = strings.Replace(label, "{traefikEntrypoint}", t.Entrypoint, -1)
|
||||
label = strings.Replace(label, "{traefikCertresolver}", t.Certresolver, -1)
|
||||
}
|
||||
|
||||
v := strings.SplitN(label, "=", 2)
|
||||
if len(v) != 2 {
|
||||
@@ -434,7 +437,7 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
|
||||
|
||||
networkingConfig := &network.NetworkingConfig{
|
||||
EndpointsConfig: map[string]*network.EndpointSettings{
|
||||
manager.config.TraefikNetwork: {},
|
||||
manager.config.Traefik.Network: {}, // TODO: Refactor if not using traefik.
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ type ServerManagerCtx struct {
|
||||
config *config.Server
|
||||
}
|
||||
|
||||
func New(ApiManager types.ApiManager, pathPrefix string, config *config.Server, proxyHandler http.Handler) *ServerManagerCtx {
|
||||
func New(ApiManager types.ApiManager, roomConfig *config.Room, config *config.Server, proxyHandler http.Handler) *ServerManagerCtx {
|
||||
logger := log.With().Str("module", "server").Logger()
|
||||
|
||||
router := chi.NewRouter()
|
||||
@@ -72,8 +72,8 @@ func New(ApiManager types.ApiManager, pathPrefix string, config *config.Server,
|
||||
})
|
||||
|
||||
// rooms page
|
||||
router.Route(pathPrefix, func(r chi.Router) {
|
||||
if config.InternalProxy {
|
||||
router.Route(roomConfig.PathPrefix, func(r chi.Router) {
|
||||
if !roomConfig.Traefik.Enabled {
|
||||
r.Handle("/*", proxyHandler)
|
||||
} else {
|
||||
// add simple lobby room
|
||||
|
||||
Reference in New Issue
Block a user