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
# 主服务 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

View file

@ -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, "/")

View file

@ -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)
}
}

View file

@ -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"
}
}
});

View file

@ -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", ""),

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) {
t.Setenv("TELESRV_AI_PROVIDERS", "local,openai,gemini")
t.Setenv("TELESRV_AI_OPENAI_API_KEY", "openai-key")