#!/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 chmod 0777 modules/*/module.json 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 "" echo "Password: " read PASSWORD echo "" # install new user php artisan user:new $EMAIL $PASSWORD admin 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 or php artisan install-all-modules"