ai-stack: add RAG/MCP stack to the optional-services picker, with dependency cascade
User feedback: wanted chromaDB/rag-server/mcp-server included in the optional-services picker added last commit, not just Gitea/Portainer/ Kiwix/InvokeAI/ComfyUI/Aider. Confirmed against the compose file's depends_on chain before adding: open-webui only depends_on ollama (its OLLAMA_BASE_URL connection works standalone), so none of these three are actually required for regular chat — only Open WebUI's separate RAG tab (routed through rag-server) and MCP tool-calling need them. Mealie's own Ollama usage never touches this stack at all. Bundled chromadb+rag-server+mcp-server as one option (7), not three separate numbers — mcp-server depends_on rag-server depends_on chromadb, so stopping only one of the three would leave the others running against a dead dependency instead of a clean stop. Also added a cascade for the existing kiwix option: mcp-server depends_on kiwix too (not just rag-server), so stopping kiwix without also stopping mcp-server has the same problem — now handled automatically with a dedup pass in case both the kiwix cascade and option 7 add mcp-server to the stop list. Verified all four cases in isolation: kiwix-only correctly cascades to mcp-server, option 7 alone stops the right three, choosing both dedupes to one clean list, and unrelated choices (gitea/portainer) are unaffected.
This commit is contained in:
+36
-10
@@ -161,27 +161,53 @@ install_ai-stack() {
|
|||||||
echo " 4) InvokeAI — image generation (SD/SDXL/Flux)"
|
echo " 4) InvokeAI — image generation (SD/SDXL/Flux)"
|
||||||
echo " 5) ComfyUI — image generation (node-based)"
|
echo " 5) ComfyUI — image generation (node-based)"
|
||||||
echo " 6) Aider — AI pair-programming CLI"
|
echo " 6) Aider — AI pair-programming CLI"
|
||||||
|
echo " 7) RAG/MCP stack — ChromaDB + rag-server + mcp-server, for Open WebUI's"
|
||||||
|
echo " RAG tab and MCP tool-calling. Skip if you don't use"
|
||||||
|
echo " those — plain Ollama chat in Open WebUI (and anything"
|
||||||
|
echo " else, like Mealie, talking to Ollama directly) works"
|
||||||
|
echo " fine without this; only that one tab needs it."
|
||||||
echo ""
|
echo ""
|
||||||
local STOP_CHOICES=""
|
local STOP_CHOICES=""
|
||||||
prompt_text "Stop which of these? (space-separated numbers, blank to keep everything running):" "" STOP_CHOICES
|
prompt_text "Stop which of these? (space-separated numbers, blank to keep everything running):" "" STOP_CHOICES
|
||||||
local _s _svc
|
local _s _svc
|
||||||
declare -a _TO_STOP=()
|
declare -a _TO_STOP=()
|
||||||
|
local _stopping_kiwix=false
|
||||||
for _s in $STOP_CHOICES; do
|
for _s in $STOP_CHOICES; do
|
||||||
_svc=""
|
|
||||||
case "$_s" in
|
case "$_s" in
|
||||||
1) _svc="gitea" ;;
|
1) _TO_STOP+=("gitea") ;;
|
||||||
2) _svc="portainer" ;;
|
2) _TO_STOP+=("portainer") ;;
|
||||||
3) _svc="kiwix" ;;
|
3) _TO_STOP+=("kiwix"); _stopping_kiwix=true ;;
|
||||||
4) _svc="invokeai" ;;
|
4) _TO_STOP+=("invokeai") ;;
|
||||||
5) _svc="comfyui" ;;
|
5) _TO_STOP+=("comfyui") ;;
|
||||||
6) _svc="aider" ;;
|
6) _TO_STOP+=("aider") ;;
|
||||||
|
# Bundled, not three separate numbers: mcp-server depends_on
|
||||||
|
# rag-server which depends_on chromadb, so stopping only one
|
||||||
|
# of the three leaves the others running against a dead
|
||||||
|
# dependency instead of a clean, fully-stopped chain.
|
||||||
|
7) _TO_STOP+=("mcp-server" "rag-server" "chromadb") ;;
|
||||||
*) log_warning "Ignoring unknown choice '$_s'"; continue ;;
|
*) log_warning "Ignoring unknown choice '$_s'"; continue ;;
|
||||||
esac
|
esac
|
||||||
_TO_STOP+=("$_svc")
|
|
||||||
done
|
done
|
||||||
|
# mcp-server also depends_on kiwix (not just rag-server) — stopping
|
||||||
|
# kiwix without also stopping mcp-server leaves it running against a
|
||||||
|
# dependency that's down, the same inconsistent state option 7 above
|
||||||
|
# is written to avoid. Cascade automatically rather than trust the
|
||||||
|
# user to notice the same rule applies here too.
|
||||||
|
if [ "$_stopping_kiwix" = true ] && [[ ! " ${_TO_STOP[*]} " == *" mcp-server "* ]]; then
|
||||||
|
log_info "Kiwix is also a dependency of mcp-server — stopping that too."
|
||||||
|
_TO_STOP+=("mcp-server")
|
||||||
|
fi
|
||||||
if [ ${#_TO_STOP[@]} -gt 0 ]; then
|
if [ ${#_TO_STOP[@]} -gt 0 ]; then
|
||||||
(cd "$AS_DIR" && docker compose stop "${_TO_STOP[@]}") \
|
# Dedupe in case option 7 and the kiwix cascade both added mcp-server.
|
||||||
&& log_success "Stopped: ${_TO_STOP[*]} (images still pulled — bring any back with: docker compose up -d <name>)" \
|
local -a _TO_STOP_UNIQUE=()
|
||||||
|
local _seen=" "
|
||||||
|
for _svc in "${_TO_STOP[@]}"; do
|
||||||
|
[[ "$_seen" == *" $_svc "* ]] && continue
|
||||||
|
_TO_STOP_UNIQUE+=("$_svc")
|
||||||
|
_seen+="$_svc "
|
||||||
|
done
|
||||||
|
(cd "$AS_DIR" && docker compose stop "${_TO_STOP_UNIQUE[@]}") \
|
||||||
|
&& log_success "Stopped: ${_TO_STOP_UNIQUE[*]} (images still pulled — bring any back with: docker compose up -d <name>)" \
|
||||||
|| log_warning "Couldn't stop one or more services — check: docker compose ps"
|
|| log_warning "Couldn't stop one or more services — check: docker compose ps"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user