| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
|
|
| 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 |