fix(setup): 支持从配置文件读取 Setup Wizard 监听地址
Setup Wizard 之前硬编码使用 8080 端口,现在支持从 config.yaml 或 环境变量 (SERVER_HOST, SERVER_PORT) 读取监听地址,方便用户在端口 被占用时使用其他地址启动初始化向导。
This commit is contained in:
@@ -15,6 +15,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"sub2api/internal/config"
|
||||||
"sub2api/internal/handler"
|
"sub2api/internal/handler"
|
||||||
"sub2api/internal/middleware"
|
"sub2api/internal/middleware"
|
||||||
"sub2api/internal/setup"
|
"sub2api/internal/setup"
|
||||||
@@ -94,8 +95,10 @@ func runSetupServer() {
|
|||||||
r.Use(web.ServeEmbeddedFrontend())
|
r.Use(web.ServeEmbeddedFrontend())
|
||||||
}
|
}
|
||||||
|
|
||||||
addr := ":8080"
|
// Get server address from config.yaml or environment variables (SERVER_HOST, SERVER_PORT)
|
||||||
log.Printf("Setup wizard available at http://localhost%s", addr)
|
// This allows users to run setup on a different address if needed
|
||||||
|
addr := config.GetServerAddress()
|
||||||
|
log.Printf("Setup wizard available at http://%s", addr)
|
||||||
log.Println("Complete the setup wizard to configure Sub2API")
|
log.Println("Complete the setup wizard to configure Sub2API")
|
||||||
|
|
||||||
if err := r.Run(addr); err != nil {
|
if err := r.Run(addr); err != nil {
|
||||||
|
|||||||
@@ -203,3 +203,29 @@ func (c *Config) Validate() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetServerAddress returns the server address (host:port) from config file or environment variable.
|
||||||
|
// This is a lightweight function that can be used before full config validation,
|
||||||
|
// such as during setup wizard startup.
|
||||||
|
// Priority: config.yaml > environment variables > defaults
|
||||||
|
func GetServerAddress() string {
|
||||||
|
v := viper.New()
|
||||||
|
v.SetConfigName("config")
|
||||||
|
v.SetConfigType("yaml")
|
||||||
|
v.AddConfigPath(".")
|
||||||
|
v.AddConfigPath("./config")
|
||||||
|
v.AddConfigPath("/etc/sub2api")
|
||||||
|
|
||||||
|
// Support SERVER_HOST and SERVER_PORT environment variables
|
||||||
|
v.AutomaticEnv()
|
||||||
|
v.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||||||
|
v.SetDefault("server.host", "0.0.0.0")
|
||||||
|
v.SetDefault("server.port", 8080)
|
||||||
|
|
||||||
|
// Try to read config file (ignore errors if not found)
|
||||||
|
_ = v.ReadInConfig()
|
||||||
|
|
||||||
|
host := v.GetString("server.host")
|
||||||
|
port := v.GetInt("server.port")
|
||||||
|
return fmt.Sprintf("%s:%d", host, port)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user