diff --git a/docker/init.sh b/docker/init.sh index a363a37ab168c144c4aef3d377c41e37556c90fd..14f1f91f9b19f8b25e5ec6567b8446509da6c7b7 100755 --- a/docker/init.sh +++ b/docker/init.sh @@ -26,6 +26,8 @@ # 2024-09-20 v1.19 <www.axel-hahn.de> detect dockerd-rootless (hides menu item to set permissions) # 2024-10-16 v1.20 <axel.hahn@unibe.ch> add db import and export # 2024-10-25 v1.21 <axel.hahn@unibe.ch> create missing subdir dbdumps +# 2024-10-30 v1.22 <axel.hahn@unibe.ch> added: Open Mysql client in container +# 2024-10-30 v1.23 <axel.hahn@unibe.ch> added: show menu hints why some menu items are visible # ====================================================================== cd "$( dirname "$0" )" || exit 1 @@ -39,7 +41,7 @@ _self=$( basename "$0" ) # shellcheck source=/dev/null . "${_self}.cfg" || exit 1 -_version="1.21" +_version="1.23" # git@git-repo.iml.unibe.ch:iml-open-source/docker-php-starterkit.git selfgitrepo="docker-php-starterkit.git" @@ -66,6 +68,7 @@ DC_CONFIG_CHANGED=0 DC_WEB_URL="" DC_DUMP_DIR=dbdumps +DC_SHOW_MENUHINTS=0 isDockerRootless=0 ps -ef | grep dockerd-rootless | grep -q $USER && isDockerRootless=1 @@ -107,11 +110,15 @@ function _getStatus_docker(){ if [ "$DB_ADD" != "false" ] && [ ! -d "${DC_DUMP_DIR}" ]; then echo "INFO: creating subdir ${DC_DUMP_DIR} to import/ export databases ..." mkdir "${DC_DUMP_DIR}" || exit 1 - return -fi + return + fi } +# Get web url of the application +# It is for support of Nginx Docker Proxy +# https://github.com/axelhahn/nginx-docker-proxy +# It returns http://localhost:<port> or a https://<appname> function _getWebUrl(){ DC_WEB_URL="$frontendurl" grep -q "${APP_NAME}-server" /etc/hosts && DC_WEB_URL="https://${APP_NAME}-server/" @@ -137,6 +144,15 @@ function _key(){ echo -en "\e[4;7m ${1} \e[0m" } +# helper for menu: show hint text +# param int FLag _bAll (i true the txt will be hidden) +# param string message to show +function menuhint(){ + local _bAll="$1" + shift 1 + test $DC_SHOW_MENUHINTS -ne 0 && test "$_bAll" -eq "0" && ( echo -e "$fgBlue $*$fgReset" ) +} + # show menu in interactive mode and list keys in help with param -h # param string optional: set to "all" to show all menu items function showMenu(){ @@ -148,44 +164,60 @@ function showMenu(){ echo if [ $DC_REPO -eq 1 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "Git data of starterkit were found" echo "${_spacer}$( _key g ) - remove git data of starterkit" echo fi if [ $isDockerRootless -eq 1 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "Beause rootless docker was found" echo "${_spacer}$( _key i ) - init application: set permissions" + echo fi if [ $DC_CONFIG_CHANGED -eq 1 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "Config was changed" echo "${_spacer}$( _key t ) - generate files from templates" + echo fi if [ $DC_CONFIG_CHANGED -eq 0 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "Config is unchanged" echo "${_spacer}$( _key T ) - remove generated files" + echo fi - echo if [ $DC_WEB_UP -eq 0 ] || [ $DC_DB_UP -eq 0 ] || [ $_bAll -eq 1 ]; then if [ $DC_CONFIG_CHANGED -eq 0 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "A container is down and config is unchanged" echo "${_spacer}$( _key u ) - startup containers docker-compose ... up -d" echo "${_spacer}$( _key U ) - startup containers docker-compose ... up -d --build" echo echo "${_spacer}$( _key r ) - remove containers docker-compose rm -f" + echo fi fi if [ $DC_WEB_UP -eq 1 ] || [ $DC_DB_UP -eq 1 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "${_spacer}A container is up" echo "${_spacer}$( _key s ) - shutdown containers docker-compose stop" echo echo "${_spacer}$( _key m ) - more infos" echo "${_spacer}$( _key o ) - open app [${APP_NAME}] $DC_WEB_URL" echo "${_spacer}$( _key c ) - console (bash)" + echo fi if [ $DC_WEB_UP -eq 1 ] || [ $_bAll -eq 1 ]; then + menuhint $_bAll "Web container is up" echo "${_spacer}$( _key p ) - console check with php linter" + echo fi if [ $DC_DB_UP -eq 1 ] || [ $_bAll -eq 1 ]; then + echo + menuhint $_bAll "Database container is up" echo "${_spacer}$( _key d ) - Dump container database" echo "${_spacer}$( _key D ) - Import Dump into container database" + echo "${_spacer}$( _key M ) - Open Mysql client in database container" + echo fi - echo + menuhint $_bAll "Always available" echo "${_spacer}$( _key q ) - quit" } @@ -706,6 +738,10 @@ while true; do h2 "DB tools :: import" _dbImport ;; + M) + h2 "DB tools :: mysql client" + docker exec -it "${APP_NAME}-db" mysql -uroot -p${MYSQL_ROOT_PASS} "${MYSQL_DB}" + ;; o) h2 "Open app ..." xdg-open "$DC_WEB_URL" diff --git a/docker/init.sh.cfg b/docker/init.sh.cfg index 0f1cabfd92497c693f38a1cdec0d36bff164000c..bc6f16d4ebc43c4bb2977b76438f57382d9c106c 100644 --- a/docker/init.sh.cfg +++ b/docker/init.sh.cfg @@ -7,6 +7,7 @@ # # ---------------------------------------------------------------------- # 2021-12-17 <axel.hahn@iml.unibe.ch> +# 2024-10-30 <axel.hahn@unibe.ch> add DC_SHOW_MENUHINTS # ====================================================================== APP_NAME=my_new_app @@ -47,6 +48,11 @@ MYSQL_USER=${APP_NAME} MYSQL_PASS=mypassword MYSQL_DB=${APP_NAME} +# ---------------------------------------------------------------------- +# Settings for init.sh + +# show hints for menu items in interactive mode +DC_SHOW_MENUHINTS=0 # ====================================================================== diff --git "a/docs/40_\342\232\231\357\270\217_Configuration/10_init.sh.cfg.md" "b/docs/40_\342\232\231\357\270\217_Configuration/10_init.sh.cfg.md" index 933f0e2d8d69918120551f243650c3db39667ccd..a75f13254db4d8b812885869ca94c7f1e79d6ad3 100644 --- "a/docs/40_\342\232\231\357\270\217_Configuration/10_init.sh.cfg.md" +++ "b/docs/40_\342\232\231\357\270\217_Configuration/10_init.sh.cfg.md" @@ -129,6 +129,7 @@ APP_PORT | int | port number for your local machine that CUTTER_NO_DATABASE | const | do not change it; the string is used to cut templates from there if no database is used DB_ADD | bool | flag: do you add a Mariadb container? default: false DB_PORT | int | port number for your local machine that will be mapped to port 3306 in the container; You can use it in a local db manager; remark: tha apache container needs 3306 and not the mapped port. +DC_SHOW_MENUHINTS | int | Flag to show a notice why menu items are visible; default: 0 (off) DOCKER_USER_UID | int | unix uid of the httpd service user in apache container; it's not needed to change; default: 33 MYSQL_ALLOW_EMPTY_PASSWORD | int | flag: 0 MYSQL_DB | string | name of database; defaut is app name ${APP_NAME} diff --git "a/docs/40_\342\232\231\357\270\217_Configuration/20_Templates.md" "b/docs/40_\342\232\231\357\270\217_Configuration/20_Templates.md" index 798494339a773ff2d17e4cffdbc090cee5615f93..df515a05969a43c28d71905ee25bfcb6fb1aad76 100644 --- "a/docs/40_\342\232\231\357\270\217_Configuration/20_Templates.md" +++ "b/docs/40_\342\232\231\357\270\217_Configuration/20_Templates.md" @@ -31,7 +31,6 @@ Optional changes: # (2) run "docker-compose up" to startup # # ====================================================================== -version: '3.9' networks: {{APP_NAME}}-network: diff --git "a/docs/50_\342\214\250\357\270\217_Usage.md" "b/docs/50_\342\214\250\357\270\217_Usage.md" index 8284eb1cca9e69f8e7da4528ff5f58e283c75f1b..4fefa106c249575eadef6de7a60214080bf0548e 100644 --- "a/docs/50_\342\214\250\357\270\217_Usage.md" +++ "b/docs/50_\342\214\250\357\270\217_Usage.md" @@ -13,7 +13,7 @@ The script supports command line parameters to use it in scripts. Use `-h` to ge ```txt -INITIALIZER FOR DOCKER APP v1.20 +INITIALIZER FOR DOCKER APP v1.22 A helper script written in Bash to bring up a PHP+Mysql application in docker. @@ -49,12 +49,14 @@ MENU KEYS: r - remove containers docker-compose rm -f s - shutdown containers docker-compose stop - i - Import more into infos + m - more infos o - open app [my_new_app] http://localhost:8001/ c - console (bash) p - console check with php linter + d - Dump container database D - Import Dump into container database + M - Open Mysql client in database container q - quit @@ -152,4 +154,11 @@ This feature works if the database container is running. You get a file selection of the `./dbdumps/` directory. The selected sql or sql.gz file will be imported. -**Hint**: With this feature you can import a dump from a live system into your dev environment too. Just copy its dump into `./dbdumps/`. \ No newline at end of file +**Hint**: With this feature you can import a dump from a live system into your dev environment too. Just copy its dump into `./dbdumps/`. + +#### M - Open Mysql client in database container + +With docker exec in the database container the mysql client `mysql` will be started with root credentials on the application database. +This is faster than opening a shell on the container and start `mysql -u root -p<password> <dbname>` where you have to search the credentials first. + +Because of the usage of docker exec it works too when the database port is not exposed.