Add new infra architecture
This commit is contained in:
289
scripts/setup-local-registry.sh
Executable file
289
scripts/setup-local-registry.sh
Executable file
@@ -0,0 +1,289 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Bakery-IA Local Registry Setup and Base Image Management
|
||||
# Standardized script for setting up local registry and managing base images
|
||||
# Usage: ./scripts/setup-local-registry.sh [start|stop|prepull|push|clean]
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
LOCAL_REGISTRY="localhost:5000"
|
||||
REGISTRY_NAME="bakery-local-registry"
|
||||
REGISTRY_DATA_DIR="$(pwd)/kind-registry"
|
||||
DOCKER_USERNAME="uals"
|
||||
DOCKER_PASSWORD="dckr_pat_zzEY5Q58x1S0puraIoKEtbpue3A"
|
||||
|
||||
# Standardized base images (optimized list)
|
||||
BASE_IMAGES=(
|
||||
"python:3.11-slim"
|
||||
"postgres:17-alpine"
|
||||
"redis:7.4-alpine"
|
||||
"busybox:1.36"
|
||||
"busybox:latest"
|
||||
"curlimages/curl:latest"
|
||||
"bitnami/kubectl:latest"
|
||||
"alpine:3.18"
|
||||
"alpine:3.19"
|
||||
"gcr.io/kaniko-project/executor:v1.23.0"
|
||||
"alpine/git:2.43.0"
|
||||
)
|
||||
|
||||
echo "=========================================="
|
||||
echo "Bakery-IA Local Registry Manager"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Function to authenticate with Docker Hub
|
||||
authenticate_docker_hub() {
|
||||
echo "Authenticating with Docker Hub..."
|
||||
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
|
||||
echo "✓ Authentication successful"
|
||||
}
|
||||
|
||||
# Function to start local registry
|
||||
start_registry() {
|
||||
echo "Starting local registry at $LOCAL_REGISTRY..."
|
||||
|
||||
# Create data directory
|
||||
mkdir -p "$REGISTRY_DATA_DIR"
|
||||
|
||||
# Check if registry is already running
|
||||
if docker ps -a --format '{{.Names}}' | grep -q "^$REGISTRY_NAME$"; then
|
||||
echo "Registry container already exists"
|
||||
if docker ps --format '{{.Names}}' | grep -q "^$REGISTRY_NAME$"; then
|
||||
echo "✓ Registry is already running"
|
||||
return 0
|
||||
else
|
||||
echo "Starting existing registry container..."
|
||||
docker start "$REGISTRY_NAME"
|
||||
fi
|
||||
else
|
||||
# Start new registry container
|
||||
docker run -d -p 5000:5000 --name "$REGISTRY_NAME" \
|
||||
-v "$REGISTRY_DATA_DIR:/var/lib/registry" \
|
||||
registry:2
|
||||
fi
|
||||
|
||||
# Wait for registry to be ready
|
||||
echo "Waiting for registry to be ready..."
|
||||
for i in {1..30}; do
|
||||
if curl -s http://$LOCAL_REGISTRY/v2/ > /dev/null 2>&1; then
|
||||
echo "✓ Registry is ready"
|
||||
return 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "❌ Registry failed to start"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Function to stop local registry
|
||||
stop_registry() {
|
||||
echo "Stopping local registry..."
|
||||
docker stop "$REGISTRY_NAME" || true
|
||||
echo "✓ Registry stopped"
|
||||
}
|
||||
|
||||
# Function to clean registry
|
||||
clean_registry() {
|
||||
echo "Cleaning local registry..."
|
||||
stop_registry
|
||||
rm -rf "$REGISTRY_DATA_DIR"
|
||||
echo "✓ Registry cleaned"
|
||||
}
|
||||
|
||||
# Function to pre-pull base images
|
||||
prepull_images() {
|
||||
authenticate_docker_hub
|
||||
|
||||
echo "Pre-pulling base images..."
|
||||
for image in "${BASE_IMAGES[@]}"; do
|
||||
echo "Pulling: $image"
|
||||
docker pull "$image"
|
||||
echo " ✓ Successfully pulled $image"
|
||||
done
|
||||
|
||||
echo "✓ All base images pre-pulled"
|
||||
}
|
||||
|
||||
# Function to push images to local registry
|
||||
push_images_to_registry() {
|
||||
echo "Pushing base images to local registry..."
|
||||
|
||||
for image in "${BASE_IMAGES[@]}"; do
|
||||
local_image="$LOCAL_REGISTRY/$(echo $image | sed 's|/|_|g' | sed 's|:|_|g')"
|
||||
echo "Tagging and pushing: $image → $local_image"
|
||||
|
||||
# Tag the image
|
||||
docker tag "$image" "$local_image"
|
||||
|
||||
# Push to local registry
|
||||
docker push "$local_image"
|
||||
|
||||
echo " ✓ Pushed $local_image"
|
||||
done
|
||||
|
||||
echo "✓ All base images pushed to local registry"
|
||||
|
||||
# Show registry contents
|
||||
echo "Registry contents:"
|
||||
curl -s http://$LOCAL_REGISTRY/v2/_catalog | jq . || echo "Registry is running"
|
||||
}
|
||||
|
||||
# Function to update Dockerfiles
|
||||
update_dockerfiles() {
|
||||
echo "Updating Dockerfiles to use local registry..."
|
||||
|
||||
# Update all Dockerfiles
|
||||
find services -name "Dockerfile" -exec sed -i '' \
|
||||
's|FROM python:3.11-slim|FROM localhost:5000/python_3.11-slim|g' {} +
|
||||
|
||||
# Also update any remaining python references
|
||||
find services -name "Dockerfile" -exec sed -i '' \
|
||||
's|ghcr.io/library/python:3.11-slim|localhost:5000/python_3.11-slim|g' {} +
|
||||
|
||||
echo "✓ Dockerfiles updated to use local registry"
|
||||
}
|
||||
|
||||
# Function to revert Dockerfiles
|
||||
revert_dockerfiles() {
|
||||
echo "Reverting Dockerfiles to use original images..."
|
||||
|
||||
# Revert all Dockerfiles
|
||||
find services -name "Dockerfile" -exec sed -i '' \
|
||||
's|FROM localhost:5000/python_3.11-slim|FROM python:3.11-slim|g' {} +
|
||||
|
||||
echo "✓ Dockerfiles reverted to original images"
|
||||
}
|
||||
|
||||
# Function to show registry status
|
||||
show_status() {
|
||||
echo "Local Registry Status:"
|
||||
echo "---------------------"
|
||||
|
||||
if docker ps --format '{{.Names}}' | grep -q "^$REGISTRY_NAME$"; then
|
||||
echo "Status: Running"
|
||||
echo "Address: $LOCAL_REGISTRY"
|
||||
echo "Data Directory: $REGISTRY_DATA_DIR"
|
||||
|
||||
echo ""
|
||||
echo "Images in registry:"
|
||||
curl -s http://$LOCAL_REGISTRY/v2/_catalog | jq -r '.repositories[]' || echo "Registry accessible"
|
||||
else
|
||||
echo "Status: Stopped"
|
||||
echo "To start: ./scripts/setup-local-registry.sh start"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to show help
|
||||
show_help() {
|
||||
echo "Usage: $0 [command]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " start Start local registry"
|
||||
echo " stop Stop local registry"
|
||||
echo " prepull Pre-pull base images from Docker Hub"
|
||||
echo " push Push pre-pulled images to local registry"
|
||||
echo " update Update Dockerfiles to use local registry"
|
||||
echo " revert Revert Dockerfiles to original images"
|
||||
echo " clean Clean registry (stop + remove data)"
|
||||
echo " status Show registry status"
|
||||
echo " all Run prepull + start + push + update"
|
||||
echo " help Show this help message"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 start prepull push update"
|
||||
echo " $0 all"
|
||||
echo " $0 clean"
|
||||
}
|
||||
|
||||
# Main script logic
|
||||
if [ $# -eq 0 ]; then
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
COMMAND="$1"
|
||||
shift
|
||||
|
||||
case "$COMMAND" in
|
||||
start)
|
||||
start_registry
|
||||
;;
|
||||
stop)
|
||||
stop_registry
|
||||
;;
|
||||
prepull)
|
||||
prepull_images
|
||||
;;
|
||||
push)
|
||||
push_images_to_registry
|
||||
;;
|
||||
update)
|
||||
update_dockerfiles
|
||||
;;
|
||||
revert)
|
||||
revert_dockerfiles
|
||||
;;
|
||||
clean)
|
||||
clean_registry
|
||||
;;
|
||||
status)
|
||||
show_status
|
||||
;;
|
||||
all)
|
||||
authenticate_docker_hub
|
||||
start_registry
|
||||
prepull_images
|
||||
push_images_to_registry
|
||||
update_dockerfiles
|
||||
show_status
|
||||
;;
|
||||
help|--help|-h)
|
||||
show_help
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: $COMMAND"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Run additional commands if provided
|
||||
for cmd in "$@"; do
|
||||
case "$cmd" in
|
||||
start)
|
||||
start_registry
|
||||
;;
|
||||
stop)
|
||||
stop_registry
|
||||
;;
|
||||
prepull)
|
||||
prepull_images
|
||||
;;
|
||||
push)
|
||||
push_images_to_registry
|
||||
;;
|
||||
update)
|
||||
update_dockerfiles
|
||||
;;
|
||||
revert)
|
||||
revert_dockerfiles
|
||||
;;
|
||||
clean)
|
||||
clean_registry
|
||||
;;
|
||||
status)
|
||||
show_status
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: $cmd"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Operation completed!"
|
||||
echo "=========================================="
|
||||
Reference in New Issue
Block a user