Skip to content
Snippets Groups Projects
install-docker.sh 2.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • Josh Pollock's avatar
    Josh Pollock committed
    #!/bin/bash
    
    #Set WordPress version
    WP_VERSION=${1-latest}
    
    # Exit if any command fails
    set -e
    
    # Include useful functions
    . "$(dirname "$0")/includes.sh"
    
    # Check that Docker is installed
    if ! command_exists "docker"; then
    	echo -e $(error_message "Docker doesn't seem to be installed. Please head on over to the Docker site to download it: $(action_format "https://www.docker.com/community-edition#/download")")
    	exit 1
    fi
    
    # Check that Docker is running
    if ! docker info >/dev/null 2>&1; then
    	echo -e $(error_message "Docker isn't running. Please check that you've started your Docker app, and see it in your system tray.")
    	exit 1
    fi
    
    # Stop existing containers
    echo -e $(status_message "Stopping Docker containers...")
    docker-compose down --remove-orphans >/dev/null 2>&1
    
    # Download image updates
    echo -e $(status_message "Downloading Docker image updates...")
    docker-compose pull --parallel
    
    # Launch the containers
    echo -e $(status_message "Starting Docker containers...")
    docker-compose up -d >/dev/null
    
    HOST_PORT=$(docker-compose port wordpress 80 | awk -F : '{printf $2}')
    
    # Wait until the docker containers are setup properely
    echo -en $(status_message "Attempting to connect to wordpress...")
    until $(curl -L http://localhost:$HOST_PORT -so - 2>&1 | grep -q "WordPress"); do
        echo -n '.'
        sleep 5
    done
    echo ''
    
    # Install WordPress
    echo -e $(status_message "Installing WordPress...")
    docker-compose run --rm -u 33 cli core install --url=localhost:$HOST_PORT --title=TestSite --admin_user=admin --admin_password=password --admin_email=test@test.com >/dev/null
    # Check for WordPress updates, just in case the WordPress image isn't up to date.
    docker-compose run --rm -u 33 cli core update >/dev/null
    
    # If the 'wordpress' volume wasn't during the down/up earlier, but the post port has changed, we need to update it.
    CURRENT_URL=$(docker-compose run -T --rm cli option get siteurl)
    if [ "$CURRENT_URL" != "http://localhost:$HOST_PORT" ]; then
    	docker-compose run --rm cli option update home "http://localhost:$HOST_PORT" >/dev/null
    	docker-compose run --rm cli option update siteurl "http://localhost:$HOST_PORT" >/dev/null
    fi
    echo -e $(status_message "Server is running at:")
    echo -e $(status_message "http://localhost:$HOST_PORT")
    
    # Install Composer
    echo -e $(status_message "Installing and updating Composer modules...")
    docker-compose run --rm composer install
    
    # Install the PHPUnit test scaffolding
    echo -e $(status_message "Installing PHPUnit test scaffolding...")
    docker-compose run --rm wordpress_phpunit /app/bin/install-wp-tests.sh wordpress_test root example mysql "${WP_VERSION}" false >/dev/null
    echo -e $(status_message "Completed installing tests")