#!/bin/bash
set -eux
NC='\e[0m' # No Color
BLACK='\e[0;30m'
BLUE='\e[0;34m'
BROWN='\e[0;33m'
CYAN='\e[0;36m'
GRAY='\e[0;30m'
GREEN='\e[0;32m'
PURPLE='\e[0;35m'
RED='\e[0;31m'
WHITE='\e[1;37m'
YELLOW='\e[1;33m'
function addLogMessage {
set +x
MESSAGE=${1}
COLOR=''
if [[ ! -n ${2+set} ]]; then
COLOR=${CYAN}
else
COLOR=${2}
fi
# Делаем красивую рамку вокруг сообщения
COUNT_SYMBOLS=$(echo ${MESSAGE} | wc -m)
PAST_BORDER_SYMBOLS=''
PAST_SPACES_SYMBOLS=''
for ((i=1; i<=${COUNT_SYMBOLS}; i++)); do
PAST_BORDER_SYMBOLS="${PAST_BORDER_SYMBOLS}*";
PAST_SPACES_SYMBOLS="${PAST_SPACES_SYMBOLS} ";
done
echo -e "\n\n\n"
echo -e "${COLOR}*************${PAST_BORDER_SYMBOLS}*************${NC}"
echo -e "${COLOR}* ${PAST_SPACES_SYMBOLS} *${NC}"
echo -e "${COLOR}* ${MESSAGE} *${NC}"
echo -e "${COLOR}* ${PAST_SPACES_SYMBOLS} *${NC}"
echo -e "${COLOR}*************${PAST_BORDER_SYMBOLS}*************${NC}\n"
set -x
}
export GIT_SSL_NO_VERIFY=1
# Install laravel core
addLogMessage 'Установка "laravel/laravel:5.8"...'
if [[ ! -f ./.env ]]; then
composer create-project -n --prefer-source laravel/laravel /tmp/laravel_core/ "5.8.*"
mv -v /tmp/laravel_core/* ${LARAVEL_CORE_PATH}/
addLogMessage '"laravel/laravel:5.8" установлен успешно!' ${GREEN}
else
addLogMessage '"laravel/laravel:5.8" уже был установлен ранее!' ${YELLOW}
fi
# Install gfx kernel
addLogMessage 'Установка "Gfx\\Kernel"'
if [[ ! -f ./vendor/gfx/kernel/.env ]]; then
rm -rfv ./vendor/gfx/kernel
mkdir -vp ./vendor/gfx/kernel
git clone -b "${GIT_KERNEL_BRANCH}" ${GIT_KERNEL_LINK} ${KERNEL_PATH}
composer config repositories.gfx/kernel path ${KERNEL_PATH}
composer require gfx/kernel
addLogMessage '"Gfx\\Kernel" успешно установлен!' "${GREEN}"
else
addLogMessage '"Gfx\\Kernel" уже был установлен ранее!' "${YELLOW}"
fi
# Install gfx personal-area
addLogMessage 'Установка "Gfx\\PersonalArea"...'
if [[ ! -f ./vendor/gfx/personal-area/.env.personal-area ]]; then
rm -frv ./vendor/gfx/personal-area
mkdir -vp ./vendor/gfx/personal-area
git clone -b "${GIT_PERSONAL_AREA_BRANCH}" ${GIT_PERSONAL_AREA_LINK} ${PERSONAL_AREA_PATH}
composer config repositories.gfx/personal-area path ${PERSONAL_AREA_PATH}
composer require gfx/personal-area
if [[ -f ./app/User.php && ! -f ./app/Models/User.php ]]; then
NAMESPACE_PATTERN_SEARCH='namespace App;'
NAMESPACE_PATTERN_REPLACE='namespace App\\Models;'
TRAIT_PATTERN_SEARCH='use Notifiable;'
TRAIT_PATTERN_REPLACE='use Notifiable;\n use \\Backpack\\CRUD\\CrudTrait;\n use \\Spatie\\Permission\\Traits\\HasRoles;'
sed -i "s/${NAMESPACE_PATTERN_SEARCH}/${NAMESPACE_PATTERN_REPLACE}/" ./app/User.php
sed -i "s/${TRAIT_PATTERN_SEARCH}/${TRAIT_PATTERN_REPLACE}/" ./app/User.php
mv -v ./app/User.php ./app/Models/
fi
addLogMessage '"Gfx\\PersonalArea" успешно установлен!' "${GREEN}"
else
addLogMessage '"Gfx\\PersonalArea" уже был установлен ранее!' "${YELLOW}"
fi
# Edit configs
addLogMessage 'Изменение файлов конфигурации...'
cp -v ${KERNEL_PATH}/.env.kernel .env
echo '' >> ./.env
echo '# >>>>> Personal area configs (start) >>>>>' >> ./.env
cat ${PERSONAL_AREA_PATH}/.env.personal-area >> .env
echo '# <<<<< Personal area configs (end) <<<<<' >> ./.env
sed -i 's/APP_NAME=/APP_NAME=laravel-kernel-personal-area/g' ./.env
sed -i 's/APP_ENV=local/APP_ENV=development/g' ./.env
sed -i 's/APP_KEY=/APP_KEY=base64:Yc29mMsvjbmYryiHK1bkNeQ1ak1gdW+T\/LjDOI9IEzE=/g' ./.env
sed -i 's/DB_HOST=127.0.0.1/DB_HOST=bbh-mysql/g' ./.env
sed -i 's/DB_PORT=3306/DB_PORT=3306/g' ./.env
sed -i 's/DB_DATABASE=/DB_DATABASE=bbh/g' ./.env
sed -i 's/DB_USERNAME=/DB_USERNAME=bbh/g' ./.env
sed -i 's/DB_PASSWORD=/DB_PASSWORD=bbh-password/g' ./.env
LARAVEL_LOG_DIR="${LARAVEL_CORE_PATH}/var/log"
LARAVEL_LOG_DIR_SHIELDED_SLASHES=$(echo ${LARAVEL_LOG_DIR} | sed 's/\//\\\//g')
sed -i "s/LOG_DIR=/LOG_DIR=${LARAVEL_LOG_DIR_SHIELDED_SLASHES}/g" ./.env
mkdir -pv ${LARAVEL_LOG_DIR}
sed -i "s/'timezone' => 'UTC'/'timezone' => 'Europe\/Moscow'/g" ./config/app.php
sed -i "s/'driver' => 'daily'/'driver' => 'daily', 'permission' => 0644/g" ./config/app.php
cp -v ./.env ./.env.testing
echo '# >>>>> Personal area configs for tests (start) >>>>>' >> ./.env.testing
echo 'MAIL_DRIVER=log' >> ./.env.testing
echo 'CACHE_DRIVER=array' >> ./.env.testing
echo '# <<<<< Personal area configs for tests (end) <<<<<' >> ./.env.testing
sed -i 's/APP_ENV=development/APP_ENV=testing/g' ./.env.testing
sed -i 's/DB_CONNECTION=mysql/DB_CONNECTION=personal-area-testing/g' ./.env.testing
# Configuration Artisan
addLogMessage 'Запуск artisan...'
chmod -v +x ./artisan
php artisan -n -v key:generate
php artisan -n -v config:cache --env=testing
php artisan -n -v backpack:base:install
php artisan -n -v backpack:crud:install
php artisan -n -v gfx:kernel:install
php artisan -n -v gfx:kernel:create-structure
php artisan -n -v gfx:kernel:publish-model
php artisan -n -v migrate
php artisan -n -v vendor:publish --force --provider="Gfx\PersonalArea\PersonalAreaServiceProvider"
php artisan -n -v config:cache --env=testing
# Set permissions
addLogMessage 'Установка прав и разрешений...'
chown -v www-data:www-data -R ./
chmod -v 766 -R ./
composer install -n
php-fpm