littleshop/docker-build.sh
SysAdmin caff08cb6f Deploy LittleShop to Hostinger with Docker and BunkerWeb
- Updated Docker configuration for production deployment
- Added SilverPay integration settings
- Configured for admin.thebankofdebbie.giize.com deployment
- Includes all recent security fixes and improvements

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 13:00:17 +01:00

182 lines
4.5 KiB
Bash

#!/bin/bash
# LittleShop Docker Build Script
# This script builds and optionally deploys LittleShop using Docker
set -e
echo "=========================================="
echo "LittleShop Docker Build & Deploy Script"
echo "=========================================="
echo
# Variables
IMAGE_NAME="littleshop"
IMAGE_TAG="latest"
CONTAINER_NAME="littleshop"
ENV_FILE=".env"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Functions
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
# Check for .env file
if [ ! -f "$ENV_FILE" ]; then
if [ -f ".env.production" ]; then
echo "Creating .env from .env.production template..."
cp .env.production .env
print_success ".env file created from template"
else
print_error ".env file not found. Please create one from .env.production template"
exit 1
fi
else
print_success ".env file found"
fi
# Parse command line arguments
BUILD_ONLY=false
PUSH_TO_REGISTRY=false
REGISTRY_URL=""
while [[ $# -gt 0 ]]; do
case $1 in
--build-only)
BUILD_ONLY=true
shift
;;
--push)
PUSH_TO_REGISTRY=true
shift
;;
--registry)
REGISTRY_URL="$2"
PUSH_TO_REGISTRY=true
shift 2
;;
--help)
echo "Usage: $0 [options]"
echo "Options:"
echo " --build-only Build the image without starting containers"
echo " --push Push image to registry"
echo " --registry URL Specify registry URL (implies --push)"
echo " --help Show this help message"
exit 0
;;
*)
print_error "Unknown option: $1"
exit 1
;;
esac
done
# Step 1: Build the Docker image
echo
echo "1. Building Docker image..."
docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .
if [ $? -eq 0 ]; then
print_success "Docker image built successfully: ${IMAGE_NAME}:${IMAGE_TAG}"
else
print_error "Docker build failed"
exit 1
fi
# Step 2: Push to registry if requested
if [ "$PUSH_TO_REGISTRY" = true ]; then
echo
echo "2. Pushing to registry..."
if [ ! -z "$REGISTRY_URL" ]; then
FULL_IMAGE_NAME="${REGISTRY_URL}/${IMAGE_NAME}:${IMAGE_TAG}"
docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${FULL_IMAGE_NAME}
docker push ${FULL_IMAGE_NAME}
print_success "Image pushed to ${FULL_IMAGE_NAME}"
else
docker push ${IMAGE_NAME}:${IMAGE_TAG}
print_success "Image pushed to default registry"
fi
fi
# Step 3: Run containers (unless build-only)
if [ "$BUILD_ONLY" = false ]; then
echo
echo "3. Starting containers with Docker Compose..."
# Stop existing containers
docker-compose down 2>/dev/null || true
# Start new containers
docker-compose up -d
if [ $? -eq 0 ]; then
print_success "Containers started successfully"
else
print_error "Failed to start containers"
exit 1
fi
# Step 4: Wait for health check
echo
echo "4. Waiting for application to be healthy..."
MAX_ATTEMPTS=30
ATTEMPT=0
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
if docker exec ${CONTAINER_NAME} curl -f http://localhost:5000/api/catalog/products > /dev/null 2>&1; then
print_success "Application is healthy!"
break
fi
ATTEMPT=$((ATTEMPT + 1))
echo -n "."
sleep 2
done
if [ $ATTEMPT -eq $MAX_ATTEMPTS ]; then
print_error "Health check failed after $MAX_ATTEMPTS attempts"
echo "Check logs with: docker logs ${CONTAINER_NAME}"
exit 1
fi
# Step 5: Display status
echo
echo "5. Deployment Status:"
echo "===================="
docker-compose ps
echo
print_success "Deployment complete!"
echo
echo "Application is running at: http://localhost:5100"
echo "Admin panel: http://localhost:5100/Admin"
echo
echo "Useful commands:"
echo " View logs: docker logs -f ${CONTAINER_NAME}"
echo " Stop containers: docker-compose down"
echo " Restart: docker-compose restart"
echo " Shell access: docker exec -it ${CONTAINER_NAME} /bin/bash"
else
print_success "Build complete (build-only mode)"
fi
echo
echo "=========================================="
echo "Build completed at $(date)"
echo "==========================================="