Files
GoTunnel/cmd/server/main.go
Flik 4623a7f031
All checks were successful
Build Multi-Platform Binaries / build (push) Successful in 11m9s
add plugins
2025-12-26 11:24:23 +08:00

85 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"
"github.com/gotunnel/pkg/crypto"
"github.com/gotunnel/pkg/plugin"
"github.com/gotunnel/pkg/plugin/builtin"
)
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,
)
// 配置 TLS默认启用
if !cfg.Server.TLSDisabled {
tlsConfig, err := crypto.GenerateTLSConfig()
if err != nil {
log.Fatalf("Generate TLS config error: %v", err)
}
server.SetTLSConfig(tlsConfig)
log.Printf("[Server] TLS enabled")
}
// 初始化插件系统
registry := plugin.NewRegistry()
if err := registry.RegisterBuiltin(builtin.NewSOCKS5Plugin()); err != nil {
log.Printf("[Plugin] Register socks5 error: %v", err)
}
if err := registry.RegisterBuiltin(builtin.NewHTTPPlugin()); err != nil {
log.Printf("[Plugin] Register http error: %v", err)
}
server.SetPluginRegistry(registry)
log.Printf("[Plugin] Plugins registered: socks5, http")
// 启动 Web 控制台
if cfg.Web.Enabled {
ws := app.NewWebServer(clientStore, server, cfg, *configPath)
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())
}