diff --git a/deployment/docker/docker-compose.yml b/deployment/docker/docker-compose.yml index 1d5b8878da..9af1e0de4d 100644 --- a/deployment/docker/docker-compose.yml +++ b/deployment/docker/docker-compose.yml @@ -12,30 +12,29 @@ services: SCRUMLR_SERVER_NATS_URL: "${SCRUMLR_SERVER_NATS_URL}" SCRUMLR_PRIVATE_KEY: "${SCRUMLR_PRIVATE_KEY}" SCRUMLR_SERVER_DATABASE_URL: "postgres://scrumlr:${POSTGRES_PASSWORD}@postgres:5432/scrumlr?sslmode=disable" - # SCRUMLR_AUTH_GOOGLE_CLIENT_ID: "${GOOGLE_CLIENT_ID}" - # SCRUMLR_AUTH_GOOGLE_CLIENT_SECRET: "${GOOGLE_CLIENT_SECRET}" - # SCRUMLR_AUTH_MICROSOFT_CLIENT_ID: "${MICROSOFT_CLIENT_ID}" - # SCRUMLR_AUTH_MICROSOFT_CLIENT_SECRET: "${MICROSOFT_CLIENT_SECRET}" + SCRUMLR_AUTH_GOOGLE_CLIENT_ID: "${GOOGLE_CLIENT_ID}" + SCRUMLR_AUTH_GOOGLE_CLIENT_SECRET: "${GOOGLE_CLIENT_SECRET}" + SCRUMLR_AUTH_MICROSOFT_CLIENT_ID: "${MICROSOFT_CLIENT_ID}" + SCRUMLR_AUTH_MICROSOFT_CLIENT_SECRET: "${MICROSOFT_CLIENT_SECRET}" SCRUMLR_FEEDBACK_WEBHOOK_URL: "${WEBHOOK_URL}" SCRUMLR_BASE_PATH: "${SCRUMLR_BASE_PATH}" SCRUMLR_INSECURE: "${SCRUMLR_INSECURE}" SCRUMLR_AUTH_CALLBACK_HOST: "${AUTH_CALLBACK_HOST}" - # SCRUMLR_AUTH_GITHUB_CLIENT_ID: "${GITHUB_CLIENT_ID}" - # SCRUMLR_AUTH_GITHUB_CLIENT_SECRET: "${GITHUB_CLIENT_SECRET}" - # SCRUMLR_AUTH_AZURE_AD_TENANT_ID: "${AZURE_AD_TENANT_ID}" - # SCRUMLR_AUTH_AZURE_AD_CLIENT_ID: "${AZURE_AD_CLIENT_ID}" - # SCRUMLR_AUTH_AZURE_AD_CLIENT_SECRET: "${AZURE_AD_CLIENT_SECRET}" - # SCRUMLR_AUTH_APPLE_CLIENT_ID: "${APPLE_CLIENT_ID}" - # SCRUMLR_AUTH_APPLE_CLIENT_SECRET: "${APPLE_CLIENT_SECRET}" - # SCRUMLR_AUTH_OIDC_CLIENT_ID: "${OIDC_CLIENT_ID}" - # SCRUMLR_AUTH_OIDC_CLIENT_SECRET: "${OIDC_CLIENT_SECRET}" - # SCRUMLR_AUTH_OIDC_DISCOVERY_URL: "${OIDC_DISCOVERY_URL}" - # SCRUMLR_CONFIG_PATH: "${SCRUMLR_CONFIG_PATH}" + SCRUMLR_AUTH_GITHUB_CLIENT_ID: "${GITHUB_CLIENT_ID}" + SCRUMLR_AUTH_GITHUB_CLIENT_SECRET: "${GITHUB_CLIENT_SECRET}" + SCRUMLR_AUTH_AZURE_AD_TENANT_ID: "${AZURE_AD_TENANT_ID}" + SCRUMLR_AUTH_AZURE_AD_CLIENT_ID: "${AZURE_AD_CLIENT_ID}" + SCRUMLR_AUTH_AZURE_AD_CLIENT_SECRET: "${AZURE_AD_CLIENT_SECRET}" + SCRUMLR_AUTH_APPLE_CLIENT_ID: "${APPLE_CLIENT_ID}" + SCRUMLR_AUTH_APPLE_CLIENT_SECRET: "${APPLE_CLIENT_SECRET}" + SCRUMLR_AUTH_OIDC_CLIENT_ID: "${OIDC_CLIENT_ID}" + SCRUMLR_AUTH_OIDC_CLIENT_SECRET: "${OIDC_CLIENT_SECRET}" + SCRUMLR_AUTH_OIDC_DISCOVERY_URL: "${OIDC_DISCOVERY_URL}" + # SCRUMLR_CONFIG_PATH: "${SCRUMRL_CONFIG_PATH}" # Redis variables (if you decide to use Redis instead of NATS) - # SCRUMLR_SERVER_REDIS_HOST: "${REDIS_HOST}" - # SCRUMLR_SERVER_REDIS_USERNAME: "${REDIS_USERNAME}" - # SCRUMLR_SERVER_REDIS_PASSWORD: "${REDIS_PASSWORD}" - # SCRUMLR_ENABLE_EXPERIMENTAL_AUTH_FILE_SYSTEM_STORE: "${SCRUMLR_ENABLE_EXPERIMENTAL_AUTH_FILE_SYSTEM_STORE}" + SCRUMLR_SERVER_REDIS_HOST: "${REDIS_HOST}" + SCRUMLR_SERVER_REDIS_USERNAME: "${REDIS_USERNAME}" + SCRUMLR_SERVER_REDIS_PASSWORD: "${REDIS_PASSWORD}" ports: - "8080:8080" depends_on: @@ -50,9 +49,9 @@ services: SCRUMLR_WEBSOCKET_URL: "${SCRUMLR_WEBSOCKET_URL}" SCRUMLR_SHOW_LEGAL_DOCUMENTS: "${SCRUMLR_SHOW_LEGAL_DOCUMENTS}" # Add missing frontend environment variables here - # SCRUMLR_LISTEN_PORT: "${SCRUMLR_LISTEN_PORT}" - # SCRUMLR_ANALYTICS_DATA_DOMAIN: "${ANALYTICS_DATA_DOMAIN}" - # SCRUMLR_ANALYTICS_SRC: "${ANALYTICS_SRC}" + SCRUMLR_LISTEN_PORT: "${SCRUMLR_LISTEN_PORT:-8080}" + SCRUMLR_ANALYTICS_DATA_DOMAIN: "${ANALYTICS_DATA_DOMAIN}" + SCRUMLR_ANALYTICS_SRC: "${ANALYTICS_SRC}" ports: - "9090:8080" diff --git a/server/src/main.go b/server/src/main.go index a123bf8cd3..aa1f060ea6 100644 --- a/server/src/main.go +++ b/server/src/main.go @@ -255,6 +255,7 @@ func run(c *cli.Context) error { if c.Bool("verbose") { logger.EnableDevelopmentLogger() } + db, err := migrations.MigrateDatabase(c.String("database")) if err != nil { return fmt.Errorf("unable to migrate database: %w", err) @@ -266,6 +267,7 @@ func run(c *cli.Context) error { var rt *realtime.Broker if c.String("redis-address") != "" { + logger.Get().Infof("Connecting to redis at %v", c.String("redis-address")) rt, err = realtime.NewRedis(realtime.RedisServer{ Addr: c.String("redis-address"), Username: c.String("redis-username"), @@ -275,6 +277,7 @@ func run(c *cli.Context) error { logger.Get().Fatalf("failed to connect to redis message queue: %v", err) } } else { + logger.Get().Infof("Connecting to nats at %v", c.String("nats")) rt, err = realtime.NewNats(c.String("nats")) if err != nil { logger.Get().Fatalf("failed to connect to nats message queue: %v", err) @@ -294,28 +297,32 @@ func run(c *cli.Context) error { } providersMap := make(map[string]auth.AuthProviderConfiguration) - if c.IsSet("auth-google-client-id") && c.IsSet("auth-google-client-secret") && c.IsSet("auth-callback-host") { + if c.String("auth-google-client-id") != "" && c.String("auth-google-client-secret") != "" && c.String("auth-callback-host") != "" { + logger.Get().Info("Using google authentication") providersMap[(string)(types.AccountTypeGoogle)] = auth.AuthProviderConfiguration{ ClientId: c.String("auth-google-client-id"), ClientSecret: c.String("auth-google-client-secret"), RedirectUri: fmt.Sprintf("%s%s/login/google/callback", strings.TrimSuffix(c.String("auth-callback-host"), "/"), strings.TrimSuffix(basePath, "/")), } } - if c.IsSet("auth-github-client-id") && c.IsSet("auth-github-client-secret") && c.IsSet("auth-callback-host") { + if c.String("auth-github-client-id") != "" && c.String("auth-github-client-secret") != "" && c.String("auth-callback-host") != "" { + logger.Get().Info("Using github authentication") providersMap[(string)(types.AccountTypeGitHub)] = auth.AuthProviderConfiguration{ ClientId: c.String("auth-github-client-id"), ClientSecret: c.String("auth-github-client-secret"), RedirectUri: fmt.Sprintf("%s%s/login/github/callback", strings.TrimSuffix(c.String("auth-callback-host"), "/"), strings.TrimSuffix(basePath, "/")), } } - if c.IsSet("auth-microsoft-client-id") && c.IsSet("auth-microsoft-client-secret") && c.IsSet("auth-callback-host") { + if c.String("auth-microsoft-client-id") != "" && c.String("auth-microsoft-client-secret") != "" && c.String("auth-callback-host") != "" { + logger.Get().Info("Using microsoft authentication") providersMap[(string)(types.AccountTypeMicrosoft)] = auth.AuthProviderConfiguration{ ClientId: c.String("auth-microsoft-client-id"), ClientSecret: c.String("auth-microsoft-client-secret"), RedirectUri: fmt.Sprintf("%s%s/login/microsoft/callback", strings.TrimSuffix(c.String("auth-callback-host"), "/"), strings.TrimSuffix(basePath, "/")), } } - if c.IsSet("auth-azure-ad-tenant-id") && c.IsSet("auth-azure-ad-client-id") && c.IsSet("auth-azure-ad-client-secret") && c.IsSet("auth-callback-host") { + if c.String("auth-azure-ad-tenant-id") != "" && c.String("auth-azure-ad-client-id") != "" && c.String("auth-azure-ad-client-secret") != "" && c.String("auth-callback-host") != "" { + logger.Get().Info("Using azure authentication") providersMap[(string)(types.AccountTypeAzureAd)] = auth.AuthProviderConfiguration{ TenantId: c.String("auth-azure-ad-tenant-id"), ClientId: c.String("auth-azure-ad-client-id"), @@ -323,14 +330,16 @@ func run(c *cli.Context) error { RedirectUri: fmt.Sprintf("%s%s/login/azure_ad/callback", strings.TrimSuffix(c.String("auth-callback-host"), "/"), strings.TrimSuffix(basePath, "/")), } } - if c.IsSet("auth-apple-client-id") && c.IsSet("auth-apple-client-secret") && c.IsSet("auth-callback-host") { + if c.String("auth-apple-client-id") != "" && c.String("auth-apple-client-secret") != "" && c.String("auth-callback-host") != "" { + logger.Get().Info("Using apple authentication.") providersMap[(string)(types.AccountTypeApple)] = auth.AuthProviderConfiguration{ ClientId: c.String("auth-apple-client-id"), ClientSecret: c.String("auth-apple-client-secret"), RedirectUri: fmt.Sprintf("%s%s/login/apple/callback", strings.TrimSuffix(c.String("auth-callback-host"), "/"), strings.TrimSuffix(basePath, "/")), } } - if c.IsSet("auth-oidc-discovery-url") && c.IsSet("auth-oidc-client-id") && c.IsSet("auth-oidc-client-secret") && c.IsSet("auth-callback-host") { + if c.String("auth-oidc-discovery-url") != "" && c.String("auth-oidc-client-id") != "" && c.String("auth-oidc-client-secret") != "" && c.String("auth-callback-host") != "" { + logger.Get().Info("Using oicd authentication.") providersMap[(string)(types.AccountTypeOIDC)] = auth.AuthProviderConfiguration{ ClientId: c.String("auth-oidc-client-id"), ClientSecret: c.String("auth-oidc-client-secret"),