Files
Keybard-Vagabond-Demo/build/bookwyrm/build.sh

125 lines
3.5 KiB
Bash
Raw Normal View History

#!/bin/bash
echo "🚀 Building Production-Optimized BookWyrm Containers..."
echo "Optimized build targeting ~400MB final image size"
# Exit on any error
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
print_error "Docker is not running. Please start Docker and try again."
exit 1
fi
echo "Building optimized containers for ARM64 architecture..."
echo "This will build:"
echo -e "${YELLOW}bookwyrm-base${NC} - Shared base image (~400MB)"
echo -e "${YELLOW}bookwyrm-web${NC} - Web server (Nginx + Django/Gunicorn, ~450MB)"
echo -e "${YELLOW}bookwyrm-worker${NC} - Background workers (Celery + Beat, ~450MB)"
echo ""
# Step 1: Build optimized base image
echo "Step 1/3: Building optimized base image..."
cd bookwyrm-base
if docker build --platform linux/arm64 -t bookwyrm-base:latest .; then
print_status "Base image built successfully!"
else
print_error "Failed to build base image"
exit 1
fi
cd ..
# Step 2: Build optimized web container
echo ""
echo "Step 2/3: Building optimized web container..."
cd bookwyrm-web
if docker build --platform linux/arm64 -t <YOUR_REGISTRY_URL>/library/bookwyrm-web:latest .; then
print_status "Web container built successfully!"
else
print_error "Failed to build web container"
exit 1
fi
cd ..
# Step 3: Build optimized worker container
echo ""
echo "Step 3/3: Building optimized worker container..."
cd bookwyrm-worker
if docker build --platform linux/arm64 -t <YOUR_REGISTRY_URL>/library/bookwyrm-worker:latest .; then
print_status "Worker container built successfully!"
else
print_error "Failed to build worker container"
exit 1
fi
cd ..
echo ""
echo "🎉 All containers built successfully!"
# Show image sizes
echo ""
echo "📊 Built image sizes:"
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep -E "(bookwyrm-base|bookwyrm-web|bookwyrm-worker)" | grep -v optimized
echo ""
echo "Built containers:"
echo " • <YOUR_REGISTRY_URL>/library/bookwyrm-web:latest"
echo " • <YOUR_REGISTRY_URL>/library/bookwyrm-worker:latest"
# Ask if user wants to push
echo ""
read -p "Push containers to Harbor registry? (y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo ""
echo "🚀 Pushing containers to registry..."
# Login check
if ! docker info 2>/dev/null | grep -q "<YOUR_REGISTRY_URL>"; then
print_warning "You may need to login to Harbor registry first:"
echo ""
fi
echo "Pushing web container..."
if docker push <YOUR_REGISTRY_URL>/library/bookwyrm-web:latest; then
print_status "Web container pushed successfully!"
else
print_error "Failed to push web container"
fi
echo ""
echo "Pushing worker container..."
if docker push <YOUR_REGISTRY_URL>/library/bookwyrm-worker:latest; then
print_status "Worker container pushed successfully!"
else
print_error "Failed to push worker container"
fi
echo ""
print_status "All containers pushed to Harbor registry!"
else
echo "Skipping push. You can push later with:"
echo " docker push <YOUR_REGISTRY_URL>/library/bookwyrm-web:latest"
echo " docker push <YOUR_REGISTRY_URL>/library/bookwyrm-worker:latest"
fi