Spaces:
Sleeping
Sleeping
File size: 4,422 Bytes
6810092 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | #!/bin/bash
# Docker Build and Test Script for Wall Color Visualizer API
set -e # Exit on error
echo "π³ Wall Color Visualizer - Docker Build Script"
echo "=============================================="
echo ""
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Function to print colored output
print_success() {
echo -e "${GREEN}β $1${NC}"
}
print_error() {
echo -e "${RED}β $1${NC}"
}
print_warning() {
echo -e "${YELLOW}β $1${NC}"
}
print_info() {
echo -e "βΉ $1"
}
# Parse command line arguments
BUILD_TYPE="${1:-huggingface}" # Default to huggingface
IMAGE_NAME="wall-color-api"
CONTAINER_NAME="wall-color-api-test"
case $BUILD_TYPE in
"huggingface"|"hf")
DOCKERFILE="Dockerfile"
PORT=7860
print_info "Building for Hugging Face (port $PORT)"
;;
"local")
DOCKERFILE="Dockerfile.local"
PORT=8000
print_info "Building for local development (port $PORT)"
;;
"compose")
print_info "Using Docker Compose"
echo ""
docker-compose up --build
exit 0
;;
*)
print_error "Unknown build type: $BUILD_TYPE"
echo "Usage: $0 [huggingface|local|compose]"
exit 1
;;
esac
echo ""
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
print_error "Docker is not installed!"
echo "Please install Docker first: https://docs.docker.com/get-docker/"
exit 1
fi
print_success "Docker is installed"
# Check if Dockerfile exists
if [ ! -f "$DOCKERFILE" ]; then
print_error "Dockerfile '$DOCKERFILE' not found!"
exit 1
fi
print_success "Dockerfile found: $DOCKERFILE"
echo ""
print_info "Step 1: Building Docker image..."
echo ""
# Build the Docker image
if docker build -f "$DOCKERFILE" -t "$IMAGE_NAME:$BUILD_TYPE" .; then
print_success "Docker image built successfully!"
else
print_error "Docker build failed!"
exit 1
fi
echo ""
print_info "Step 2: Stopping any existing containers..."
# Stop and remove existing container if running
if docker ps -a | grep -q "$CONTAINER_NAME"; then
docker stop "$CONTAINER_NAME" 2>/dev/null || true
docker rm "$CONTAINER_NAME" 2>/dev/null || true
print_success "Cleaned up existing container"
fi
echo ""
print_info "Step 3: Starting container..."
echo ""
# Run the container
if docker run -d \
--name "$CONTAINER_NAME" \
-p "$PORT:$PORT" \
"$IMAGE_NAME:$BUILD_TYPE"; then
print_success "Container started successfully!"
else
print_error "Failed to start container!"
exit 1
fi
echo ""
print_info "Step 4: Waiting for API to be ready..."
# Wait for the API to be ready
MAX_ATTEMPTS=30
ATTEMPT=0
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
if curl -s "http://localhost:$PORT/health" > /dev/null 2>&1; then
print_success "API is ready!"
break
fi
ATTEMPT=$((ATTEMPT + 1))
if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
print_error "API failed to start within 30 seconds"
echo ""
echo "Container logs:"
docker logs "$CONTAINER_NAME"
exit 1
fi
echo -n "."
sleep 1
done
echo ""
echo ""
print_success "Deployment successful!"
echo ""
echo "=============================================="
echo "π Container Information:"
echo "=============================================="
echo "Container Name: $CONTAINER_NAME"
echo "Image: $IMAGE_NAME:$BUILD_TYPE"
echo ""
echo "π Access URLs:"
echo " - API Root: http://localhost:$PORT/"
echo " - Health Check: http://localhost:$PORT/health"
echo " - API Docs: http://localhost:$PORT/docs"
echo ""
echo "π§ Useful Commands:"
echo " - View logs: docker logs -f $CONTAINER_NAME"
echo " - Stop: docker stop $CONTAINER_NAME"
echo " - Remove: docker rm $CONTAINER_NAME"
echo " - Shell access: docker exec -it $CONTAINER_NAME /bin/bash"
echo ""
echo "=============================================="
# Test the API
echo ""
print_info "Running quick API test..."
echo ""
HEALTH_RESPONSE=$(curl -s "http://localhost:$PORT/health")
echo "Health check response:"
echo "$HEALTH_RESPONSE" | python3 -m json.tool 2>/dev/null || echo "$HEALTH_RESPONSE"
echo ""
print_success "All tests passed!"
echo ""
print_warning "Press Ctrl+C to stop viewing logs, container will keep running"
echo ""
# Follow logs
docker logs -f "$CONTAINER_NAME"
|