ai-stack: offer to stop optional services after install instead of always running everything
User feedback: local-ai-setup.sh always brings up the entire stack unconditionally (Gitea, Portainer, Kiwix, InvokeAI, ComfyUI, Aider, alongside the core Ollama/Open WebUI/ChromaDB/RAG/MCP) with no way to opt out — e.g. Gitea when you already run git elsewhere, or Portainer when you manage Docker some other way. Didn't touch local-ai-setup.sh's own compose generation for this (it's vendored upstream code, and other services reference these by container name/network in ways that would need individual auditing to make safely conditional). Instead, added a post-install picker in the wrapper: after the full stack starts, offer to `docker compose stop` whichever of the six non-core services aren't wanted. Images are already pulled either way, so anything stopped comes back later with a plain `docker compose up -d <name>` — no reinstall needed. Verified the choice-parsing loop in isolation: "1 4 9 3" correctly warns on the invalid "9" and resolves to gitea/invokeai/kiwix.
This commit is contained in:
@@ -35,6 +35,7 @@ install_ai-stack() {
|
||||
echo "[DRY-RUN] Would optionally collect cloud LLM provider keys (Groq/DeepInfra/OpenAI/OpenRouter)"
|
||||
echo "[DRY-RUN] Would run the app installer local-ai-setup.sh (Docker/NVIDIA toolkit, VRAM-aware models, generates compose/.env, starts stack, registers systemd 'local-ai')"
|
||||
echo "[DRY-RUN] Would offer an optional vision-capable model to pull (moondream/llava/qwen2.5vl/llama3.2-vision) via the generated pull-models.sh"
|
||||
echo "[DRY-RUN] Would offer to stop optional services not wanted (Gitea/Portainer/Kiwix/InvokeAI/ComfyUI/Aider) after the full stack starts"
|
||||
echo "[DRY-RUN] Would wire cloud providers into Open WebUI (OPENAI_API_BASE_URLS) preserving the local RAG connection"
|
||||
echo "[DRY-RUN] Would write gpu-mode.sh and optionally enable the GPU switcher (one small GPU shared by Ollama and InvokeAI/ComfyUI)"
|
||||
echo "[DRY-RUN] Would attach Open WebUI to caddy_net and configure Caddy (open-webui:8080, host port 3000)"
|
||||
@@ -135,6 +136,56 @@ install_ai-stack() {
|
||||
# e.g. requirements.txt.
|
||||
ensure_docker_dir_ownership "$AS_DIR"
|
||||
|
||||
# ── Optional services — not everyone wants the whole stack running ────────
|
||||
# local-ai-setup.sh above always generates and starts every service in the
|
||||
# stack unconditionally — Ollama/Open WebUI/ChromaDB/RAG/MCP (the core) plus
|
||||
# Gitea, Portainer, Kiwix, InvokeAI, ComfyUI, and Aider. Several of those
|
||||
# are genuinely optional depending on the box — e.g. Gitea when you already
|
||||
# run git elsewhere, or Portainer when you manage Docker some other way.
|
||||
# Rather than make local-ai-setup.sh's own compose generation conditional
|
||||
# (risky: it's vendored upstream code, and other services reference these
|
||||
# by container name/network in ways that would need auditing one by one),
|
||||
# just stop the ones not wanted after the fact — images are already pulled
|
||||
# either way, and `docker compose up -d <name>` brings any of them back
|
||||
# later with no reinstall needed. User feedback: wanted this choice instead
|
||||
# of always getting the full stack.
|
||||
if [ "$INSTALLER_RAN" = true ]; then
|
||||
echo ""
|
||||
log_info "The full stack is running. Some of these are genuinely optional —"
|
||||
log_info "stop the ones you don't need (start any of them again later with"
|
||||
log_info "'docker compose up -d <service>', no reinstall required):"
|
||||
echo ""
|
||||
echo " 1) Gitea — skip if you already run git elsewhere"
|
||||
echo " 2) Portainer — skip if you manage Docker some other way"
|
||||
echo " 3) Kiwix — offline Wikipedia/docs server"
|
||||
echo " 4) InvokeAI — image generation (SD/SDXL/Flux)"
|
||||
echo " 5) ComfyUI — image generation (node-based)"
|
||||
echo " 6) Aider — AI pair-programming CLI"
|
||||
echo ""
|
||||
local STOP_CHOICES=""
|
||||
prompt_text "Stop which of these? (space-separated numbers, blank to keep everything running):" "" STOP_CHOICES
|
||||
local _s _svc
|
||||
declare -a _TO_STOP=()
|
||||
for _s in $STOP_CHOICES; do
|
||||
_svc=""
|
||||
case "$_s" in
|
||||
1) _svc="gitea" ;;
|
||||
2) _svc="portainer" ;;
|
||||
3) _svc="kiwix" ;;
|
||||
4) _svc="invokeai" ;;
|
||||
5) _svc="comfyui" ;;
|
||||
6) _svc="aider" ;;
|
||||
*) log_warning "Ignoring unknown choice '$_s'"; continue ;;
|
||||
esac
|
||||
_TO_STOP+=("$_svc")
|
||||
done
|
||||
if [ ${#_TO_STOP[@]} -gt 0 ]; then
|
||||
(cd "$AS_DIR" && docker compose stop "${_TO_STOP[@]}") \
|
||||
&& log_success "Stopped: ${_TO_STOP[*]} (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"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ── Wire cloud providers into the generated compose ───────────────────────
|
||||
if [ ${#CLOUD_NAMES[@]} -gt 0 ] && [ -f "$AS_DIR/docker-compose.yml" ]; then
|
||||
# Prepend the local RAG connection so RAG keeps working, then the clouds.
|
||||
|
||||
Reference in New Issue
Block a user