Go: add more start server parameters (#16093)

### What problem does this PR solve?

```
$ ./bin/ragflow_server --version 
RAGFlow version: v0.26.0-65-g549f6109c

$ ./bin/ragflow_server --debug # start server with debug log level

$ ./bin/admin_server --version 
RAGFlow version: v0.26.0-65-g549f6109c

$ ./bin/admin_server --debug # start server with debug log level

$ ./bin/admin_server --init-superuser # init default superuser

$ ./bin/ingestor --version
RAGFlow version: v0.26.0-68-g6f6c39706

$ ./bin/ingestor --debug
```


### Type of change

- [x] New Feature (non-breaking change which adds functionality)

---------

Signed-off-by: Jin Hai <haijin.chn@gmail.com>
This commit is contained in:
Jin Hai
2026-06-16 20:27:37 +08:00
committed by GitHub
parent 17e3aad7ae
commit 6865039a22
5 changed files with 113 additions and 14 deletions

View File

@@ -16,6 +16,7 @@ CPP_DIR="$PROJECT_ROOT/internal/cpp"
BUILD_DIR="$CPP_DIR/cmake-build-release"
RAGFLOW_SERVER_BINARY="$PROJECT_ROOT/bin/ragflow_server"
ADMIN_SERVER_BINARY="$PROJECT_ROOT/bin/admin_server"
INGESTOR_BINARY="$PROJECT_ROOT/bin/ingestor"
RAGFLOW_CLI_BINARY="$PROJECT_ROOT/bin/ragflow_cli"
# office_oxide native library settings
@@ -261,13 +262,16 @@ build_go() {
export CGO_LDFLAGS="-L${OFFICE_OXIDE_PREFIX}/lib -loffice_oxide -Wl,-rpath,${OFFICE_OXIDE_PREFIX}/lib${CGO_LDFLAGS:+ $CGO_LDFLAGS}"
echo "Exporting CGO_LDFLAGS: $CGO_LDFLAGS"
echo "Building RAGFlow binary: $RAGFLOW_SERVER_BINARY, $ADMIN_SERVER_BINARY, and $RAGFLOW_CLI_BINARY"
echo "Building RAGFlow binary: $RAGFLOW_SERVER_BINARY, $ADMIN_SERVER_BINARY, $INGESTOR_BINARY, and $RAGFLOW_CLI_BINARY"
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build -o "$RAGFLOW_SERVER_BINARY" cmd/server_main.go
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build -o "$ADMIN_SERVER_BINARY" cmd/admin_server.go
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build -o "$INGESTOR_BINARY" cmd/ingestor.go
GOPROXY=${GOPROXY:-https://goproxy.cn,https://proxy.golang.org,direct} CGO_ENABLED=1 \
CGO_CFLAGS="$CGO_CFLAGS" CGO_LDFLAGS="$CGO_LDFLAGS" \
go build -o "$RAGFLOW_CLI_BINARY" cmd/ragflow_cli.go
@@ -282,9 +286,15 @@ build_go() {
exit 1
fi
if [ ! -f "$INGESTOR_BINARY" ]; then
echo -e "${RED}Error: Failed to build Ingestor binary${NC}"
exit 1
fi
echo -e "${GREEN}✓ Go ragflow_server built successfully: $RAGFLOW_SERVER_BINARY${NC}"
echo -e "${GREEN}✓ Go admin_server built successfully: $ADMIN_SERVER_BINARY${NC}"
echo -e "${GREEN}✓ Go ragflow_cli built successfully: $RAGFLOW_CLI_BINARY${NC}"
echo -e "${GREEN}✓ Go ingestor built successfully: $INGESTOR_BINARY${NC}"
}
# Clean build artifacts
@@ -294,6 +304,8 @@ clean() {
rm -rf "$BUILD_DIR"
rm -f "$RAGFLOW_SERVER_BINARY"
rm -f "$ADMIN_SERVER_BINARY"
rm -f "$INGESTOR_BINARY"
rm -f "$RAGFLOW_CLI_BINARY"
echo -e "${GREEN}✓ Build artifacts cleaned${NC}"
}
@@ -308,6 +320,10 @@ run() {
echo -e "${RED}Error: $RAGFLOW_SERVER_BINARY not found. Build first with --all or --go${NC}"
exit 1
fi
if [ ! -f "$INGESTOR_BINARY" ]; then
echo -e "${RED}Error: $INGESTOR_BINARY not found. Build first with --all or --go${NC}"
exit 1
fi
cd "$PROJECT_ROOT"
@@ -322,6 +338,12 @@ run() {
# ragflow_server starts sending heartbeats to it.
sleep 1
print_section "Starting ingestor (background)"
"$INGESTOR_BINARY" &
INGESTOR_PID=$!
trap 'kill "$INGESTOR_PID" 2>/dev/null || true' EXIT INT TERM
sleep 1
print_section "Starting RAGFlow server (foreground)"
"$RAGFLOW_SERVER_BINARY"
}
@@ -396,7 +418,7 @@ main() {
build_cpp
build_go
echo -e "\n${GREEN}=== Build completed successfully! ===${NC}"
echo "Binary: $RAGFLOW_SERVER_BINARY, $ADMIN_SERVER_BINARY"
echo "Binary: $RAGFLOW_SERVER_BINARY, $ADMIN_SERVER_BINARY, $INGESTOR_BINARY, $RAGFLOW_CLI_BINARY"
;;
*)
echo -e "${RED}Unknown option: $1${NC}"

View File

@@ -41,11 +41,38 @@ import (
"ragflow/internal/server"
)
func printHelp() {
fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS]\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, "RAGFlow Admin Server\n\n")
fmt.Fprintf(os.Stderr, "Options:\n")
fmt.Fprintf(os.Stderr, " --config string\tPath to configuration file\n")
fmt.Fprintf(os.Stderr, " -v, --version \tPrint version information and exit\n")
fmt.Fprintf(os.Stderr, " --debug \tEnable debug-level logging\n")
fmt.Fprintf(os.Stderr, " --init-superuser\tInitialize superuser account\n")
fmt.Fprintf(os.Stderr, " -h, --help \tShow this help message and exit\n")
}
func main() {
var configPath string
flag.StringVar(&configPath, "config", "", "Path to configuration file")
var debugFlag bool
flag.BoolVar(&debugFlag, "debug", false, "Enable debug-level logging")
var versionFlag bool
flag.BoolVar(&versionFlag, "version", false, "Print version information and exit")
var initSuperuser bool
flag.BoolVar(&initSuperuser, "init-superuser", false, "Initialize superuser account")
// Custom help message
flag.Usage = printHelp
flag.Parse()
// Handle --version flag: print version and exit immediately
if versionFlag {
fmt.Printf("RAGFlow version: %s\n", utility.GetRAGFlowVersion())
return
}
// Initialize logger
if err := common.Init("info", "admin_server.log"); err != nil {
panic("failed to initialize logger: " + err.Error())
@@ -60,10 +87,17 @@ func main() {
cfg := server.GetConfig()
// Reinitialize logger with configured level if different
if cfg.Log.Level != "" && cfg.Log.Level != "info" {
if err := common.Init(cfg.Log.Level, "admin_server.log"); err != nil {
common.Error("Failed to reinitialize logger with configured level", err)
logLevel := cfg.Log.Level
if logLevel == "" {
logLevel = "info"
}
if debugFlag {
logLevel = "debug"
}
if err := common.Init(logLevel, "admin_server.log"); err != nil {
common.Error("Failed to reinitialize logger with configured level", err)
}
// Set logger for server package
@@ -109,11 +143,14 @@ func main() {
adminService := admin.NewService()
adminHandler := admin.NewHandler(adminService)
if initSuperuser {
// Initialize default admin user
if err := adminService.InitDefaultAdmin(); err != nil {
common.Error("Failed to initialize default admin user", err)
}
}
// Initialize router
r := admin.NewRouter(adminHandler)

View File

@@ -51,11 +51,15 @@ func printIngestionServerHelp() {
fmt.Fprintf(os.Stderr, " --name string\t\tIngestion server name (default: \"default_ingestion\")\n")
fmt.Fprintf(os.Stderr, " --admin-host string\tAdmin server host (overrides config file)\n")
fmt.Fprintf(os.Stderr, " --admin-port int\tAdmin server port (overrides config file)\n")
fmt.Fprintf(os.Stderr, " --version \tPrint version information and exit\n")
fmt.Fprintf(os.Stderr, " --debug \tEnable debug-level logging\n")
fmt.Fprintf(os.Stderr, " -h, --help\t\tShow this help message and exit\n")
fmt.Fprintf(os.Stderr, "\nExamples:\n")
fmt.Fprintf(os.Stderr, " %s # Start with default config\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s -f /path/to/config.yaml # Start with custom config file\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --admin-host 10.0.0.1 --admin-port 9383\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --version \t\t# Show version and exit\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --debug \t\t# Start with debug logging\n", os.Args[0])
}
func main() {
@@ -69,12 +73,22 @@ func main() {
flag.StringVar(&name, "name", "default_ingestion", "Ingestion server name")
flag.StringVar(&adminHost, "admin-host", "", "Admin server host (overrides config file)")
flag.IntVar(&adminPort, "admin-port", 0, "Admin server port (overrides config file)")
var debugFlag bool
flag.BoolVar(&debugFlag, "debug", false, "Enable debug-level logging")
var versionFlag bool
flag.BoolVar(&versionFlag, "version", false, "Print version information and exit")
// Custom help message
flag.Usage = printIngestionServerHelp
flag.Parse()
// Handle --version flag: print version and exit immediately
if versionFlag {
fmt.Printf("RAGFlow version: %s\n", utility.GetRAGFlowVersion())
return
}
// Initialize logger with default level
if err := common.Init("info", "ingestion_server.log"); err != nil {
panic(fmt.Sprintf("Failed to initialize logger: %v", err))
@@ -104,6 +118,11 @@ func main() {
if level == "" {
level = "info"
}
if debugFlag {
level = "debug"
}
if err := common.Init(level, "ingestion_server.log"); err != nil {
common.Error("Failed to reinitialize logger", err)
}

View File

@@ -54,12 +54,16 @@ func printHelp() {
fmt.Fprintf(os.Stderr, "Usage: %s [OPTIONS]\n\n", os.Args[0])
fmt.Fprintf(os.Stderr, "RAGFlow Server - Open-source RAG engine based on deep document understanding\n\n")
fmt.Fprintf(os.Stderr, "Options:\n")
fmt.Fprintf(os.Stderr, " -p, --port int\tServer port (overrides config file)\n")
fmt.Fprintf(os.Stderr, " -p, --port int\t\tServer port (overrides config file)\n")
fmt.Fprintf(os.Stderr, " -v, --version \tPrint version information and exit\n")
fmt.Fprintf(os.Stderr, " --debug \tEnable debug-level logging\n")
fmt.Fprintf(os.Stderr, " -h, --help \tShow this help message and exit\n")
fmt.Fprintf(os.Stderr, "\nExamples:\n")
fmt.Fprintf(os.Stderr, " %s # Start server with config file port\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s -p 8080 # Start server on port 8080\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --port 8080 # Start server on port 8080\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s \t\t# Start server with config file port\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s -p 8080 \t\t# Start server on port 8080\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --port 8080 \t# Start server on port 8080\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --version \t# Show version and exit\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s --debug \t# Start server with debug logging\n", os.Args[0])
}
func main() {
@@ -67,12 +71,22 @@ func main() {
var portFlag int
flag.IntVar(&portFlag, "port", 0, "Server port (overrides config file)")
flag.IntVar(&portFlag, "p", 0, "Server port (shorthand, overrides config file)")
var debugFlag bool
flag.BoolVar(&debugFlag, "debug", false, "Enable debug-level logging")
var versionFlag bool
flag.BoolVar(&versionFlag, "version", false, "Print version information and exit")
// Custom help message
flag.Usage = printHelp
flag.Parse()
// Handle --version flag: print version and exit immediately
if versionFlag {
fmt.Printf("RAGFlow version: %s\n", utility.GetRAGFlowVersion())
return
}
// Initialize logger with default level
// logger.Init("info"); // set debug log level
if err := common.Init("info", "server_main.log"); err != nil {
@@ -100,6 +114,11 @@ func main() {
if level == "" {
level = "info"
}
if debugFlag {
level = "debug"
}
if err := common.Init(level, "server_main.log"); err != nil {
common.Error("Failed to reinitialize logger", err)
}

View File

@@ -1811,6 +1811,7 @@ func (s *Service) InitDefaultAdmin() error {
return fmt.Errorf("failed to add tenant for admin: %w", err)
}
common.Info("Init default super user successfully")
return nil
}
@@ -1838,6 +1839,7 @@ func (s *Service) InitDefaultAdmin() error {
}
}
common.Info("Init default super user successfully")
return nil
}