# PURPOSE: # One command manager for Docker-based KnowFlow AI workflow. # # USAGE: # # chmod +x scripts/docker_manager.sh # # ./scripts/docker_manager.sh build # ./scripts/docker_manager.sh start # ./scripts/docker_manager.sh stop # ./scripts/docker_manager.sh restart # ./scripts/docker_manager.sh rebuild # ./scripts/docker_manager.sh test # ./scripts/docker_manager.sh demo # ./scripts/docker_manager.sh shell # ./scripts/docker_manager.sh logs # ./scripts/docker_manager.sh streamlit # ./scripts/docker_manager.sh restart-ui # ./scripts/docker_manager.sh status # ============================================================ #!/bin/bash set -e PROJECT_NAME="KnowFlow AI" DEV_SERVICE="knowflow-dev" STREAMLIT_SERVICE="knowflow-streamlit" print_line() { echo "============================================================" } print_title() { print_line echo "$1" print_line } check_env_file() { if [ ! -f ".env" ]; then print_title "WARNING: .env file not found" echo "Creating .env from .env.example..." cp .env.example .env echo echo "IMPORTANT:" echo "Open .env and add your real CLOUD_API_KEY before running the app." echo fi } build_image() { check_env_file print_title "Building Docker image for $PROJECT_NAME" docker compose build } start_dev() { check_env_file print_title "Starting JupyterLab development container" docker compose up "$DEV_SERVICE" } start_streamlit() { check_env_file print_title "Starting Streamlit demo application" docker compose --profile streamlit up "$STREAMLIT_SERVICE" } stop_all() { print_title "Stopping Docker containers" docker compose down } restart_streamlit() { print_title "Restarting Streamlit demo application" docker compose down docker compose --profile streamlit up "$STREAMLIT_SERVICE" } rebuild_all() { check_env_file print_title "Rebuilding Docker image from scratch" docker compose down docker compose build --no-cache docker compose --profile streamlit up "$STREAMLIT_SERVICE" } run_tests() { check_env_file print_title "Running tests inside Docker" docker compose run --rm "$DEV_SERVICE" pytest tests/ } run_phase2_demo() { check_env_file print_title "Running Phase 2 modular RAG demo inside Docker" docker compose run --rm "$DEV_SERVICE" python scripts/run_phase2_demo.py } open_shell() { check_env_file print_title "Opening shell inside Docker container" docker compose run --rm "$DEV_SERVICE" bash } show_logs() { print_title "Showing Docker logs" docker compose logs -f } show_status() { print_title "Docker status" docker ps echo docker compose ps } clean_docker() { print_title "Cleaning stopped containers and unused Docker cache" docker compose down docker system prune -f } show_help() { print_title "$PROJECT_NAME Docker Manager" echo "Usage:" echo echo "./scripts/docker_manager.sh build # Build Docker image" echo "./scripts/docker_manager.sh start # Start JupyterLab" echo "./scripts/docker_manager.sh streamlit # Start Streamlit app" echo "./scripts/docker_manager.sh stop # Stop containers" echo "./scripts/docker_manager.sh restart-ui # Restart Streamlit app" echo "./scripts/docker_manager.sh rebuild # Full rebuild and start Streamlit" echo "./scripts/docker_manager.sh test # Run pytest inside Docker" echo "./scripts/docker_manager.sh demo # Run Phase 2 RAG CLI demo" echo "./scripts/docker_manager.sh shell # Open Docker shell" echo "./scripts/docker_manager.sh logs # Show Docker logs" echo "./scripts/docker_manager.sh status # Show Docker status" echo "./scripts/docker_manager.sh clean # Clean Docker cache" echo } COMMAND="$1" case "$COMMAND" in build) build_image ;; start) start_dev ;; streamlit) start_streamlit ;; stop) stop_all ;; restart-ui) restart_streamlit ;; rebuild) rebuild_all ;; test) run_tests ;; demo) run_phase2_demo ;; shell) open_shell ;; logs) show_logs ;; status) show_status ;; clean) clean_docker ;; *) show_help ;; esac