diff --git a/.env.example b/.env.example index abddb12c..6e31d0a3 100644 --- a/.env.example +++ b/.env.example @@ -22,10 +22,10 @@ TELESRV_ADMIN_UI_PASSWORD=abc123456 TELESRV_ADMIN_SESSION_KEY=change-me-to-a-strong-random-key-at-least-32-chars # 主服务 Admin API 默认关闭;Admin UI 写操作需要显式开启该 loopback 监听地址。 -TELESRV_ADMIN_API_ADDR=127.0.0.1:2399 +TELESRV_ADMIN_API_ADDR=127.0.0.1:2599 -# Admin UI 监听地址,默认值通常无需修改。 -TELESRV_ADMIN_UI_ADDR=127.0.0.1:2400 +# Admin UI 监听地址,默认值通常无需修改;RTMP ingest 保留 2400。 +TELESRV_ADMIN_UI_ADDR=127.0.0.1:2600 TELESRV_POSTGRES_DSN=postgres://telesrv:telesrv@127.0.0.1:5432/telesrv?sslmode=disable TELESRV_REDIS_ADDR=127.0.0.1:6399 diff --git a/cmd/telesrv-admin/main.go b/cmd/telesrv-admin/main.go index c40ecf4d..953b79a2 100644 --- a/cmd/telesrv-admin/main.go +++ b/cmd/telesrv-admin/main.go @@ -19,6 +19,8 @@ import ( "telesrv/internal/config" ) +const defaultAdminAPIAddr = "127.0.0.1:2599" + func main() { if err := run(); err != nil { log.Fatal(err) @@ -81,7 +83,7 @@ func loadConfig() (uiConfig, error) { adminAPIAddr := appCfg.AdminAPIAddr if strings.TrimSpace(adminAPIAddr) == "" { - adminAPIAddr = "127.0.0.1:2399" + adminAPIAddr = defaultAdminAPIAddr } if appCfg.AdminUIPassword == "" && appCfg.AdminUIToken == "" { @@ -109,7 +111,7 @@ func loadConfig() (uiConfig, error) { func adminAPIURL(addr string) string { addr = strings.TrimSpace(addr) if addr == "" { - addr = "127.0.0.1:2399" + addr = defaultAdminAPIAddr } if strings.HasPrefix(addr, "http://") || strings.HasPrefix(addr, "https://") { return strings.TrimRight(addr, "/") diff --git a/cmd/telesrv-admin/session_test.go b/cmd/telesrv-admin/session_test.go index d8ad97fa..9314e7d4 100644 --- a/cmd/telesrv-admin/session_test.go +++ b/cmd/telesrv-admin/session_test.go @@ -42,3 +42,9 @@ func TestSPAFallbackSmoke(t *testing.T) { t.Fatalf("spa body missing root: %s", rec.Body.String()) } } + +func TestAdminAPIURLDefaultUsesAdminAPIPort(t *testing.T) { + if got, want := adminAPIURL(""), "http://127.0.0.1:2599"; got != want { + t.Fatalf("adminAPIURL(empty) = %q, want %q", got, want) + } +} diff --git a/cmd/telesrv-admin/web/vite.config.ts b/cmd/telesrv-admin/web/vite.config.ts index f4af78b0..67d21257 100644 --- a/cmd/telesrv-admin/web/vite.config.ts +++ b/cmd/telesrv-admin/web/vite.config.ts @@ -10,7 +10,7 @@ export default defineConfig({ server: { port: 2410, proxy: { - "/api": "http://127.0.0.1:2400" + "/api": "http://127.0.0.1:2600" } } }); diff --git a/internal/config/config.go b/internal/config/config.go index bde45811..583fe21c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -300,7 +300,7 @@ func Load() (Config, error) { AdminAPIToken: envOr("TELESRV_ADMIN_API_TOKEN", ""), StickerWebAddr: envOr("TELESRV_STICKER_WEB_ADDR", ""), StickerWebPublicURL: envOr("TELESRV_STICKER_WEB_PUBLIC_URL", "https://telesrv.net"), - AdminUIAddr: envOr("TELESRV_ADMIN_UI_ADDR", "127.0.0.1:2400"), + AdminUIAddr: envOr("TELESRV_ADMIN_UI_ADDR", "127.0.0.1:2600"), AdminUIPassword: envOr("TELESRV_ADMIN_UI_PASSWORD", ""), AdminUIToken: envOr("TELESRV_ADMIN_UI_TOKEN", ""), AdminSessionKey: envOr("TELESRV_ADMIN_SESSION_KEY", ""), @@ -395,7 +395,7 @@ func Load() (Config, error) { SFUAdvertiseIP: envOr("TELESRV_SFU_ADVERTISE_IP", ""), LiveStreamEnable: envBoolOr("TELESRV_LIVESTREAM_ENABLE", true), - LiveStreamRtmpAddr: envOr("TELESRV_LIVESTREAM_RTMP_ADDR", ":2600"), + LiveStreamRtmpAddr: envOr("TELESRV_LIVESTREAM_RTMP_ADDR", ":2400"), LiveStreamRtmpURL: envOr("TELESRV_LIVESTREAM_RTMP_URL", ""), LiveStreamFFmpegPath: envOr("TELESRV_LIVESTREAM_FFMPEG_PATH", "ffmpeg"), LiveStreamWorkDir: envOr("TELESRV_LIVESTREAM_WORK_DIR", ""), diff --git a/internal/config/config_test.go b/internal/config/config_test.go index d7012c0b..eb6eec1d 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -55,6 +55,25 @@ func TestLoadBusinessAIProviderDefaultsToEcho(t *testing.T) { } } +func TestLoadKeepsAdminAndRtmpDefaultPortsSeparate(t *testing.T) { + t.Setenv("TELESRV_ADMIN_UI_ADDR", "") + t.Setenv("TELESRV_LIVESTREAM_RTMP_ADDR", "") + + cfg, err := Load() + if err != nil { + t.Fatalf("Load: %v", err) + } + if cfg.AdminUIAddr != "127.0.0.1:2600" { + t.Fatalf("AdminUIAddr = %q, want 127.0.0.1:2600", cfg.AdminUIAddr) + } + if cfg.LiveStreamRtmpAddr != ":2400" { + t.Fatalf("LiveStreamRtmpAddr = %q, want :2400", cfg.LiveStreamRtmpAddr) + } + if cfg.AdminUIAddr == "127.0.0.1"+cfg.LiveStreamRtmpAddr { + t.Fatalf("Admin UI and RTMP defaults conflict on %s", cfg.AdminUIAddr) + } +} + func TestLoadAIProviders(t *testing.T) { t.Setenv("TELESRV_AI_PROVIDERS", "local,openai,gemini") t.Setenv("TELESRV_AI_OPENAI_API_KEY", "openai-key")