mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-01-13 01:02:46 +00:00
52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
// Package main is the entry point for the 3x-ui node service (worker).
|
|
// This service runs XRAY Core and provides a REST API for the master panel to manage it.
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/mhsanaei/3x-ui/v2/logger"
|
|
"github.com/mhsanaei/3x-ui/v2/node/api"
|
|
"github.com/mhsanaei/3x-ui/v2/node/xray"
|
|
"github.com/op/go-logging"
|
|
)
|
|
|
|
func main() {
|
|
var port int
|
|
var apiKey string
|
|
flag.IntVar(&port, "port", 8080, "API server port")
|
|
flag.StringVar(&apiKey, "api-key", "", "API key for authentication (required)")
|
|
flag.Parse()
|
|
|
|
// Check environment variable if flag is not provided
|
|
if apiKey == "" {
|
|
apiKey = os.Getenv("NODE_API_KEY")
|
|
}
|
|
|
|
if apiKey == "" {
|
|
log.Fatal("API key is required. Set NODE_API_KEY environment variable or use -api-key flag")
|
|
}
|
|
|
|
logger.InitLogger(logging.INFO)
|
|
|
|
xrayManager := xray.NewManager()
|
|
server := api.NewServer(port, apiKey, xrayManager)
|
|
|
|
log.Printf("Starting 3x-ui Node Service on port %d", port)
|
|
if err := server.Start(); err != nil {
|
|
log.Fatalf("Failed to start server: %v", err)
|
|
}
|
|
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
|
|
<-sigCh
|
|
|
|
log.Println("Shutting down...")
|
|
xrayManager.Stop()
|
|
server.Stop()
|
|
log.Println("Shutdown complete")
|
|
}
|