Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

entrypoint.sh 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #!/usr/bin/env bash
  2. set -e
  3. # -----------------------------------------------------------------------------
  4. # Usage and command-line argument parsing
  5. # -----------------------------------------------------------------------------
  6. function usage() {
  7. echo "Usage: $0 [--disable-webserver] [--disable-taskexecutor] [--consumer-no-beg=<num>] [--consumer-no-end=<num>] [--workers=<num>] [--host-id=<string>]"
  8. echo
  9. echo " --disable-webserver Disables the web server (nginx + ragflow_server)."
  10. echo " --disable-taskexecutor Disables task executor workers."
  11. echo " --enable-mcpserver Enables the MCP server."
  12. echo " --consumer-no-beg=<num> Start range for consumers (if using range-based)."
  13. echo " --consumer-no-end=<num> End range for consumers (if using range-based)."
  14. echo " --workers=<num> Number of task executors to run (if range is not used)."
  15. echo " --host-id=<string> Unique ID for the host (defaults to \`hostname\`)."
  16. echo
  17. echo "Examples:"
  18. echo " $0 --disable-taskexecutor"
  19. echo " $0 --disable-webserver --consumer-no-beg=0 --consumer-no-end=5"
  20. echo " $0 --disable-webserver --workers=2 --host-id=myhost123"
  21. echo " $0 --enable-mcpserver"
  22. exit 1
  23. }
  24. ENABLE_WEBSERVER=1 # Default to enable web server
  25. ENABLE_TASKEXECUTOR=1 # Default to enable task executor
  26. ENABLE_MCP_SERVER=0
  27. CONSUMER_NO_BEG=0
  28. CONSUMER_NO_END=0
  29. WORKERS=1
  30. MCP_HOST="127.0.0.1"
  31. MCP_PORT=9382
  32. MCP_BASE_URL="http://127.0.0.1:9380"
  33. MCP_SCRIPT_PATH="/ragflow/mcp/server/server.py"
  34. MCP_MODE="self-host"
  35. MCP_HOST_API_KEY=""
  36. # -----------------------------------------------------------------------------
  37. # Host ID logic:
  38. # 1. By default, use the system hostname if length <= 32
  39. # 2. Otherwise, use the full MD5 hash of the hostname (32 hex chars)
  40. # -----------------------------------------------------------------------------
  41. CURRENT_HOSTNAME="$(hostname)"
  42. if [ ${#CURRENT_HOSTNAME} -le 32 ]; then
  43. DEFAULT_HOST_ID="$CURRENT_HOSTNAME"
  44. else
  45. DEFAULT_HOST_ID="$(echo -n "$CURRENT_HOSTNAME" | md5sum | cut -d ' ' -f 1)"
  46. fi
  47. HOST_ID="$DEFAULT_HOST_ID"
  48. # Parse arguments
  49. for arg in "$@"; do
  50. case $arg in
  51. --disable-webserver)
  52. ENABLE_WEBSERVER=0
  53. shift
  54. ;;
  55. --disable-taskexecutor)
  56. ENABLE_TASKEXECUTOR=0
  57. shift
  58. ;;
  59. --enable-mcpserver)
  60. ENABLE_MCP_SERVER=1
  61. shift
  62. ;;
  63. --mcp-host=*)
  64. MCP_HOST="${arg#*=}"
  65. shift
  66. ;;
  67. --mcp-port=*)
  68. MCP_PORT="${arg#*=}"
  69. shift
  70. ;;
  71. --mcp-base-url=*)
  72. MCP_BASE_URL="${arg#*=}"
  73. shift
  74. ;;
  75. --mcp-mode=*)
  76. MCP_MODE="${arg#*=}"
  77. shift
  78. ;;
  79. --mcp-host-api-key=*)
  80. MCP_HOST_API_KEY="${arg#*=}"
  81. shift
  82. ;;
  83. --mcp-script-path=*)
  84. MCP_SCRIPT_PATH="${arg#*=}"
  85. shift
  86. ;;
  87. --consumer-no-beg=*)
  88. CONSUMER_NO_BEG="${arg#*=}"
  89. shift
  90. ;;
  91. --consumer-no-end=*)
  92. CONSUMER_NO_END="${arg#*=}"
  93. shift
  94. ;;
  95. --workers=*)
  96. WORKERS="${arg#*=}"
  97. shift
  98. ;;
  99. --host-id=*)
  100. HOST_ID="${arg#*=}"
  101. shift
  102. ;;
  103. *)
  104. usage
  105. ;;
  106. esac
  107. done
  108. # -----------------------------------------------------------------------------
  109. # Replace env variables in the service_conf.yaml file
  110. # -----------------------------------------------------------------------------
  111. CONF_DIR="/ragflow/conf"
  112. TEMPLATE_FILE="${CONF_DIR}/service_conf.yaml.template"
  113. CONF_FILE="${CONF_DIR}/service_conf.yaml"
  114. rm -f "${CONF_FILE}"
  115. while IFS= read -r line || [[ -n "$line" ]]; do
  116. eval "echo \"$line\"" >> "${CONF_FILE}"
  117. done < "${TEMPLATE_FILE}"
  118. export LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu/"
  119. PY=python3
  120. # -----------------------------------------------------------------------------
  121. # Function(s)
  122. # -----------------------------------------------------------------------------
  123. function task_exe() {
  124. local consumer_id="$1"
  125. local host_id="$2"
  126. JEMALLOC_PATH="$(pkg-config --variable=libdir jemalloc)/libjemalloc.so"
  127. while true; do
  128. LD_PRELOAD="$JEMALLOC_PATH" \
  129. "$PY" rag/svr/task_executor.py "${host_id}_${consumer_id}"
  130. done
  131. }
  132. function start_mcp_server() {
  133. echo "Starting MCP Server on ${MCP_HOST}:${MCP_PORT} with base URL ${MCP_BASE_URL}..."
  134. "$PY" "${MCP_SCRIPT_PATH}" \
  135. --host="${MCP_HOST}" \
  136. --port="${MCP_PORT}" \
  137. --base_url="${MCP_BASE_URL}" \
  138. --mode="${MCP_MODE}" \
  139. --api_key="${MCP_HOST_API_KEY}" \ &
  140. }
  141. # -----------------------------------------------------------------------------
  142. # Start components based on flags
  143. # -----------------------------------------------------------------------------
  144. if [[ "${ENABLE_WEBSERVER}" -eq 1 ]]; then
  145. echo "Starting nginx..."
  146. /usr/sbin/nginx
  147. echo "Starting ragflow_server..."
  148. while true; do
  149. "$PY" api/ragflow_server.py
  150. done &
  151. fi
  152. if [[ "${ENABLE_MCP_SERVER}" -eq 1 ]]; then
  153. start_mcp_server
  154. fi
  155. if [[ "${ENABLE_TASKEXECUTOR}" -eq 1 ]]; then
  156. if [[ "${CONSUMER_NO_END}" -gt "${CONSUMER_NO_BEG}" ]]; then
  157. echo "Starting task executors on host '${HOST_ID}' for IDs in [${CONSUMER_NO_BEG}, ${CONSUMER_NO_END})..."
  158. for (( i=CONSUMER_NO_BEG; i<CONSUMER_NO_END; i++ ))
  159. do
  160. task_exe "${i}" "${HOST_ID}" &
  161. done
  162. else
  163. # Otherwise, start a fixed number of workers
  164. echo "Starting ${WORKERS} task executor(s) on host '${HOST_ID}'..."
  165. for (( i=0; i<WORKERS; i++ ))
  166. do
  167. task_exe "${i}" "${HOST_ID}" &
  168. done
  169. fi
  170. fi
  171. wait