Last active
August 2, 2019 16:32
-
-
Save LucasCalazans/0b00bf750d5dae65c958bd2ea031d821 to your computer and use it in GitHub Desktop.
Create a Magento 2 Project based on Magento Cloud repository
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
##################################################### | |
# # | |
# SYSTEM VALIDATION # | |
# # | |
##################################################### | |
##################################################### | |
# vm.max_map_count # | |
##################################################### | |
MAX_MAP_COUNT_VALUE=$(sysctl -n vm.max_map_count); | |
MAX_MAP_COUNT_LIMIT=262144; | |
if [[ "$MAX_MAP_COUNT_VALUE" -lt "$MAX_MAP_COUNT_LIMIT" ]] | |
then | |
echo "[ERROR] vm.max_map_count Should be at least ${MAX_MAP_COUNT_LIMIT}. Execute the following command (Linux users):"; | |
printf "\n sysctl -w vm.max_map_count=262144\n\n" | |
exit; | |
fi | |
##################################################### | |
# docker # | |
##################################################### | |
if ! [ -x "$(command -v docker)" ]; then | |
echo "[ERROR]: docker is not installed."; | |
echo "Check installation instructions on: https://docs.docker.com/install"; | |
exit; | |
fi | |
##################################################### | |
# docker-compose # | |
##################################################### | |
if ! [ -x "$(command -v docker-compose)" ]; then | |
echo "[ERROR]: docker-compose is not installed."; | |
echo "Check installation instructions on: https://docs.docker.com/compose/install"; | |
exit; | |
fi | |
##################################################### | |
# docker-sync # | |
##################################################### | |
if ! [ -x "$(command -v docker-sync)" ]; then | |
echo "[ERROR]: docker-sync is not installed."; | |
echo "Check installation instructions on: https://docker-sync.readthedocs.io/en/latest/getting-started/installation.html"; | |
exit; | |
fi | |
##################################################### | |
# # | |
# HELPERS # | |
# # | |
##################################################### | |
q() { | |
local ANSWER=${2}; | |
[[ -n ${ANSWER} ]] && read -p "${1} [${ANSWER}]: " VALUE; | |
[[ -z ${ANSWER} ]] && read -p "${1}: " VALUE; | |
[[ -n "$VALUE" ]] && ANSWER=$VALUE; | |
echo $ANSWER; | |
} | |
EXECUTE_INSIDE_CONTAINER() { | |
# We're using this function to remove the requirements of having PHP and Composer locally. So this will execute inside a container with PHP | |
curl -s https://gist.githubusercontent.com/LucasCalazans/dd85d49d5bbb4538f134e8e730af8245/raw/66af88d3a95980fce8c7a0716413a5b568661968/exec.sh | bash -s $*; | |
} | |
##################################################### | |
# # | |
# PREPARING ARGUMENTS # | |
# # | |
##################################################### | |
for ARGUMENT in "$@" | |
do | |
KEY=$(echo $ARGUMENT | cut -f1 -d=) | |
VALUE=$(echo $ARGUMENT | cut -f2 -d=) | |
case "$KEY" in | |
--name|-n) PROJECT_NAME=${VALUE} ;; | |
--path|-p) PROJECT_PATH=${VALUE} ;; | |
-v|--version|--magento-version) MAGENTO_VERSION=${VALUE} ;; | |
--host) PROJECT_HOST=${VALUE} ;; | |
--admin-user) ADMIN_USER=${VALUE} ;; | |
--admin-password) ADMIN_PASSWORD=${VALUE} ;; | |
--public-key) MAGENTO_PUBLIC_KEY=${VALUE} ;; | |
--private-key) MAGENTO_PRIVATE_KEY=${VALUE} ;; | |
# --help|-h) show_help; exit ;; | |
*) # param not used | |
esac | |
done | |
##################################################### | |
# # | |
# PROJECT CONFIGS # | |
# # | |
##################################################### | |
[[ -z "$PROJECT_NAME" ]] && PROJECT_NAME=$(q "Project name?" "magento2"); | |
[[ -z "$PROJECT_PATH" ]] && PROJECT_PATH=$(q "Where do you want to use the project?" "./${PROJECT_NAME}"); | |
[[ -z "$MAGENTO_VERSION" ]] && MAGENTO_VERSION=$(q "Magento Version?" "2.3.2"); | |
[[ -z "$PROJECT_HOST" ]] && PROJECT_HOST=$(q "Project host?" "${PROJECT_NAME}.localhost"); | |
[[ -z "$ADMIN_USER" ]] && ADMIN_USER=$(q "Admin User?" "admin"); | |
[[ -z "$ADMIN_PASSWORD" ]] && ADMIN_PASSWORD=$(q "Admin Password?" "123123q"); | |
##################################################### | |
# # | |
# MAGENTO KEYS # | |
# # | |
##################################################### | |
[[ -z "$MAGENTO_PUBLIC_KEY" ]] && MAGENTO_PUBLIC_KEY=$(q "Magento public key" ""); | |
[[ -z "$MAGENTO_PUBLIC_KEY" ]] && echo "ERROR: We need a Magento public key" && exit; | |
[[ -z "$MAGENTO_PRIVATE_KEY" ]] && read -sp "Magento private key: " MAGENTO_PRIVATE_KEY && echo ""; | |
[[ -z "$MAGENTO_PRIVATE_KEY" ]] && echo "ERROR: We need a Magento private key" && exit; | |
##################################################### | |
# # | |
# CLONING CLOUD # | |
# # | |
##################################################### | |
git clone [email protected]:magento/magento-cloud.git ${PROJECT_PATH}; | |
cd ${PROJECT_PATH}; | |
git checkout ${MAGENTO_VERSION}; | |
##################################################### | |
# # | |
# GENERATING auth.json # | |
# # | |
##################################################### | |
echo "{ | |
\"http-basic\": { | |
\"repo.magento.com\": { | |
\"username\": \"${MAGENTO_PUBLIC_KEY}\", | |
\"password\": \"${MAGENTO_PRIVATE_KEY}\" | |
} | |
} | |
}" > auth.json; | |
##################################################### | |
# # | |
# DEPLOYING # | |
# # | |
##################################################### | |
EXECUTE_INSIDE_CONTAINER composer install; | |
cp package.json.sample package.json; | |
cp Gruntfile.js.sample Gruntfile.js; | |
EXECUTE_INSIDE_CONTAINER ./vendor/bin/ece-tools docker:build --mode="developer" --es 6.5 --php 7.2; | |
cp .docker/config.php.dist .docker/config.php; | |
sed -i -E "s/magento2.docker/${PROJECT_HOST}/" .docker/config.php docker-compose.yml; | |
sed -i -E "s/(.*ADMIN_URL' => ')admin(')/\1${ADMIN_USER}\2/" .docker/config.php; | |
sed -i -E "s/(.*ADMIN_PASSWORD' => ')123123q(',)/\1${ADMIN_PASSWORD}\2/" .docker/config.php; | |
EXECUTE_INSIDE_CONTAINER ./vendor/bin/ece-tools docker:config:convert; | |
SYNC_NAME="${PROJECT_NAME}-sync" | |
sed -i -E "s/(.*)magento-sync(.*)/\1${SYNC_NAME}\2/" ./docker-compose.yml ./docker-sync.yml ./vendor/magento/ece-tools/src/Docker/Compose/DeveloperCompose.php | |
##################################################### | |
# # | |
# CHANGING PHP CONTAINER # | |
# # | |
##################################################### | |
mkdir -p .docker/php; | |
touch ./.docker/php/Dockerfile; | |
echo "FROM magento/magento-cloud-docker-php:7.2-fpm | |
RUN apt-get update && \ | |
apt-get upgrade -y && \ | |
curl -sL https://deb.nodesource.com/setup_12.x | bash - && \ | |
apt-get install -y nodejs && \ | |
apt-get clean -y && \ | |
apt-get autoclean -y && \ | |
apt-get autoremove -y && \ | |
apt-get purge -y --auto-remove && \ | |
npm install -g grunt-cli | |
" > ./.docker/php/Dockerfile | |
sed -i -E "s/image: 'magento\/magento-cloud-docker-php:7.2-fpm'/\build: '\.\/\.docker\/php'/" docker-compose.yml | |
##################################################### | |
# # | |
# ADDING KIBANA # | |
# # | |
##################################################### | |
KIBANA_CONFIG="\n ports:\n - '9200:9200'\n kibana:\n image: docker.elastic.co\/kibana\/kibana:6.5.0\n volumes:\n - .\/kibana.yml:\/usr\/share\/kibana\/config\/kibana.yml\n ports:\n - '5601:5601'\n depends_on:\n - elasticsearch" | |
sed -i -E "s/(.*magento-cloud-docker-elasticsearch.*)/\1${KIBANA_CONFIG}/" docker-compose.yml | |
echo "server.port: 5601 | |
server.host: \"0\" | |
elasticsearch.url: \"http://elasticsearch:9200\" | |
" > kibana.yml; | |
##################################################### | |
# # | |
# STARTING PROJECT # | |
# # | |
##################################################### | |
docker-sync start; | |
docker-compose up -d; | |
docker-compose run deploy cloud-deploy; | |
docker-compose run deploy magento-command deploy:mode:set developer; | |
docker-compose run deploy magento-command cache:clean; | |
##################################################### | |
# # | |
# FINISHED # | |
# # | |
##################################################### | |
echo ""; | |
echo "=========================================="; | |
echo ""; | |
echo "The project \"${PROJECT_NAME}\" has been successfully configured!"; | |
echo ""; | |
echo "Storefront: https://${PROJECT_HOST}"; | |
echo "Admin: https://${PROJECT_HOST}/admin"; | |
echo ""; | |
echo "Admin Username: ${ADMIN_USER}"; | |
echo ""; | |
echo "=========================================="; | |
echo ""; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage
./create-magento-project
or, you can use passing parameters: