All checks were successful
Build Multi-Platform Binaries / build (push) Successful in 11m35s
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/gotunnel/internal/server/app"
|
|
"github.com/gotunnel/internal/server/config"
|
|
"github.com/gotunnel/internal/server/db"
|
|
"github.com/gotunnel/internal/server/tunnel"
|
|
)
|
|
|
|
func main() {
|
|
configPath := flag.String("c", "server.yaml", "config file path")
|
|
flag.Parse()
|
|
|
|
// 加载 YAML 配置
|
|
cfg, err := config.LoadServerConfig(*configPath)
|
|
if err != nil {
|
|
log.Fatalf("Load config error: %v", err)
|
|
}
|
|
|
|
// 初始化数据库
|
|
clientStore, err := db.NewSQLiteStore(cfg.Server.DBPath)
|
|
if err != nil {
|
|
log.Fatalf("Init database error: %v", err)
|
|
}
|
|
defer clientStore.Close()
|
|
|
|
// 创建隧道服务
|
|
server := tunnel.NewServer(
|
|
clientStore,
|
|
cfg.Server.BindAddr,
|
|
cfg.Server.BindPort,
|
|
cfg.Server.Token,
|
|
cfg.Server.HeartbeatSec,
|
|
cfg.Server.HeartbeatTimeout,
|
|
)
|
|
|
|
// 启动 Web 控制台
|
|
if cfg.Web.Enabled {
|
|
ws := app.NewWebServer(clientStore, server)
|
|
addr := fmt.Sprintf("%s:%d", cfg.Web.BindAddr, cfg.Web.BindPort)
|
|
|
|
go func() {
|
|
var err error
|
|
if cfg.Web.Username != "" && cfg.Web.Password != "" {
|
|
err = ws.RunWithAuth(addr, cfg.Web.Username, cfg.Web.Password)
|
|
} else {
|
|
err = ws.Run(addr)
|
|
}
|
|
if err != nil {
|
|
log.Printf("[Web] Server error: %v", err)
|
|
}
|
|
}()
|
|
}
|
|
|
|
log.Fatal(server.Run())
|
|
}
|