feat: add uninstall/teardown scripts + uninstall section in README
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env bash
|
||||
# cAIc — Docker stack teardown
|
||||
# Removes all containers, volumes, images, and generated files
|
||||
# created by setup-wizard / docker compose.
|
||||
# Run from the docker deployment directory. Use -y to skip prompts.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
prompt_yn() {
|
||||
if [ "${1:-}" = "-y" ]; then return 0; fi
|
||||
[ "$SKIP" = true ] && return 0
|
||||
local msg=$1; local default=${2:-n}
|
||||
if [[ "$default" == "y" ]]; then
|
||||
read -p "$msg [Y/n] " r; [[ -z "$r" || "$r" =~ ^[Yy] ]]
|
||||
else
|
||||
read -p "$msg [y/N] " r; [[ "$r" =~ ^[Yy] ]]
|
||||
fi
|
||||
}
|
||||
|
||||
SKIP=false
|
||||
[ "${1:-}" = "-y" ] && SKIP=true
|
||||
|
||||
echo "cAIc Docker stack teardown"
|
||||
echo "=========================="
|
||||
|
||||
# ---- Step 1: docker compose down -v ----
|
||||
if [ -f docker-compose.yml ] || [ -f compose.yml ]; then
|
||||
if prompt_yn "Stop Docker stack and remove volumes?" n; then
|
||||
docker compose down -v 2>/dev/null || docker-compose down -v 2>/dev/null || true
|
||||
echo " Docker stack stopped and volumes removed"
|
||||
else
|
||||
warn " Skipped: Docker stack left intact"
|
||||
fi
|
||||
else
|
||||
echo " Skipped: no compose file found"
|
||||
fi
|
||||
|
||||
# ---- Step 2: Remove Docker images ----
|
||||
if prompt_yn "Remove cAIc Docker image?" n; then
|
||||
docker rmi caic:latest 2>/dev/null || true
|
||||
echo " Removed caic:latest"
|
||||
|
||||
warn "Remove SearXNG / Qdrant / RabbitMQ / llama-server / Ollama images?"
|
||||
if prompt_yn " Remove service images?" n; then
|
||||
for tag in searxng/searxng qdrant/qdrant rabbitmq:4-management \
|
||||
ghcr.io/ggml-org/llama.cpp ollama/ollama; do
|
||||
docker rmi "$tag" 2>/dev/null || true
|
||||
done
|
||||
echo " Service images removed"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---- Step 3: Volumes ----
|
||||
if prompt_yn "Remove remaining Docker volumes?" n; then
|
||||
for vol in caic_data caic_uploads searxng_config qdrant_storage rabbitmq_data ollama_models; do
|
||||
docker volume rm "$vol" 2>/dev/null || true
|
||||
done
|
||||
echo " Docker volumes removed"
|
||||
fi
|
||||
|
||||
# ---- Step 4: .env ----
|
||||
if [ -f .env ]; then
|
||||
if prompt_yn "Remove .env file?" n; then
|
||||
rm -f .env
|
||||
echo " .env removed"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---- Step 5: generated directories ----
|
||||
for dir in secrets searxng; do
|
||||
if [ -d "$dir" ]; then
|
||||
if prompt_yn "Remove $dir/ directory?" n; then
|
||||
rm -rf "$dir"
|
||||
echo " $dir/ removed"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# ---- Step 6: generated files ----
|
||||
for f in setup.log docker-compose.yml compose.yml; do
|
||||
[ -f "$f" ] || continue
|
||||
if prompt_yn "Remove $f?" n; then
|
||||
rm -f "$f"
|
||||
echo " $f removed"
|
||||
fi
|
||||
done
|
||||
|
||||
# ---- Step 7: model files (with big warning) ----
|
||||
if [ -d models ]; then
|
||||
echo ""
|
||||
echo -e "${RED}WARNING: model files (*.gguf) can be gigabytes each.${NC}"
|
||||
if prompt_yn "Remove all model files from ./models/?" n; then
|
||||
rm -rf models
|
||||
echo " models/ removed"
|
||||
else
|
||||
echo " models/ preserved"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}cAIc Docker stack teardown complete.${NC}"
|
||||
echo "Preserved:"
|
||||
echo " - ./models/ (unless you accepted removal)"
|
||||
echo ""
|
||||
echo "Note: Docker Engine itself is not removed. To remove it:"
|
||||
echo " sudo apt-get remove docker docker-engine docker.io containerd runc"
|
||||
Reference in New Issue
Block a user