#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" STACK_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)" # shellcheck disable=SC1091 source "${SCRIPT_DIR}/ensure-dirs.sh" cd "${STACK_DIR}" if [[ ! -f .env ]]; then echo "ERROR: .env not found. Run: cp .env.example .env" exit 1 fi set -a # shellcheck disable=SC1091 source .env set +a DATA_ROOT="${DATA_ROOT:-/data}" if ! mountpoint -q "${DATA_ROOT}" 2>/dev/null; then echo "ERROR: ${DATA_ROOT} is not mounted" echo " Complete disk setup (tutorial 04 part A) first" exit 1 fi ensure_localai_dirs "${DATA_ROOT}" if ! docker info &>/dev/null; then echo "ERROR: Docker is not running" exit 1 fi echo "=== LocalAI stack ===" echo "Image: ${LOCALAI_IMAGE:-localai/localai:v4.4.3-gpu-nvidia-cuda-13}" echo "Port: ${LOCALAI_PORT:-8080}" echo "Models: ${DATA_ROOT}/apps/localai/models (empty OK)" echo "GPU: CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}" echo "" docker compose --profile localai pull docker compose --profile localai up -d echo "" echo "Started. Follow logs:" echo " docker compose --profile localai logs -f localai" echo "" echo "Health check:" echo " curl -s http://localhost:${LOCALAI_PORT:-8080}/readyz" echo "" echo "Web UI:" echo " http://localhost:${LOCALAI_PORT:-8080}"