add INSTANCE_URL.

This commit is contained in:
m1k1o
2021-04-07 19:50:06 +02:00
parent 695151a207
commit 737dcc3e75
4 changed files with 41 additions and 16 deletions
+3 -3
View File
@@ -31,10 +31,10 @@ You only need `.env.example`, `docker-compose.yml` and `traefik/`.
#### Do I need to use traefik?
- Traefik needs to be used to forward traffic to the rooms. You can put nginx in front of it, but not replace it.
- Your domain name specified for traefik must match domain name, that your proxy connects to.
- Currently, there is no support for custom paths. You cannot host your `neko-rooms` on `example.com/neko-rooms/` but it needs own subdomain e.g. `neko-rooms.example.com`.
- Your domain name specified for traefik must match domain name, that your proxy connects to. In docker-compose it is service name.
- See example configuration for [nginx](docs/nginx).
You can use `docker-compose.http.yml` that will expose this service to `APP_PORT`. See example configuration for [nginx](docs/nginx).
You can use `docker-compose.http.yml` that will expose this service to `8080` or any port.
### Step 1
+3 -3
View File
@@ -16,9 +16,9 @@ services:
- "--providers.docker.watch=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=${NEKO_ROOMS_TRAEFIK_NETWORK}"
- "--entrypoints.${NEKO_ROOMS_TRAEFIK_ENTRYPOINT}.address=:${APP_PORT-8080}"
- "--entrypoints.${NEKO_ROOMS_TRAEFIK_ENTRYPOINT}.address=:80"
ports:
- "${APP_PORT-8080}:${APP_PORT-8080}"
- "8080:80"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
@@ -32,7 +32,7 @@ services:
- "NEKO_ROOMS_TRAEFIK_DOMAIN"
- "NEKO_ROOMS_TRAEFIK_ENTRYPOINT"
- "NEKO_ROOMS_TRAEFIK_NETWORK"
- "NEKO_ROOMS_TRAEFIK_PORT=${APP_PORT-8080}"
- "NEKO_ROOMS_INSTANCE_URL=http://${NEKO_ROOMS_TRAEFIK_DOMAIN}:8080/" # external URL
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
labels:
+19 -2
View File
@@ -4,6 +4,7 @@ import (
"strconv"
"strings"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
"github.com/spf13/viper"
@@ -17,12 +18,13 @@ type Room struct {
NekoImages []string
InstanceName string
InstanceUrl string
TraefikDomain string
TraefikEntrypoint string
TraefikCertresolver string
TraefikNetwork string
TraefikPort string
TraefikPort string // deprecated
}
func (Room) Init(cmd *cobra.Command) error {
@@ -46,6 +48,11 @@ func (Room) Init(cmd *cobra.Command) error {
return err
}
cmd.PersistentFlags().String("instance_url", "", "instance url that is prefixing room names (if different from `http(s)://{traefik_domain}/`)")
if err := viper.BindPFlag("instance_url", cmd.PersistentFlags().Lookup("instance_url")); err != nil {
return err
}
cmd.PersistentFlags().String("traefik_domain", "neko.lan", "traefik: domain on which will be container hosted")
if err := viper.BindPFlag("traefik_domain", cmd.PersistentFlags().Lookup("traefik_domain")); err != nil {
return err
@@ -66,7 +73,7 @@ func (Room) Init(cmd *cobra.Command) error {
return err
}
cmd.PersistentFlags().String("traefik_port", "", "traefik: external port (if different than 80 or 443)")
cmd.PersistentFlags().String("traefik_port", "", "traefik: external port (deprecated)")
if err := viper.BindPFlag("traefik_port", cmd.PersistentFlags().Lookup("traefik_port")); err != nil {
return err
}
@@ -111,10 +118,20 @@ func (s *Room) Set() {
s.NekoImages = viper.GetStringSlice("neko_images")
s.InstanceName = viper.GetString("instance_name")
s.InstanceUrl = viper.GetString("instance_url")
s.TraefikDomain = viper.GetString("traefik_domain")
s.TraefikEntrypoint = viper.GetString("traefik_entrypoint")
s.TraefikCertresolver = viper.GetString("traefik_certresolver")
s.TraefikNetwork = viper.GetString("traefik_network")
// deprecated
s.TraefikPort = viper.GetString("traefik_port")
if s.TraefikPort != "" {
if s.InstanceUrl != "" {
log.Warn().Msg("deprecated `traefik_port` config item is ignored when `instance_url` is set")
} else {
log.Warn().Msg("you are using deprecated `traefik_port` config item, you should consider moving to `instance_url`")
}
}
}
+16 -8
View File
@@ -122,20 +122,28 @@ func (manager *RoomManagerCtx) Create(settings types.RoomSettings) (string, erro
containerName := manager.config.InstanceName + "-" + roomName
urlProto := "http"
if manager.config.TraefikCertresolver != "" {
urlProto = "https"
}
instanceUrl := manager.config.InstanceUrl
if instanceUrl == "" {
urlProto := "http"
if manager.config.TraefikCertresolver != "" {
urlProto = "https"
}
port := ""
if manager.config.TraefikPort != "" {
port = ":" + manager.config.TraefikPort
// deprecated
port := ""
if manager.config.TraefikPort != "" {
port = ":" + manager.config.TraefikPort
}
instanceUrl = urlProto + "://" + manager.config.TraefikDomain + port + "/"
} else if !strings.HasSuffix(instanceUrl, "/") {
instanceUrl = instanceUrl + "/"
}
labels := map[string]string{
// Set internal labels
"m1k1o.neko_rooms.name": roomName,
"m1k1o.neko_rooms.url": urlProto + "://" + manager.config.TraefikDomain + port + "/" + roomName + "/",
"m1k1o.neko_rooms.url": instanceUrl + roomName + "/",
"m1k1o.neko_rooms.instance": manager.config.InstanceName,
"m1k1o.neko_rooms.epr.min": fmt.Sprintf("%d", epr.Min),
"m1k1o.neko_rooms.epr.max": fmt.Sprintf("%d", epr.Max),