Files

309 lines
6.8 KiB
Bash

#!/bin/bash
if [ "$1" == "devel" ]; then
INSTALL_DEVEL=1
else
INSTALL_DEVEL=0
fi
if [ "$2" == "local" ]; then
INSTALL_LOCALLY=1
else
INSTALL_LOCALLY=0
fi
# dir with meta informatou about installation
INSTALL_METADATA_DIRECTORY=".install"
# if possible, do not change these paths - otherwise update could broke down
WEBSITE_DOMAIN_FILE=$INSTALL_METADATA_DIRECTORY"/.website_domain"
WEBSITE_PARENT_FILE=$INSTALL_METADATA_DIRECTORY"/.website_parent"
DB_INITIALIZED_FILE=$INSTALL_METADATA_DIRECTORY"/.db_initialized"
THEME_SET_FILE=$INSTALL_METADATA_DIRECTORY"/.theme_set"
ADMIN_CREATED_FILE=$INSTALL_METADATA_DIRECTORY"/.admin_created"
USER_INSTALLED_FILE=$INSTALL_METADATA_DIRECTORY"/.user"
INSTALL_DIR_EXISTS=0
while [ "$INSTALL_DIR" == "" ]; do
echo ""
echo "Install directory: "
read INSTALL_DIR
if [ -d $INSTALL_DIR ]; then
echo "Directory $INSTALL_DIR already exists."
cd $INSTALL_DIR
if [ -d ".git" ]; then
# try to continue in installation when directory exists
git remote -v |grep "minicms.git" > /dev/null
if [ $? -eq 0 ]; then
echo " ... continuing in installation"
INSTALL_DIR_EXISTS=1
else
echo " ... this directory does not contain installation of CMS! Use different directory."
INSTALL_DIR=""
fi
fi
cd - > /dev/null
fi
echo ""
done
# create installation directory for this instance of cms
if [ $INSTALL_DIR_EXISTS -eq 0 ]; then
mkdir -p $INSTALL_DIR
fi
cd $INSTALL_DIR
# setup website info
if [ ! -e $WEBSITE_DOMAIN_FILE ]; then
echo ""
echo "Website domain: "
read WEBSITE_DOMAIN
echo ""
else
WEBSITE_DOMAIN=`cat $WEBSITE_DOMAIN_FILE`
fi
if [ ! -e $WEBSITE_PARENT_FILE ]; then
echo ""
echo "Website parent (branch in minicms.git repository): "
read WEBSITE_PARENT
echo ""
else
WEBSITE_PARENT=`cat $WEBSITE_PARENT_FILE`
fi
# fetch data from server
if [ ! -n "$(ls -A)" ]; then
if [ $INSTALL_LOCALLY -eq 0 ]; then
git clone git@binarity.cz:/opt/git/internal/cms/minicms.git -b $WEBSITE_PARENT .
else
git clone /opt/git/internal/cms/minicms.git -b $WEBSITE_PARENT .
fi
if [ ! $? -eq 0 ]; then
echo ""
echo " -------------------------------------------"
echo "ERROR: cannot clone repository. Aborting"
echo ""
exit 2
fi
# ignore file permission changes
git config core.fileMode false
else
git branch |grep $WEBSITE_DOMAIN > /dev/null
if [ $? -eq 0 ]; then
echo "CMS already installed!"
exit 1
fi
fi
if [ ! -e $INSTALL_METADATA_DIRECTORY ]; then
mkdir $INSTALL_METADATA_DIRECTORY
fi
# save variables
echo $WEBSITE_DOMAIN > $WEBSITE_DOMAIN_FILE
echo $WEBSITE_PARENT > $WEBSITE_PARENT_FILE
# setup permissions
chmod 0777 bootstrap/cache -R
chmod 0777 storage -R
chmod 0777 public -R
chmod 0777 modules/*
chmod 0777 public/uploads -R
chmod +x scripts/*
if [ ! -e $DB_INITIALIZED_FILE ]; then
echo " --------------------------"
echo " * Database setup * "
echo ""
echo "MySQL host [localhost]: "
read MYSQL_HOST
if [ "$MYSQL_HOST" == "" ]; then
MYSQL_HOST="localhost"
fi
echo ""
echo "MySQL user:"
read MYSQL_USER
echo ""
echo "MySQL password:"
read MYSQL_PASSWORD
echo ""
echo "MySQL database (must exist and should be empty):"
read MYSQL_DATABASE
# copy settings if neccesarry
if [ ! -e .env ]; then
cp .env.example .env
sed -i -e s/SITE_URL=/SITE_URL=$WEBSITE_DOMAIN/ .env
sed -i -e s/UPLOAD_URL=/UPLOAD_URL=$WEBSITE_DOMAIN/ .env
echo ""
echo "Environment (production, development, testing, local):"
read ENVIRONMENT
if [ "$ENVIRONMENT" == "local" ]; then
INSTALL_DEVEL=1
fi
sed -i -e s/APP_ENV=/APP_ENV=$ENVIRONMENT/ .env
if [ "$ENVIRONMENT" != "production" ]; then
echo ""
echo "Turn on debugging? [y/N]"
read DEBUG_INPUT
else
DEBUG_INPUT="n"
fi
if [ "$DEBUG_INPUT" == "y" ]; then
sed -i -e s/APP_DEBUG=/APP_DEBUG=true/ .env
else
sed -i -e s/APP_DEBUG=/APP_DEBUG=false/ .env
fi
sed -i -e s/DB_HOST=/DB_HOST=$MYSQL_HOST/ .env
sed -i -e s/DB_USERNAME=/DB_USERNAME=$MYSQL_USER/ .env
sed -i -e s/DB_PASSWORD=/DB_PASSWORD=$MYSQL_PASSWORD/ .env
sed -i -e s/DB_DATABASE=/DB_DATABASE=$MYSQL_DATABASE/ .env
# review config
vim .env
fi
# init database structure
# init, migrate and seed database
SCRIPT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < $SCRIPT_PATH/../database/schema.sql
# create autoload files - no matter what
composer dump-autoload
# install dependencies - no matter what
if [ $INSTALL_DEVEL -eq 0 ]; then
composer install --no-dev
else
composer install
fi
php artisan migrate --force -n &&
php artisan db:seed --force -n &&
touch $DB_INITIALIZED_FILE
if [ ! $? -eq 0 ]; then
echo ""
echo " ---------------------------------------------- "
echo "ERROR: Database was not initialized. Try to fix this error and then rerun installation."
echo ""
exit 3
fi
# generate random key for ciphering
php artisan key:generate
fi
if [ ! -e $THEME_SET_FILE ]; then
echo " --------------------------"
echo " * Template setup * "
echo ""
while [ "$THEME_NAME" == "" ]; do
echo ""
echo "Template name (use any of following): "
for i in $(ls -d templates/*/ | grep -v Base); do
basename `echo ${i%%/}`;
done
read THEME_NAME
if [ ! -d templates/$THEME_NAME ]; then
echo "Theme $THEME_NAME is not valid. Try again"
THEME_NAME=""
fi
done
# setup theme
php artisan template:set $THEME_NAME no-publish
php artisan vendor:publish
# setup permissions on published directories
chmod 0777 public -R
chmod 0777 resources/views/visitor -R
chmod 0777 resources/views/modules -R
echo $THEME_NAME > $THEME_SET_FILE
fi
if [ ! -e $ADMIN_CREATED_FILE ]; then
echo ""
echo " ------------------------------ "
echo " * CREATE ADMIN USER *"
echo ""
echo "New user email: "
read EMAIL
echo ""
# install new user
php artisan user:new $EMAIL
echo $EMAIL > $ADMIN_CREATED_FILE
fi
echo ""
echo " -----------------------------------"
echo " * GIT BRANCH *"
echo ""
echo "Create new Git branch? [y/n]"
read NEW_GIT_BRANCH
# create new branch in git
if [ "$NEW_GIT_BRANCH" != "n" ]; then
git checkout -b $WEBSITE_DOMAIN
git push origin $WEBSITE_DOMAIN
fi
# save info about user, who installed this source copy
echo $USER > $USER_INSTALLED_FILE
echo ""
echo ""
echo ""
echo ""
echo ""
echo " INSTALLATION SUCCESSFULL."
echo ""
echo "Do not forget to install desired modules!"
echo " Use php artisan install-module <ModuleName> or php artisan install-all-modules"
npm install
bower install
gulp --production