consolidate everything into the repo folder; add compose management comments
All scripts now default BASE to their own directory (SCRIPT_DIR) instead of ~/docker/ai-stack, so after a git clone the user never needs to change folders — docker-compose.yml, .env, settings, and data dirs all live next to the scripts. configure-searxng-safesearch.sh and configure-storage.sh do the same for standalone use (still honoured when called with BASE= from a parent script). docker-compose.yml (generated by both setup scripts) gains a comment block at the top listing the everyday docker compose commands: up -d / down / restart / stop / logs -f / pull / ps so the file itself is the reference for managing containers. .gitignore added to exclude generated files (docker-compose.yml, .env, requirements.txt, helper scripts) and data directories (workspace/, kiwix/, searxng/, gitea/, etc.) from git tracking. https://claude.ai/code/session_012gDnantBmFTWZGCiKyjazx
This commit is contained in:
+24
@@ -0,0 +1,24 @@
|
||||
# Generated by setup scripts — not tracked
|
||||
docker-compose.yml
|
||||
.env
|
||||
requirements.txt
|
||||
mcp_requirements.txt
|
||||
start.sh
|
||||
stop.sh
|
||||
status.sh
|
||||
pull-models.sh
|
||||
Caddyfile.example
|
||||
.ufw-done
|
||||
|
||||
# Data directories
|
||||
workspace/
|
||||
repos/
|
||||
papers/
|
||||
index/
|
||||
logs/
|
||||
kiwix/
|
||||
gitea/
|
||||
portainer-data/
|
||||
invokeai-data/
|
||||
invokeai-outputs/
|
||||
searxng/
|
||||
@@ -34,7 +34,7 @@ LEVEL="moderate"
|
||||
DISABLE_CATS=""
|
||||
DISABLE_ENGINES_EXTRA=""
|
||||
ENABLE_ENGINES_EXTRA=""
|
||||
BASE="${BASE:-$HOME/docker/ai-stack}"
|
||||
BASE="${BASE:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
|
||||
|
||||
# ── Parse arguments ───────────────────────────────────────────────────────────
|
||||
while [[ $# -gt 0 ]]; do
|
||||
|
||||
@@ -10,7 +10,7 @@ ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[!!]${NC} $*"; }
|
||||
die() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
|
||||
|
||||
BASE="$HOME/docker/ai-stack"
|
||||
BASE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
COMPOSE="$BASE/docker-compose.yml"
|
||||
|
||||
[[ -f "$COMPOSE" ]] || die "docker-compose.yml not found at $BASE — run local-ai-setup.sh first"
|
||||
|
||||
+17
-2
@@ -31,8 +31,8 @@ FORCE=false
|
||||
for arg in "$@"; do [[ "$arg" == "--force" ]] && FORCE=true; done
|
||||
|
||||
# ── config ────────────────────────────────────────────────────────────────────
|
||||
BASE="$HOME/docker/ai-stack"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BASE="$SCRIPT_DIR"
|
||||
LOCAL_IP=$(ip route get 1.1.1.1 2>/dev/null | grep -oP 'src \K\S+' \
|
||||
|| hostname -I | awk '{print $1}')
|
||||
[[ -z "$LOCAL_IP" ]] && read -rp "Enter your LAN IP: " LOCAL_IP
|
||||
@@ -1033,8 +1033,23 @@ fi
|
||||
# Always written — it's the stack definition and safe to update
|
||||
cat > "$BASE/docker-compose.yml" << COMPOSE
|
||||
# Local AI Stack — generated $(date '+%Y-%m-%d')
|
||||
# Edit \$BASE/.env to add API tokens.
|
||||
# Edit .env in this folder to add API tokens.
|
||||
# GPU: OLLAMA_NUM_GPU=999 means "use all available VRAM" — auto-adapts to any GPU.
|
||||
#
|
||||
# ── Common commands (run from this folder) ─────────────────────────────────────
|
||||
# Start everything: docker compose up -d
|
||||
# Stop everything: docker compose down
|
||||
# Restart one service: docker compose restart <service>
|
||||
# Stop one service: docker compose stop <service>
|
||||
# Start one service: docker compose up -d <service>
|
||||
# Follow all logs: docker compose logs -f
|
||||
# Follow one service logs: docker compose logs -f <service>
|
||||
# Pull latest images: docker compose pull && docker compose up -d
|
||||
# Show status: docker compose ps
|
||||
#
|
||||
# Services: ollama open-webui chromadb rag-server mcp-server
|
||||
# searxng kiwix gitea invokeai portainer
|
||||
# ───────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
services:
|
||||
|
||||
|
||||
+17
-2
@@ -13,8 +13,8 @@ section() { echo -e "\n${BOLD}━━━ $* ━━━${NC}"; }
|
||||
FORCE=false; NO_PULL=false
|
||||
for a in "$@"; do [[ "$a" == "--force" ]] && FORCE=true; [[ "$a" == "--no-pull" ]] && NO_PULL=true; done
|
||||
|
||||
BASE="$HOME/docker/ai-stack"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BASE="$SCRIPT_DIR"
|
||||
LOCAL_IP=$(ip route get 1.1.1.1 2>/dev/null | grep -oP 'src \K\S+' || hostname -I | awk '{print $1}')
|
||||
[[ -z "$LOCAL_IP" ]] && read -rp "Enter LAN IP: " LOCAL_IP
|
||||
|
||||
@@ -720,9 +720,24 @@ fi
|
||||
section "Docker Compose"
|
||||
# =============================================================================
|
||||
cat > "$BASE/docker-compose.yml" << COMPOSE
|
||||
# Local AI Stack — 2026-03-20
|
||||
# Local AI Stack — generated $(date '+%Y-%m-%d')
|
||||
# GPU: OLLAMA_NUM_GPU=999 uses all available VRAM automatically (V100/RTX/any)
|
||||
# Context: OLLAMA_NUM_CTX= set by detected VRAM (GB)
|
||||
#
|
||||
# ── Common commands (run from this folder) ─────────────────────────────────────
|
||||
# Start everything: docker compose up -d
|
||||
# Stop everything: docker compose down
|
||||
# Restart one service: docker compose restart <service>
|
||||
# Stop one service: docker compose stop <service>
|
||||
# Start one service: docker compose up -d <service>
|
||||
# Follow all logs: docker compose logs -f
|
||||
# Follow one service logs: docker compose logs -f <service>
|
||||
# Pull latest images: docker compose pull && docker compose up -d
|
||||
# Show status: docker compose ps
|
||||
#
|
||||
# Services: ollama open-webui chromadb rag-server mcp-server
|
||||
# searxng kiwix gitea invokeai portainer
|
||||
# ───────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
services:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user