From 68aa0a417c1ed76f719357c4e37cd5891e64244e Mon Sep 17 00:00:00 2001 From: "Hahn Axel (hahn)" <axel.hahn@unibe.ch> Date: Fri, 17 Nov 2023 16:55:58 +0100 Subject: [PATCH] update docker init --- docker/init.sh | 137 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 99 insertions(+), 38 deletions(-) diff --git a/docker/init.sh b/docker/init.sh index 060db24..994a4d0 100755 --- a/docker/init.sh +++ b/docker/init.sh @@ -11,6 +11,9 @@ # 2022-12-20 v1.4 <axel.hahn@unibe.ch> replace fgrep with grep -F # 2023-03-06 v1.5 <www.axel-hahn.de> up with and without --build # 2023-08-17 v1.6 <www.axel-hahn.de> menu selection with single key (without return) +# 2023-11-10 v1.7 <axel.hahn@unibe.ch> replace docker-compose with "docker compose" +# 2023-11-13 v1.8 <axel.hahn@unibe.ch> UNDO "docker compose"; update infos +# 2023-11-15 v1.9 <axel.hahn@unibe.ch> add help; execute multiple actions by params; new menu item: open app # ====================================================================== cd $( dirname $0 ) @@ -19,7 +22,7 @@ cd $( dirname $0 ) # git@git-repo.iml.unibe.ch:iml-open-source/docker-php-starterkit.git selfgitrepo="docker-php-starterkit.git" -_version="1.6" +_version="1.9" # ---------------------------------------------------------------------- # FUNCTIONS @@ -37,6 +40,61 @@ function h3(){ echo -e "\e[34m----- $*\e[0m" } +# show help for param -h +function showMenu(){ + echo " $( _key g ) - remove git data of starterkit" + echo + echo " $( _key i ) - init application: set permissions" + echo " $( _key t ) - generate files from templates" + echo " $( _key T ) - remove generated files" + echo + echo " $( _key u ) - startup containers docker-compose ... up -d" + echo " $( _key U ) - startup containers docker-compose ... up -d --build" + echo " $( _key s ) - shutdown containers docker-compose stop" + echo " $( _key r ) - remove containers docker-compose rm -f" + echo + echo " $( _key m ) - more infos" + echo " $( _key o ) - open app [${APP_NAME}] $frontendurl" + echo " $( _key c ) - console (bash)" + echo + echo " $( _key q ) - quit" +} +function showHelp(){ + local _self=$( basename "$0" ) + cat <<EOH +INITIALIZER FOR DOCKER APP v$_version + +A helper script written in Bash to bring up a PHP+Mysql application in docker. + +Source : https://git-repo.iml.unibe.ch/iml-open-source/docker-php-starterkit +Docs : https://os-docs.iml.unibe.ch/docker-php-starterkit/ +License: GNU GPL 3.0 +(c) Institute for Medical Education; University of Bern + + +SYNTAX: + $_self [-h|-v] + $_self [menu key] + +OPTIONS: + -h show this help and exit + -v show version exit + +MENU KEYS: + In the interactive menu are some keys to init an action. + The same keys can be put as parameter to start this action. + You can add multiples keys to apply multiple actions. + +$( showMenu ) + +EXAMPLES: + + $_self starts interactive mode + $_self u bring up docker container(s) and stay in interactive mode + $_self i q set write permissions and quit + +EOH +} # function _gitinstall(){ # h2 "install/ update app from git repo ${gitrepo} in ${gittarget} ..." # test -d ${gittarget} && ( cd ${gittarget} && git pull ) @@ -189,6 +247,7 @@ function _removeGeneratedFiles(){ done } +# show running containers function _showContainers(){ local bLong=$1 h2 CONTAINERS @@ -200,7 +259,16 @@ function _showContainers(){ } -# a bit stupid ... i think I need to delete it. +# show urls for app container +function _showBrowserurl(){ + echo "In a web browser open:" + echo " $frontendurl" + if grep "${APP_NAME}-server" /etc/hosts >/dev/null; then + echo " https://${APP_NAME}-server/" + fi +} + +# detect + show ports and urls for app container and db container function _showInfos(){ _showContainers long h2 INFO @@ -212,19 +280,20 @@ function _showInfos(){ >/dev/tcp/localhost/${APP_PORT} 2>/dev/null && ( echo "OK, app port ${APP_PORT} is reachable" echo - echo "In a web browser open:" - echo " $frontendurl" + _showBrowserurl ) - h3 "Check database port" - >/dev/tcp/localhost/${DB_PORT} 2>/dev/null && ( - echo "OK, db port ${DB_PORT} is reachable" - echo + if [ "$DB_ADD" != "false" ]; then + h3 "Check database port" + >/dev/tcp/localhost/${DB_PORT} >/dev/null 2>&1 && ( + echo "OK, db port ${DB_PORT} is reachable" + echo + ) echo "In a local DB admin tool:" echo " host : localhost" echo " port : ${DB_PORT}" echo " user : root" echo " password: ${MYSQL_ROOT_PASS}" - ) + fi echo } @@ -235,39 +304,26 @@ function _key(){ # helper: wait for a return key function _wait(){ - echo -n "... press RETURN > "; read -r + echo -n "... press RETURN > "; read -r -t 15 } # ---------------------------------------------------------------------- # MAIN # ---------------------------------------------------------------------- -action=$1 +action=$1; shift 1 while true; do - echo - echo -e "\e[32m===== INITIALIZER FOR DOCKER APP [$APP_NAME] v$_version ===== \e[0m\n\r" if [ -z "$action" ]; then + echo + echo -e "\e[32m===== INITIALIZER FOR DOCKER APP [$APP_NAME] v$_version ===== \e[0m\n\r" + _showContainers - h2 MENU - echo " $( _key g ) - remove git data of starterkit" - echo - echo " $( _key i ) - init application: set permissions" - echo " $( _key t ) - generate files from templates" - echo " $( _key T ) - remove generated files" - echo - echo " $( _key u ) - startup containers docker-compose ... up -d" - echo " $( _key U ) - startup containers docker-compose ... up -d --build" - echo " $( _key s ) - shutdown containers docker-compose stop" - echo " $( _key r ) - remove containers docker-compose rm -f" - echo - echo " $( _key m ) - more infos" - echo " $( _key c ) - console (bash)" - echo - echo " $( _key q ) - quit" + h2 MENU + showMenu echo echo -n " select >" read -rn 1 action @@ -275,6 +331,8 @@ while true; do fi case "$action" in + "-h") showHelp; exit 0 ;; + "-v") echo $(basename $0) $_version; exit 0 ;; g) _removeGitdata ;; @@ -289,24 +347,19 @@ while true; do _removeGeneratedFiles rm -rf containers ;; - # not in the menu - # f) - # _removeGeneratedFiles - # _generateFiles - # _wait - # ;; m) _showInfos _wait ;; u|U) + h2 "Bring up..." dockerUp="docker-compose -p "$APP_NAME" --verbose up -d --remove-orphans" if [ "$action" = "U" ]; then dockerUp+=" --build" fi + echo "$dockerUp" if $dockerUp; then - echo "In a web browser:" - echo " $frontendurl" + _showBrowserurl else echo "ERROR: docker-compose up failed :-/" docker-compose -p "$APP_NAME" logs | tail @@ -316,24 +369,32 @@ while true; do _wait ;; s) + h2 "Stopping..." docker-compose -p "$APP_NAME" stop ;; r) + h2 "Removing..." docker-compose -p "$APP_NAME" rm -f ;; c) + h2 "Console" docker ps echo -n "id or name >" read dockerid test -z "$dockerid" || docker exec -it $dockerid /bin/bash ;; + o) + h2 "Open app ..." + xdg-open "$frontendurl" + ;; q) + h2 "Bye!" exit 0; ;; *) test -n "$action" && ( echo " ACTION FOR [$action] NOT IMPLEMENTED."; sleep 1 ) esac - action= + action=$1; shift 1 done -- GitLab