|
#!/usr/bin/env bash |
|
|
|
# Charles Hilditch <[email protected]> |
|
|
|
# docker build/run php:7-apache container for Magento 1.9.* using docker-spy for local DNS, assumes MySQL running on docker host. |
|
# could probably do this again in PHP and move into an n98-magerun add-on |
|
# modify to suit your needs. |
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" |
|
CONF_PATH=$DIR/../www # change this, path to magento web root |
|
|
|
# dependencies available? |
|
if ! type 'xmlstarlet' > /dev/null 2>&1 || \ |
|
! type 'modman' > /dev/null || \ |
|
! type 'n98-magerun.phar' > /dev/null; then |
|
echo "Error: install missing dependencies." |
|
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && return || exit; |
|
fi |
|
if [ ! -e $CONF_PATH ]; then |
|
echo "No www directory or symlink. Aborting." |
|
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && return || exit; |
|
fi |
|
|
|
# Change this (I use the project directory name to create the docker container name and hostname |
|
# assumes path is like this: PROJECT_NAME/some_script_dir/docker.sh) |
|
# docker name must be [a-z0-9-_.] also used for hostname |
|
PROJECT_NAME=$(echo $(basename $(dirname $(pwd))) | tr '[:upper:]' '[:lower:]' | sed 's/-//g' )-$(date +%s) |
|
|
|
echo "Project name: "$PROJECT_NAME; |
|
|
|
DOMAIN_NAME=$PROJECT_NAME.localdomain # by default, docker-spy routes for domains matching 'localdomain' |
|
|
|
echo "Build docker container" |
|
if ! docker build -t $PROJECT_NAME $DIR; then |
|
echo "docker build failed. Aborting." |
|
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && return || exit; |
|
fi |
|
|
|
echo "Run docker container, hostname/domain name: $DOMAIN_NAME" |
|
GATEWAY_IP_ADDR=$(ifconfig docker0 | awk '/inet addr/{print substr($2,6)}') |
|
CONTAINER_ID=$(docker run --dns=$GATEWAY_IP_ADDR -h "$DOMAIN_NAME" -d -v $DIR/../www:/var/www/html --name $PROJECT_NAME $PROJECT_NAME) |
|
if [ "$CONTAINER_ID" = "" ]; then |
|
echo "docker run failed. Aborting." |
|
[[ "${BASH_SOURCE[0]}" != "${0}" ]] && return || exit; |
|
fi |
|
|
|
# IP of container |
|
CONTAINER_IP_ADDR=$(docker inspect --format="{{.NetworkSettings.IPAddress}}" $CONTAINER_ID) |
|
|
|
# xmlstarlet sel --text -t -v '/config/global/resources/default_setup/connection/host' $DIR/../www/app/etc/local.xml |
|
echo "Update local.xml with Gateway IP Address" |
|
xmlstarlet ed --inplace --update '/config/global/resources/default_setup/connection/host' -v $GATEWAY_IP_ADDR $DIR/../www/app/etc/local.xml |
|
|
|
# If running MySQL on docker host, may need to allow MySQL connections from container to host. ubuntu/mint host: |
|
# |
|
# sudo ufw allow 3306/tcp |
|
# sudo service ufw restart |
|
# |
|
# Also change 'bind-address' from "bind-address = 127.0.0.1" to "bind-address = 0.0.0.0" in /etc/mysql/my.cnf, service mysql restart |
|
# grant ALL on `DB_NAME`.* to 'USER_NAME'@'%' identified by 'PASSWORD'; |
|
|
|
echo "set magento domain" |
|
n98-magerun.phar --root-dir=$CONF_PATH config:set 'web/unsecure/base_url' "http://$DOMAIN_NAME/" |
|
n98-magerun.phar --root-dir=$CONF_PATH config:set 'web/secure/base_url' "http://$DOMAIN_NAME/" |
|
n98-magerun.phar --root-dir=$CONF_PATH config:set 'web/cookie/cookie_domain' "$DOMAIN_NAME" |
|
n98-magerun.phar --root-dir=$CONF_PATH config:set 'web/cookie/cookie_path' '/' |
|
|
|
pushd . |
|
# make sure Magento 1.9.2.2 works with PHP7, install MageMechanic_PhpSeven using modman |
|
cd $CONF_PATH && modman init >/dev/null 2>&1 && modman clone https://github.com/MageMechanic/PhpSeven.git >/dev/null; |
|
popd |
|
|
|
# allow symlinks |
|
n98-magerun.phar --root-dir=$CONF_PATH config:set dev/template/allow_symlink 1 |
|
|
|
echo "clear magento cache" |
|
n98-magerun.phar --root-dir=$CONF_PATH cache:flush |
|
|
|
echo "done." |
|
|
|
echo "docker exec /bin/bash..." |
|
docker exec -it $CONTAINER_ID /bin/bash |