diff --git a/Dockerfile b/Dockerfile index 4bd8ec94f..8f01c9014 100644 --- a/Dockerfile +++ b/Dockerfile @@ -201,7 +201,7 @@ COPY agentic_reasoning agentic_reasoning COPY pyproject.toml uv.lock ./ COPY docker/service_conf.yaml.template ./conf/service_conf.yaml.template -COPY docker/entrypoint.sh docker/entrypoint-parser.sh ./ +COPY docker/entrypoint.sh ./ RUN chmod +x ./entrypoint*.sh # Copy compiled web pages diff --git a/docker/entrypoint-parser.sh b/docker/entrypoint-parser.sh deleted file mode 100755 index 07dc241f8..000000000 --- a/docker/entrypoint-parser.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# replace env variables in the service_conf.yaml file -rm -rf /ragflow/conf/service_conf.yaml -while IFS= read -r line || [[ -n "$line" ]]; do - # Use eval to interpret the variable with default values - eval "echo \"$line\"" >> /ragflow/conf/service_conf.yaml -done < /ragflow/conf/service_conf.yaml.template - -export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/ - -PY=python3 - -CONSUMER_NO_BEG=$1 -CONSUMER_NO_END=$2 - -function task_exe(){ - JEMALLOC_PATH=$(pkg-config --variable=libdir jemalloc)/libjemalloc.so - while [ 1 -eq 1 ]; do - LD_PRELOAD=$JEMALLOC_PATH $PY rag/svr/task_executor.py $1; - done -} - -for ((i=CONSUMER_NO_BEG; i> /ragflow/conf/service_conf.yaml -done < /ragflow/conf/service_conf.yaml.template +set -e -/usr/sbin/nginx +# ----------------------------------------------------------------------------- +# Usage and command-line argument parsing +# ----------------------------------------------------------------------------- +function usage() { + echo "Usage: $0 [--disable-webserver] [--disable-taskexecutor] [--consumer-no-beg=] [--consumer-no-end=] [--workers=] [--host-id=]" + echo + echo " --disable-webserver Disables the web server (nginx + ragflow_server)." + echo " --disable-taskexecutor Disables task executor workers." + echo " --consumer-no-beg= Start range for consumers (if using range-based)." + echo " --consumer-no-end= End range for consumers (if using range-based)." + echo " --workers= Number of task executors to run (if range is not used)." + echo " --host-id= Unique ID for the host (defaults to \`hostname\`)." + echo + echo "Examples:" + echo " $0 --disable-taskexecutor" + echo " $0 --disable-webserver --consumer-no-beg=0 --consumer-no-end=5" + echo " $0 --disable-webserver --workers=2 --host-id=myhost123" + exit 1 +} -export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/ +ENABLE_WEBSERVER=1 # Default to enable web server +ENABLE_TASKEXECUTOR=1 # Default to enable task executor +CONSUMER_NO_BEG=0 +CONSUMER_NO_END=0 +WORKERS=1 -PY=python3 -if [[ -z "$WS" || $WS -lt 1 ]]; then - WS=1 +# ----------------------------------------------------------------------------- +# Host ID logic: +# 1. By default, use the system hostname if length <= 32 +# 2. Otherwise, use the full MD5 hash of the hostname (32 hex chars) +# ----------------------------------------------------------------------------- +CURRENT_HOSTNAME="$(hostname)" +if [ ${#CURRENT_HOSTNAME} -le 32 ]; then + DEFAULT_HOST_ID="$CURRENT_HOSTNAME" +else + DEFAULT_HOST_ID="$(echo -n "$CURRENT_HOSTNAME" | md5sum | cut -d ' ' -f 1)" fi -function task_exe(){ - JEMALLOC_PATH=$(pkg-config --variable=libdir jemalloc)/libjemalloc.so - while [ 1 -eq 1 ];do - LD_PRELOAD=$JEMALLOC_PATH $PY rag/svr/task_executor.py $1; +HOST_ID="$DEFAULT_HOST_ID" + +# Parse arguments +for arg in "$@"; do + case $arg in + --disable-webserver) + ENABLE_WEBSERVER=0 + shift + ;; + --disable-taskexecutor) + ENABLE_TASKEXECUTOR=0 + shift + ;; + --consumer-no-beg=*) + CONSUMER_NO_BEG="${arg#*=}" + shift + ;; + --consumer-no-end=*) + CONSUMER_NO_END="${arg#*=}" + shift + ;; + --workers=*) + WORKERS="${arg#*=}" + shift + ;; + --host-id=*) + HOST_ID="${arg#*=}" + shift + ;; + *) + usage + ;; + esac +done + +# ----------------------------------------------------------------------------- +# Replace env variables in the service_conf.yaml file +# ----------------------------------------------------------------------------- +CONF_DIR="/ragflow/conf" +TEMPLATE_FILE="${CONF_DIR}/service_conf.yaml.template" +CONF_FILE="${CONF_DIR}/service_conf.yaml" + +rm -f "${CONF_FILE}" +while IFS= read -r line || [[ -n "$line" ]]; do + eval "echo \"$line\"" >> "${CONF_FILE}" +done < "${TEMPLATE_FILE}" + +export LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu/" +PY=python3 + +# ----------------------------------------------------------------------------- +# Function(s) +# ----------------------------------------------------------------------------- + +function task_exe() { + local consumer_id="$1" + local host_id="$2" + + JEMALLOC_PATH="$(pkg-config --variable=libdir jemalloc)/libjemalloc.so" + while true; do + LD_PRELOAD="$JEMALLOC_PATH" \ + "$PY" rag/svr/task_executor.py "${host_id}_${consumer_id}" done } -for ((i=0;i