dockerbunker.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #!/usr/bin/env bash
  2. # Find base dir
  3. while true;do ls | grep -q dockerbunker.sh;if [[ $? == 0 ]];then BASE_DIR=$PWD;break;else cd ../;fi;done
  4. source "${BASE_DIR}"/data/include/init.sh
  5. [[ -f "data/env/dockerbunker.env" ]] && source "data/env/dockerbunker.env" || init_dockerbunker
  6. unset AVAILABLE_SERVICES count
  7. # All available services
  8. declare -a ALL_SERVICES=( \
  9. "Static HTML Site" \
  10. "Bitbucket" \
  11. "Cryptpad" \
  12. "CS50 IDE" \
  13. "Dillinger" \
  14. "Ghost" \
  15. "Gitea" \
  16. "Gitlab CE" \
  17. "Gogs" \
  18. "Hastebin" \
  19. "IPsec VPN Server" \
  20. "Kanboard" \
  21. "Mailcow Dockerized" \
  22. "Mailpile" \
  23. "Mastodon" \
  24. "Nextcloud" \
  25. "Open Project" \
  26. "Piwik" \
  27. "Seafile Pro" \
  28. "Searx" \
  29. "Send" \
  30. "sFTP Server" \
  31. "Wordpress" \
  32. )
  33. # style menu according to what status service has
  34. declare -A SERVICES_ARR
  35. for service in "${ALL_SERVICES[@]}";do
  36. service_name="$(echo -e "${service,,}" | tr -d '[:space:]')"
  37. if [[ "${INSTALLED_SERVICES[@]}" =~ $service ]];then
  38. [[ "${STOPPED_SERVICES[@]}" =~ $service ]] && service_status="$(printf "\e[32m${service}\e[0m \e[31m(Stopped)\e[0m")" || service_status="$(printf "\e[32m${service}\e[0m")"
  39. SERVICES_ARR+=( [$service_status]="${service_name}" )
  40. AVAILABLE_SERVICES+=( "$service_status" )
  41. elif [[ "${CONFIGURED_SERVICES[@]}" =~ $service ]];then
  42. service_status="$(printf "\e[33m${service}\e[0m")"
  43. SERVICES_ARR+=( [$service_status]="${service_name}" )
  44. AVAILABLE_SERVICES+=( "$service_status" )
  45. else
  46. service_status="$(printf "${service}")"
  47. SERVICES_ARR+=( [$service_status]="${service_name}" )
  48. AVAILABLE_SERVICES+=( "$service_status" )
  49. fi
  50. done
  51. startall=$(printf "\e[1;4;33mStart all stopped containers\e[0m")
  52. stopall=$(printf "\e[1;4;33mStop all running containers\e[0m")
  53. startnginx=$(printf "\e[1;4;33mStart nginx container\e[0m")
  54. stopnginx=$(printf "\e[1;4;33mStop nginx container\e[0m")
  55. restartnginx=$(printf "\e[1;4;33mRestart nginx container\e[0m")
  56. restartall=$(printf "\e[1;4;33mRestart all containers\e[0m")
  57. destroyall=$(printf "\e[1;4;33mDestroy everything\e[0m")
  58. exitmenu=$(printf "\e[1;4;33mExit\e[0m")
  59. count=$((${#AVAILABLE_SERVICES[@]}+1))
  60. [[ ${STOPPED_SERVICES[0]} ]] \
  61. && AVAILABLE_SERVICES+=( "$startall" )
  62. [[ $(docker ps -q --filter "status=running" --filter name=^/nginx-dockerbunker$) ]] \
  63. && AVAILABLE_SERVICES+=( "$stopnginx" ) \
  64. && AVAILABLE_SERVICES+=( "$restartnginx") \
  65. && count=$(($count+2))
  66. [[ ${#INSTALLED_SERVICES[@]} > 0 \
  67. || ${#STATIC_SITES[@]} > 0 \
  68. || ${#CONFIGURED_SERVICES[@]} > 0 ]] \
  69. && AVAILABLE_SERVICES+=( "$destroyall" ) && count=$(($count+1))
  70. [[ $(docker ps -q --filter "status=exited" --filter name=^/nginx-dockerbunker$) ]] \
  71. && AVAILABLE_SERVICES+=( "$startnginx" )
  72. [[ $(docker ps -q --filter "status=running" --filter name=dockerbunker) && ${#INSTALLED_SERVICES[@]} == 0 && -z ${STATIC_SITES[@]} ]] && AVAILABLE_SERVICES+=( "$destroyall" ) && count=$(($count+1))
  73. [[ $(docker ps -q --filter "status=running" --filter name=dockerbunker) && ${#INSTALLED_SERVICES[@]} > 1 ]] && AVAILABLE_SERVICES+=( "$stopall" ) && count=$(($count+1))
  74. [[ $(docker ps -q --filter "status=exited" --filter name=dockerbunker) && ${#STOPPED_SERVICES[@]} > 1 ]] && AVAILABLE_SERVICES+=( "$startall" ) && count=$(($count+1))
  75. [[ ${#INSTALLED_SERVICES[@]} > 1 ]] && AVAILABLE_SERVICES+=( "$restartall" ) && count=$(($count+1))
  76. echo ""
  77. echo "Please select the service you want to manage"
  78. echo ""
  79. [[ ${INSTALLED_SERVICES[@]} ]] && echo -e " \e[32mGreen\e[0m: Installed"
  80. [[ ${CONFIGURED_SERVICES[@]} ]] && echo -e " \e[33mOrange\e[0m: Configured"
  81. echo ""
  82. COLUMNS=12
  83. select choice in "${AVAILABLE_SERVICES[@]}" "$exitmenu"
  84. do
  85. case $choice in
  86. "$exitmenu")
  87. exit 0
  88. ;;
  89. "$startnginx")
  90. echo ""
  91. start_nginx
  92. say_done
  93. sleep 1
  94. break
  95. ;;
  96. "$stopnginx")
  97. echo ""
  98. stop_nginx
  99. say_done
  100. sleep 1
  101. break
  102. ;;
  103. "$restartnginx")
  104. prevent_nginx_restart=1
  105. echo ""
  106. restart_nginx
  107. say_done
  108. sleep 1
  109. break
  110. ;;
  111. "$startall")
  112. prevent_nginx_restart=1
  113. start_all
  114. say_done
  115. sleep 1
  116. break
  117. ;;
  118. "$stopall")
  119. prevent_nginx_restart=1
  120. stop_all
  121. say_done
  122. sleep 1
  123. break
  124. ;;
  125. "$destroyall")
  126. echo -e "\n\e[3m\xe2\x86\x92 Destroy everything\e[0m"
  127. echo ""
  128. echo -e "\e[1mReset dockerbunker to its initial state\e[0m"
  129. echo ""
  130. echo "The following will be removed:"
  131. echo ""
  132. echo "- All dockerbunker container(s)"
  133. echo "- All dockerbunker volume(s)"
  134. echo "- All environment file(s)"
  135. echo "- All nginx configuration files"
  136. echo "- All self-signed certificates (Let's Encrypt certificates will be retained)"
  137. echo ""
  138. prompt_confirm "Continue?" \
  139. && destroy_all=1 destroy_all
  140. say_done
  141. exit 0
  142. ;;
  143. $choice)
  144. if [[ -z $choice ]];then
  145. echo "Please choose a number from 1 to $count"
  146. else
  147. service="$(echo -e "${choice,,}" | tr -d '[:space:]')"
  148. echo ""
  149. echo -e "\n\e[3m\xe2\x86\x92 Checking service status"
  150. echo ""
  151. source "${BASE_DIR}"/data/services/${SERVICES_ARR[$choice]}/${SERVICES_ARR[$choice]}.sh
  152. break
  153. fi
  154. ;;
  155. esac
  156. done