#!/bin/bash # 5q12's Indexer Docker Deploy Script # This script builds, tests, and publishes the Docker image to Docker Hub set -e # Configuration DOCKER_USERNAME="5q12" IMAGE_NAME="5q12-indexer" VERSION="1.1.16" VERSIONED_IMAGE="$DOCKER_USERNAME/$IMAGE_NAME:$VERSION" LATEST_IMAGE="$DOCKER_USERNAME/$IMAGE_NAME:latest" echo "Deploying 5q12's Indexer to Docker Hub" echo "======================================" echo "Versioned: $VERSIONED_IMAGE" echo "Latest: $LATEST_IMAGE" echo "" # Check if required files exist REQUIRED_FILES=( "docker/nginx.conf" "docker/5q12-indexer.conf" "docker/php-fpm.conf" "docker/supervisord.conf" "docker/entrypoint.sh" "index.php" "Dockerfile" ) echo "Checking required files..." for file in "${REQUIRED_FILES[@]}"; do if [ ! -f "$file" ]; then echo "ERROR: Required file '$file' not found!" exit 1 fi echo "✓ $file" done # Fix entrypoint script permissions and line endings chmod +x docker/entrypoint.sh if file docker/entrypoint.sh | grep -q "CRLF"; then echo "Converting CRLF line endings to LF in entrypoint.sh" sed -i 's/\r$//' docker/entrypoint.sh fi # Step 1: Build the image with both tags echo "" echo "Building Docker image..." docker build -t "$VERSIONED_IMAGE" -t "$LATEST_IMAGE" . if [ $? -ne 0 ]; then echo "Build failed!" exit 1 fi echo "✓ Build successful!" # Step 2: Test the image locally echo "" echo "Testing image locally..." # Create test directories mkdir -p test-config test-files # Start test container docker run -d --name indexer-test -p 5013:5012 \ -v "$(pwd)/test-config:/config" \ -v "$(pwd)/test-files:/files" \ "$VERSIONED_IMAGE" echo "Waiting for container to start..." sleep 10 # Check if container is running if ! docker ps | grep -q indexer-test; then echo "Container failed to start!" echo "Container logs:" docker logs indexer-test docker rm -f indexer-test 2>/dev/null || true rm -rf test-config test-files exit 1 fi # Test HTTP response echo "Testing HTTP endpoint..." if curl -f -s http://localhost:5013 > /dev/null 2>&1; then echo "✓ HTTP test passed!" else echo "HTTP test failed!" echo "Container logs:" docker logs indexer-test docker rm -f indexer-test 2>/dev/null || true rm -rf test-config test-files exit 1 fi # Cleanup test container docker rm -f indexer-test rm -rf test-config test-files # Step 3: Login to Docker Hub echo "" echo "Logging into Docker Hub..." echo "You will be prompted for your Docker Hub credentials:" docker login if [ $? -ne 0 ]; then echo "Docker Hub login failed!" exit 1 fi # Step 4: Push both tags to Docker Hub echo "" echo "Pushing images to Docker Hub..." echo "Pushing versioned image..." docker push "$VERSIONED_IMAGE" if [ $? -ne 0 ]; then echo "Push of versioned image failed!" exit 1 fi echo "Pushing latest tag..." docker push "$LATEST_IMAGE" if [ $? -eq 0 ]; then echo "" echo "✓ Successfully published both tags!" echo "" echo "Your images are now publicly available:" echo " - $VERSIONED_IMAGE" echo " - $LATEST_IMAGE" echo "" echo "Docker Hub URL:" echo " https://hub.docker.com/r/$DOCKER_USERNAME/$IMAGE_NAME" echo "" echo "To use this image anywhere:" echo " docker pull $VERSIONED_IMAGE" echo " # or" echo " docker pull $LATEST_IMAGE" echo "" echo "Quick start command:" echo " mkdir -p indexer/{config,files}" echo " docker run -d -p 5012:5012 \\" echo " -v \$(pwd)/indexer/config:/config \\" echo " -v \$(pwd)/indexer/files:/files \\" echo " $VERSIONED_IMAGE" echo "" echo "With docker-compose:" echo " Save the docker-compose.yml and run 'docker-compose up -d'" else echo "Push to Docker Hub failed!" exit 1 fi