#!/bin/bash
#More at https://linuxtm.ro
#This script will install Magento 2 in AWS.
#When the script finishes, you will get a summary of the installation (usernames, passwords, etc).
#
#Prerequisites:
#Custom AMI based on AMI2 with php-fpm and nginx installed
#AWS services created via CloudFormation template (RDS, ElastiCache, ElasticSearch)
set -e
no=$(tput sgr0)
red=$(tput setaf 1)
green=$(tput setaf 2)
#Set / ask for variables
PHP_BIN=$(command -v php)
COMPOSER_BIN=$(command -v composer)
#User configured in /etc/php-fpm.d/www.conf
PHPFPMUSER=nginx
M2SETUP_WORKDIR=/var/www
M2SETUP_SITEDIR=/var/www/html
MAGENTOBIN=$M2SETUP_SITEDIR/bin/magento
############################# MODIFY VARIABLES #############################
#Do not include :6379 on REDIS_HOST
REDIS_HOST=
#Include trailing slash / for ELASTICSEARCH_HOST
ELASTICSEARCH_HOST=
M2SETUP_DOMAIN=
M2SETUP_DB_HOST=
M2SETUP_DB_NAME=
M2SETUP_DB_USER=
M2SETUP_DB_PASSWORD=
M2SETUP_VERSION=
M2SETUP_USE_SAMPLE_DATA=false
ELASTICSEARCH_PORT=443
COMPOSER_USER=
COMPOSER_PASS=
#MAGENTO VARIABLES
M2SETUP_EDITION=community
M2SETUP_BASE_URL="http://${M2SETUP_DOMAIN}"
M2SETUP_BACKEND_FRONTNAME=admin
M2SETUP_ADMIN_FIRSTNAME=Admin
M2SETUP_ADMIN_LASTNAME=User
M2SETUP_ADMIN_EMAIL=admin@email.com
M2SETUP_ADMIN_USER=admin
M2SETUP_ADMIN_PASSWORD=Admin123admin
M2SETUP_CURRENCY=USD
M2SETUP_LANGUAGE=en_US
M2SETUP_TIMEZONE=America/New_York
########################### END MODIFY VARIABLES ###########################
function generateAuthJSON {
cat <<EOF > $M2SETUP_WORKDIR/.composer/auth.json
{
"http-basic": {
"repo.magento.com": {
"username": "${COMPOSER_USER}",
"password": "${COMPOSER_PASS}"
}
}
}
EOF
}
#INSTALL MAGENTO
mkdir -p $M2SETUP_WORKDIR/.composer
export COMPOSER_HOME=$M2SETUP_WORKDIR/.composer #IMPORTANT TO USE auth.json file
export COMPOSER_MEMORY_LIMIT=-1
mkdir -p $M2SETUP_SITEDIR && cd $M2SETUP_WORKDIR
echo "Generating auth.json..."
generateAuthJSON #call function
chown -R $PHPFPMUSER:$PHPFPMUSER $M2SETUP_WORKDIR
cd $M2SETUP_SITEDIR
echo "Starting Magento install..."
su -c "$PHP_BIN $COMPOSER_BIN create-project --repository-url=https://repo.magento.com/ magento/project-$M2SETUP_EDITION-edition=$M2SETUP_VERSION ." -s /bin/bash $PHPFPMUSER
ln -s $M2SETUP_WORKDIR/.composer ./var/composer_home
chmod +x $MAGENTOBIN
if [ "$M2SETUP_USE_SAMPLE_DATA" = true ]; then
echo "Installing composer dependencies..."
su -c "$PHP_BIN $COMPOSER_BIN update" -s /bin/bash $PHPFPMUSER
su -c "$PHP_BIN $M2SETUP_SITEDIR/bin/magento sampledata:deploy" -s /bin/bash $PHPFPMUSER
M2SETUP_USE_SAMPLE_DATA_STRING="--use-sample-data"
else
M2SETUP_USE_SAMPLE_DATA_STRING=""
fi
echo "Running Magento 2 setup script..."
su -c "${PHP_BIN} ${M2SETUP_SITEDIR}/bin/magento setup:install \
--db-host=${M2SETUP_DB_HOST} \
--db-name=${M2SETUP_DB_NAME} \
--db-user=${M2SETUP_DB_USER} \
--db-password=${M2SETUP_DB_PASSWORD} \
--base-url=${M2SETUP_BASE_URL} \
--admin-firstname=${M2SETUP_ADMIN_FIRSTNAME} \
--admin-lastname=${M2SETUP_ADMIN_LASTNAME} \
--admin-email=${M2SETUP_ADMIN_EMAIL} \
--admin-user=${M2SETUP_ADMIN_USER} \
--admin-password=${M2SETUP_ADMIN_PASSWORD} \
--backend-frontname=${M2SETUP_BACKEND_FRONTNAME} \
${M2SETUP_USE_SAMPLE_DATA_STRING}" -s /bin/bash $PHPFPMUSER
echo "Configuring ElasticSearch..."
su -c "$PHP_BIN $MAGENTOBIN config:set catalog/search/engine elasticsearch6" -s /bin/bash $PHPFPMUSER
su -c "$PHP_BIN $MAGENTOBIN config:set catalog/search/elasticsearch6_server_hostname $ELASTICSEARCH_HOST" -s /bin/bash $PHPFPMUSER
su -c "$PHP_BIN $MAGENTOBIN config:set catalog/search/elasticsearch6_server_port $ELASTICSEARCH_PORT" -s /bin/bash $PHPFPMUSER
#SHOW SUMMARY
echo -e "\n"
echo "Installation summary"
echo "Domain: ${green}$M2SETUP_BASE_URL ${no}"
echo "Admin user: ${green}$M2SETUP_ADMIN_USER${no}"
echo "Admin pass: ${green}$M2SETUP_ADMIN_PASSWORD${no}"
echo "Admin email: ${green}$M2SETUP_ADMIN_EMAIL${no}"
echo "Currency: ${green}$M2SETUP_CURRENCY${no}"
echo "Timezone: ${green}$M2SETUP_TIMEZONE${no}"
echo "Backend frontname: ${green}$M2SETUP_BACKEND_FRONTNAME${no}"