config_testb/app.sh

180 lines
4.4 KiB
Bash
Executable File

DIRECTORY=`dirname $0`
#MYSQL_ROOT_PASSWORD=$(grep MYSQL_ROOT_PASSWORD $DIRECTORY"/.env" | xargs)
#MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD#*=}
source $DIRECTORY"/.env"
help() {
echo "run $0 [COMMAND] "
echo '
"init" - run init flow
"up" - up -d all services
"down" - down all services without volumes
"composer" - run composer ${@:2}
"psalm" - run composer analyse
"php-fixer" - run composer cs
"deptrac" - run composer deptrac
"tests" - run composer tests
"console" - run docker compose exec php ./bin/console ${@:2}
"db" - run mysql shell
"db-create" - crate database
"backup-dev" -
"backup-create" -
"backup-exec" -
"restore-dev" -
"purge-db" - purge database
"restore-db" - restore database from s3 backup
"front" - exec front container
'
}
log() {
RED='\e[31m'
GREEN='\e[32m'
case $2 in
info)
printf "${GREEN}${1}\e[0m\n"
;;
error)
printf "${RED}${1}\e[0m\n"
;;
*)
printf "${1}"
;;
esac
}
## restore last backup from s3 storage
restoredb() {
log "run restore database"
sudo rclone copy --verbose selectel:backup_db/dot/prod/dot.$(date +%a).sql.gz backups/
zcat backups/dot.$(date +%a).sql.gz | docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} dot
}
checkDockerCompose() {
if ! [ -f "docker-compose.yml" ]; then
log "docker-compose.yml not exist. Run init command" "error"
exit
fi
}
init() {
dumpfile=$(ls backups/ | sort | tail -1)
if ! [ -f backups/${dumpfile} ]; then
log "put dot.sql to backups directory" "error"
exit
fi
if ! [ -f ".env" ]; then
log ".env not exist. Run init command" "error"
exit
fi
up
docker compose exec php composer install
# docker compose exec front npm i
# docker compose exec front npm run build
if ! docker compose exec db mysql -uroot -proot -e "show databases" | grep "dot "; then
createDatabase "dot"
execBackup "dot" ${dumpfile}
fi
}
up() {
checkDockerCompose
docker compose up -d && docker compose exec nginx nginx -t && docker compose exec nginx nginx -s reload
echo "check global nginx and reload"
docker exec -ti dd-nginx-1 nginx -t && docker exec -ti dd-nginx-1 nginx -s reload
}
down() {
checkDockerCompose
docker compose down
}
createDatabase() {
docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database $1"
log "create database $1" "info"
}
createBackup() {
docker compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} $1 > backups/$2.sql
}
createBackupWithExceptions() {
docker compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --ignore-table=dot.ml_calculator_log dot > backups/dot_develop.sql
docker compose exec db mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --no-data dot ml_calculator_log >> backups/dot_develop.sql
}
execBackup() {
zcat backups/$2 | docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} $1
log "exec $2.sql backup" "info"
}
execDevBackup() {
docker compose exec -T db mysql -uroot -p${MYSQL_ROOT_PASSWORD} dot < backups/dot_develop.sql
log "exec dot_develop.sql backup" "info"
}
purgeDb() {
docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "drop database dot"
log "dropped database dot" "info"
docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database dot"
log "created database dot" "info"
}
composer() {
docker compose exec php php -d memory_limit=-1 /usr/local/bin/composer ${@:1}
}
case "$1" in
"help")
help;;
"init")
init;;
"up")
up;;
"down")
down;;
"composer"*)
composer ${@:2};;
"psalm"*)
composer analyse;;
"php-fixer")
composer cs;;
"deptrac")
composer deptrac;;
"tests")
composer tests;;
"console"*)
docker compose exec php ./bin/console ${@:2};;
"db")
docker compose exec db mysql -uroot -p${MYSQL_ROOT_PASSWORD};;
"db-create")
createDatabase $2;;
"backup-dev"*)
createBackupWithExceptions $2;;
"backup-create"*)
createBackup $2 $3;;
"backup-exec"*)
execBackup $2 $3;;
"restore-dev"*)
execDevBackup;;
"purge-db"*)
purgeDb;;
"restore-db")
restoredb;;
"front"*)
case $2 in
*)
docker compose exec landing-ttl ${@:2};;
esac;;
*)
help
#docker compose exec php ./bin/console ${@:1};;
esac