diff --git a/web-gateway/build-multiarch.sh b/web-gateway/build-multiarch.sh index beb6e6b..3cf579f 100755 --- a/web-gateway/build-multiarch.sh +++ b/web-gateway/build-multiarch.sh @@ -34,20 +34,42 @@ fi # Build and push multi-arch image echo "Building for platforms: ${PLATFORMS}..." -docker buildx build \ - --platform "${PLATFORMS}" \ - --tag "${IMAGE_NAME}:${IMAGE_TAG}" \ - --push \ - . -echo "============================================" -echo "✅ Multi-arch image built successfully!" -echo "============================================" -echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" -echo "" -echo "Test on different platforms:" -echo " amd64 (x86_64): docker run --rm ${IMAGE_NAME}:${IMAGE_TAG} node --version" -echo " arm64 (RPi 4): docker run --rm ${IMAGE_NAME}:${IMAGE_TAG} node --version" -echo "" -echo "Verify architectures:" -echo " docker buildx imagetools inspect ${IMAGE_NAME}:${IMAGE_TAG}" +# Check if PUSH is set to true +if [ "${PUSH}" = "true" ]; then + echo "Building and pushing to registry..." + docker buildx build \ + --platform "${PLATFORMS}" \ + --tag "${IMAGE_NAME}:${IMAGE_TAG}" \ + --push \ + . + + echo "============================================" + echo "✅ Multi-arch image built and pushed!" + echo "============================================" + echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" + echo "" + echo "Verify architectures:" + echo " docker buildx imagetools inspect ${IMAGE_NAME}:${IMAGE_TAG}" +else + # For multi-arch, save to local registry cache + echo "Building locally (use PUSH=true to push to registry)..." + docker buildx build \ + --platform "${PLATFORMS}" \ + --tag "${IMAGE_NAME}:${IMAGE_TAG}" \ + . + + echo "============================================" + echo "✅ Multi-arch image built successfully!" + echo "============================================" + echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" + echo "" + echo "Note: Multi-arch images are in buildx cache." + echo "To push to registry:" + echo " PUSH=true ./build-multiarch.sh" + echo "" + echo "To load single arch locally:" + echo " docker buildx build --platform linux/amd64 -t ${IMAGE_NAME}:${IMAGE_TAG} --load ." + echo " or" + echo " docker buildx build --platform linux/arm64 -t ${IMAGE_NAME}:${IMAGE_TAG} --load ." +fi diff --git a/web-gateway/transfer-to-rpi.sh b/web-gateway/transfer-to-rpi.sh new file mode 100755 index 0000000..4fa17cc --- /dev/null +++ b/web-gateway/transfer-to-rpi.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# Transfer Docker image to Raspberry Pi and load into K3s + +set -e + +IMAGE_NAME="${IMAGE_NAME:-easylinux/web-gateway}" +IMAGE_TAG="${IMAGE_TAG:-latest}" +RPI_HOST="${RPI_HOST:-}" +RPI_USER="${RPI_USER:-pi}" + +if [ -z "$RPI_HOST" ]; then + echo "Error: RPI_HOST not set" + echo "Usage: RPI_HOST=192.168.1.100 ./transfer-to-rpi.sh" + echo " or: RPI_HOST=rpi4.local RPI_USER=myuser ./transfer-to-rpi.sh" + exit 1 +fi + +echo "============================================" +echo "Transfer Docker Image to Raspberry Pi" +echo "============================================" +echo "Image: ${IMAGE_NAME}:${IMAGE_TAG}" +echo "Target: ${RPI_USER}@${RPI_HOST}" +echo "============================================" + +# Step 1: Build ARM64 image locally +echo "Step 1/4: Building ARM64 image..." +docker buildx build \ + --platform linux/arm64 \ + --tag "${IMAGE_NAME}:${IMAGE_TAG}" \ + --load \ + . + +# Step 2: Save image to tar.gz +echo "Step 2/4: Saving image to tar.gz..." +docker save "${IMAGE_NAME}:${IMAGE_TAG}" | gzip > /tmp/web-gateway-arm64.tar.gz +echo "Saved to /tmp/web-gateway-arm64.tar.gz ($(du -h /tmp/web-gateway-arm64.tar.gz | cut -f1))" + +# Step 3: Transfer to Raspberry Pi +echo "Step 3/4: Transferring to ${RPI_USER}@${RPI_HOST}..." +scp /tmp/web-gateway-arm64.tar.gz "${RPI_USER}@${RPI_HOST}:/tmp/" + +# Step 4: Load image on Raspberry Pi +echo "Step 4/4: Loading image into K3s..." +ssh "${RPI_USER}@${RPI_HOST}" << EOF + echo "Loading image into Docker/K3s..." + gunzip -c /tmp/web-gateway-arm64.tar.gz | sudo k3s ctr images import - + + # Alternative if using docker instead of containerd: + # gunzip -c /tmp/web-gateway-arm64.tar.gz | docker load + + echo "Cleaning up..." + rm /tmp/web-gateway-arm64.tar.gz + + echo "Verifying image..." + sudo k3s ctr images ls | grep web-gateway || echo "Image not found!" +EOF + +# Cleanup local file +rm /tmp/web-gateway-arm64.tar.gz + +echo "============================================" +echo "✅ Image transferred successfully!" +echo "============================================" +echo "Image is now available on ${RPI_HOST}" +echo "" +echo "Deploy with Helm:" +echo " helm install rdp-web-gateway ./chart/rdp-web-gateway \\" +echo " --namespace rdpbroker \\" +echo " --create-namespace \\" +echo " --set image.repository=${IMAGE_NAME} \\" +echo " --set image.tag=${IMAGE_TAG} \\" +echo " --set image.pullPolicy=IfNotPresent \\" +echo " -f chart/rdp-web-gateway/examples/rpi4-k3s.yaml"