config: sync admin and RTMP port defaults

This commit is contained in:
A 2026-07-06 16:29:29 +08:00
parent 597b5f265b
commit c5dc2b7e21
6 changed files with 35 additions and 8 deletions

View file

@ -22,10 +22,10 @@ TELESRV_ADMIN_UI_PASSWORD=abc123456
TELESRV_ADMIN_SESSION_KEY=change-me-to-a-strong-random-key-at-least-32-chars TELESRV_ADMIN_SESSION_KEY=change-me-to-a-strong-random-key-at-least-32-chars
# 主服务 Admin API 默认关闭;Admin UI 写操作需要显式开启该 loopback 监听地址。 # 主服务 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 监听地址,默认值通常无需修改。 # Admin UI 监听地址,默认值通常无需修改;RTMP ingest 保留 2400。
TELESRV_ADMIN_UI_ADDR=127.0.0.1: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_POSTGRES_DSN=postgres://telesrv:telesrv@127.0.0.1:5432/telesrv?sslmode=disable
TELESRV_REDIS_ADDR=127.0.0.1:6399 TELESRV_REDIS_ADDR=127.0.0.1:6399

View file

@ -19,6 +19,8 @@ import (
"telesrv/internal/config" "telesrv/internal/config"
) )
const defaultAdminAPIAddr = "127.0.0.1:2599"
func main() { func main() {
if err := run(); err != nil { if err := run(); err != nil {
log.Fatal(err) log.Fatal(err)
@ -81,7 +83,7 @@ func loadConfig() (uiConfig, error) {
adminAPIAddr := appCfg.AdminAPIAddr adminAPIAddr := appCfg.AdminAPIAddr
if strings.TrimSpace(adminAPIAddr) == "" { if strings.TrimSpace(adminAPIAddr) == "" {
adminAPIAddr = "127.0.0.1:2399" adminAPIAddr = defaultAdminAPIAddr
} }
if appCfg.AdminUIPassword == "" && appCfg.AdminUIToken == "" { if appCfg.AdminUIPassword == "" && appCfg.AdminUIToken == "" {
@ -109,7 +111,7 @@ func loadConfig() (uiConfig, error) {
func adminAPIURL(addr string) string { func adminAPIURL(addr string) string {
addr = strings.TrimSpace(addr) addr = strings.TrimSpace(addr)
if addr == "" { if addr == "" {
addr = "127.0.0.1:2399" addr = defaultAdminAPIAddr
} }
if strings.HasPrefix(addr, "http://") || strings.HasPrefix(addr, "https://") { if strings.HasPrefix(addr, "http://") || strings.HasPrefix(addr, "https://") {
return strings.TrimRight(addr, "/") return strings.TrimRight(addr, "/")

View file

@ -42,3 +42,9 @@ func TestSPAFallbackSmoke(t *testing.T) {
t.Fatalf("spa body missing root: %s", rec.Body.String()) 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)
}
}

View file

@ -10,7 +10,7 @@ export default defineConfig({
server: { server: {
port: 2410, port: 2410,
proxy: { proxy: {
"/api": "http://127.0.0.1:2400" "/api": "http://127.0.0.1:2600"
} }
} }
}); });

View file

@ -300,7 +300,7 @@ func Load() (Config, error) {
AdminAPIToken: envOr("TELESRV_ADMIN_API_TOKEN", ""), AdminAPIToken: envOr("TELESRV_ADMIN_API_TOKEN", ""),
StickerWebAddr: envOr("TELESRV_STICKER_WEB_ADDR", ""), StickerWebAddr: envOr("TELESRV_STICKER_WEB_ADDR", ""),
StickerWebPublicURL: envOr("TELESRV_STICKER_WEB_PUBLIC_URL", "https://telesrv.net"), 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", ""), AdminUIPassword: envOr("TELESRV_ADMIN_UI_PASSWORD", ""),
AdminUIToken: envOr("TELESRV_ADMIN_UI_TOKEN", ""), AdminUIToken: envOr("TELESRV_ADMIN_UI_TOKEN", ""),
AdminSessionKey: envOr("TELESRV_ADMIN_SESSION_KEY", ""), AdminSessionKey: envOr("TELESRV_ADMIN_SESSION_KEY", ""),
@ -395,7 +395,7 @@ func Load() (Config, error) {
SFUAdvertiseIP: envOr("TELESRV_SFU_ADVERTISE_IP", ""), SFUAdvertiseIP: envOr("TELESRV_SFU_ADVERTISE_IP", ""),
LiveStreamEnable: envBoolOr("TELESRV_LIVESTREAM_ENABLE", true), 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", ""), LiveStreamRtmpURL: envOr("TELESRV_LIVESTREAM_RTMP_URL", ""),
LiveStreamFFmpegPath: envOr("TELESRV_LIVESTREAM_FFMPEG_PATH", "ffmpeg"), LiveStreamFFmpegPath: envOr("TELESRV_LIVESTREAM_FFMPEG_PATH", "ffmpeg"),
LiveStreamWorkDir: envOr("TELESRV_LIVESTREAM_WORK_DIR", ""), LiveStreamWorkDir: envOr("TELESRV_LIVESTREAM_WORK_DIR", ""),

View file

@ -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) { func TestLoadAIProviders(t *testing.T) {
t.Setenv("TELESRV_AI_PROVIDERS", "local,openai,gemini") t.Setenv("TELESRV_AI_PROVIDERS", "local,openai,gemini")
t.Setenv("TELESRV_AI_OPENAI_API_KEY", "openai-key") t.Setenv("TELESRV_AI_OPENAI_API_KEY", "openai-key")