dockerbunker.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #!/usr/bin/env bash
  2. if [[ -r /etc/redhat-release ]];then
  3. if ! dnf list installed docker-ce &>/dev/null;then
  4. docker_missing=1
  5. fi
  6. elif [[ -r /etc/debian_version ]];then
  7. if ! dpkg -l docker &>/dev/null;then
  8. docker_missing=1
  9. fi
  10. fi
  11. [[ $docker_missing ]] \
  12. && echo -e "\n\e[3m\xe2\x86\x92 \e[1mCould not find docker.\e[3m\n\nMost systems can install Docker by running:\n\nwget -qO- https://get.docker.com/ | sh\n";
  13. # Find base dir
  14. BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  15. source "${BASE_DIR}"/data/include/init.sh
  16. [[ -f "data/env/dockerbunker.env" ]] && source "data/env/dockerbunker.env" || init_dockerbunker
  17. unset AVAILABLE_SERVICES count
  18. # All available services
  19. IFS=$'\n' declare -a ALL_SERVICES=( "$(cat ${BASE_DIR}/included_services)" )
  20. [[ -f "${BASE_DIR}"/included_services.custom ]] \
  21. && IFS=$'\n' declare -a ALL_SERVICES+=( "$(cat ${BASE_DIR}/included_services.custom | sed '/^#/d')" )
  22. IFS=$'\n' sorted=($(printf '%s\n' "${ALL_SERVICES[@]}"|sort))
  23. # style menu according to what status service has
  24. declare -A SERVICES_ARR
  25. for service in "${sorted[@]}";do
  26. service_name="$(echo -e "${service,,}" | tr -cd '[:alnum:]')"
  27. if [[ "${INSTALLED_SERVICES[@]}" =~ "$service" ]];then
  28. [[ "${STOPPED_SERVICES[@]}" =~ "$service" ]] && service_status="$(printf "\e[32m${service}\e[0m \e[31m(Stopped)\e[0m")" || service_status="$(printf "\e[32m${service}\e[0m")"
  29. SERVICES_ARR+=( ["$service_status"]="${service_name}" )
  30. AVAILABLE_SERVICES+=( "$service_status" )
  31. elif [[ "${CONFIGURED_SERVICES[@]}" =~ "$service" ]];then
  32. service_status="$(printf "\e[33m${service}\e[0m")"
  33. SERVICES_ARR+=( ["$service_status"]="${service_name}" )
  34. AVAILABLE_SERVICES+=( "$service_status" )
  35. else
  36. service_status="$(printf "${service}")"
  37. SERVICES_ARR+=( ["$service_status"]="${service_name}" )
  38. AVAILABLE_SERVICES+=( "$service_status" )
  39. fi
  40. done
  41. startall=$(printf "\e[1;4;33mStart all stopped containers\e[0m")
  42. stopall=$(printf "\e[1;4;33mStop all running containers\e[0m")
  43. startnginx=$(printf "\e[1;4;33mStart nginx container\e[0m")
  44. stopnginx=$(printf "\e[1;4;33mStop nginx container\e[0m")
  45. restartnginx=$(printf "\e[1;4;33mRestart nginx container\e[0m")
  46. renewcerts=$(printf "\e[1;4;33mRenew Let's Encrypt certificates\e[0m")
  47. restartall=$(printf "\e[1;4;33mRestart all containers\e[0m")
  48. destroyall=$(printf "\e[1;4;33mDestroy everything\e[0m")
  49. exitmenu=$(printf "\e[1;4;33mExit\e[0m")
  50. count=$((${#AVAILABLE_SERVICES[@]}+1))
  51. [[ ${STOPPED_SERVICES[0]} ]] \
  52. && AVAILABLE_SERVICES+=( "$startall" )
  53. [[ $(docker ps -q --filter "status=running" --filter name=^/nginx-dockerbunker$) ]] \
  54. && AVAILABLE_SERVICES+=( "$stopnginx" ) \
  55. && AVAILABLE_SERVICES+=( "$restartnginx") \
  56. && count=$(($count+2))
  57. [[ -d "${CONF_DIR}"/nginx/ssl/letsencrypt/live ]] \
  58. && [[ $(ls -A "${CONF_DIR}"/nginx/ssl/letsencrypt/live) ]] \
  59. && AVAILABLE_SERVICES+=( "$renewcerts" ) && cound=$(($count+1))
  60. [[ ${#INSTALLED_SERVICES[@]} > 0 \
  61. || ${#STATIC_SITES[@]} > 0 \
  62. || ${#CONFIGURED_SERVICES[@]} > 0 \
  63. || -f "${BASE_DIR}"/data/env/dockerbunker.env ]] \
  64. && AVAILABLE_SERVICES+=( "$destroyall" ) \
  65. && count=$(($count+1))
  66. [[ $(docker ps -q --filter "status=exited" --filter name=^/nginx-dockerbunker$) ]] \
  67. && AVAILABLE_SERVICES+=( "$startnginx" )
  68. [[ $(docker ps -q --filter "status=running" --filter name=dockerbunker) \
  69. && ${#INSTALLED_SERVICES[@]} > 1 ]] \
  70. && AVAILABLE_SERVICES+=( "$stopall" ) \
  71. && count=$(($count+1))
  72. [[ $(docker ps -q --filter "status=exited" --filter name=dockerbunker) \
  73. && ${#STOPPED_SERVICES[@]} > 1 ]] \
  74. && AVAILABLE_SERVICES+=( "$startall" ) \
  75. && count=$(($count+1))
  76. [[ ${#INSTALLED_SERVICES[@]} > 1 ]] \
  77. && AVAILABLE_SERVICES+=( "$restartall" ) \
  78. && count=$(($count+1))
  79. echo ""
  80. echo "Please select the service you want to manage"
  81. echo ""
  82. [[ ${INSTALLED_SERVICES[@]} ]] && echo -e " \e[32mGreen\e[0m: Installed"
  83. [[ ${CONFIGURED_SERVICES[@]} ]] && echo -e " \e[33mOrange\e[0m: Configured"
  84. echo ""
  85. COLUMNS=12
  86. select choice in "${AVAILABLE_SERVICES[@]}" "$exitmenu"
  87. do
  88. case $choice in
  89. "$exitmenu")
  90. exit 0
  91. ;;
  92. "$startnginx")
  93. echo ""
  94. start_nginx
  95. say_done
  96. sleep 1
  97. break
  98. ;;
  99. "$stopnginx")
  100. echo ""
  101. stop_nginx
  102. say_done
  103. sleep 1
  104. break
  105. ;;
  106. "$restartnginx")
  107. prevent_nginx_restart=1
  108. echo ""
  109. restart_nginx
  110. say_done
  111. sleep 1
  112. break
  113. ;;
  114. "$renewcerts")
  115. echo -e "\n\e[3m\xe2\x86\x92 Renew Let's Encrypt certificates\e[0m\n"
  116. "${BASE_DIR}"/certbot.sh
  117. restart_nginx
  118. say_done
  119. sleep 1
  120. break
  121. ;;
  122. "$startall")
  123. prevent_nginx_restart=1
  124. start_all
  125. say_done
  126. sleep 1
  127. break
  128. ;;
  129. "$stopall")
  130. prevent_nginx_restart=1
  131. stop_all
  132. say_done
  133. sleep 1
  134. break
  135. ;;
  136. "$destroyall")
  137. echo -e "\n\e[3m\xe2\x86\x92 Destroy everything\e[0m"
  138. echo ""
  139. echo -e "\e[1mReset dockerbunker to its initial state\e[0m"
  140. echo ""
  141. echo "The following will be removed:"
  142. echo ""
  143. echo "- All dockerbunker container(s)"
  144. echo "- All dockerbunker volume(s)"
  145. echo "- All environment file(s)"
  146. echo "- All nginx configuration files"
  147. echo "- All self-signed certificates (Let's Encrypt certificates will be retained)"
  148. echo ""
  149. prompt_confirm "Continue?" \
  150. && destroy_all=1 destroy_all
  151. say_done
  152. exit 0
  153. ;;
  154. $choice)
  155. if [[ -z $choice ]];then
  156. echo "Please choose a number from 1 to $count"
  157. else
  158. service="$(echo -e "${choice,,}" | tr -d '[:space:]')"
  159. echo ""
  160. echo -e "\n\e[3m\xe2\x86\x92 Checking service status"
  161. echo ""
  162. source "${BASE_DIR}"/data/services/${SERVICES_ARR[$choice]}/${SERVICES_ARR[$choice]}.sh
  163. break
  164. fi
  165. ;;
  166. esac
  167. done