dockerbunker.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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 elementInArray "$service" "${INSTALLED_SERVICES[@]}";then
  28. if elementInArray "$service" "${STOPPED_SERVICES[@]}";then
  29. service_status="$(printf "\e[32m${service}\e[0m \e[31m(Stopped)\e[0m")"
  30. else
  31. service_status="$(printf "\e[32m${service}\e[0m")"
  32. fi
  33. SERVICES_ARR+=( ["$service_status"]="${service_name}" )
  34. AVAILABLE_SERVICES+=( "$service_status" )
  35. elif elementInArray "${service}" "${CONFIGURED_SERVICES[@]}";then
  36. service_status="$(printf "\e[33m${service}\e[0m")"
  37. SERVICES_ARR+=( ["$service_status"]="${service_name}" )
  38. AVAILABLE_SERVICES+=( "$service_status" )
  39. else
  40. service_status="$(printf "${service}")"
  41. SERVICES_ARR+=( ["$service_status"]="${service_name}" )
  42. AVAILABLE_SERVICES+=( "$service_status" )
  43. fi
  44. done
  45. startall=$(printf "\e[1;4;33mStart all stopped containers\e[0m")
  46. stopall=$(printf "\e[1;4;33mStop all running containers\e[0m")
  47. startnginx=$(printf "\e[1;4;33mStart nginx container\e[0m")
  48. stopnginx=$(printf "\e[1;4;33mStop nginx container\e[0m")
  49. restartnginx=$(printf "\e[1;4;33mRestart nginx container\e[0m")
  50. renewcerts=$(printf "\e[1;4;33mRenew Let's Encrypt certificates\e[0m")
  51. restartall=$(printf "\e[1;4;33mRestart all containers\e[0m")
  52. destroyall=$(printf "\e[1;4;33mDestroy everything\e[0m")
  53. exitmenu=$(printf "\e[1;4;33mExit\e[0m")
  54. count=$((${#AVAILABLE_SERVICES[@]}+1))
  55. [[ ${STOPPED_SERVICES[0]} ]] \
  56. && AVAILABLE_SERVICES+=( "$startall" )
  57. [[ $(docker ps -q --filter "status=running" --filter name=^/nginx-dockerbunker$) ]] \
  58. && AVAILABLE_SERVICES+=( "$stopnginx" ) \
  59. && AVAILABLE_SERVICES+=( "$restartnginx") \
  60. && count=$(($count+2))
  61. [[ -d "${CONF_DIR}"/nginx/ssl/letsencrypt/live ]] \
  62. && [[ ${#INSTALLED_SERVICES[@]} > 0 ]] \
  63. && [[ $(ls -A "${CONF_DIR}"/nginx/ssl/letsencrypt/live) ]] \
  64. && AVAILABLE_SERVICES+=( "$renewcerts" ) && cound=$(($count+1))
  65. [[ ${#INSTALLED_SERVICES[@]} > 0 \
  66. || ${#STATIC_SITES[@]} > 0 \
  67. || ${#CONFIGURED_SERVICES[@]} > 0 ]] \
  68. && AVAILABLE_SERVICES+=( "$destroyall" ) \
  69. && 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) \
  73. && ${#INSTALLED_SERVICES[@]} > 1 ]] \
  74. && AVAILABLE_SERVICES+=( "$stopall" ) \
  75. && count=$(($count+1))
  76. [[ $(docker ps -q --filter "status=exited" --filter name=dockerbunker) \
  77. && ${#STOPPED_SERVICES[@]} > 1 ]] \
  78. && AVAILABLE_SERVICES+=( "$startall" ) \
  79. && count=$(($count+1))
  80. [[ ${#INSTALLED_SERVICES[@]} > 1 ]] \
  81. && AVAILABLE_SERVICES+=( "$restartall" ) \
  82. && count=$(($count+1))
  83. echo ""
  84. echo "Please select the service you want to manage"
  85. echo ""
  86. [[ ${INSTALLED_SERVICES[@]} ]] && echo -e " \e[32mGreen\e[0m: Installed"
  87. [[ ${CONFIGURED_SERVICES[@]} ]] && echo -e " \e[33mOrange\e[0m: Configured"
  88. echo ""
  89. COLUMNS=12
  90. select choice in "${AVAILABLE_SERVICES[@]}" "$exitmenu"
  91. do
  92. case $choice in
  93. "$exitmenu")
  94. exit 0
  95. ;;
  96. "$startnginx")
  97. echo ""
  98. start_nginx
  99. say_done
  100. sleep 1
  101. break
  102. ;;
  103. "$stopnginx")
  104. echo ""
  105. stop_nginx
  106. say_done
  107. sleep 1
  108. break
  109. ;;
  110. "$restartnginx")
  111. prevent_nginx_restart=1
  112. echo ""
  113. restart_nginx
  114. say_done
  115. sleep 1
  116. break
  117. ;;
  118. "$renewcerts")
  119. echo -e "\n\e[3m\xe2\x86\x92 Renew Let's Encrypt certificates\e[0m\n"
  120. "${BASE_DIR}"/certbot.sh
  121. restart_nginx
  122. say_done
  123. sleep 1
  124. break
  125. ;;
  126. "$startall")
  127. prevent_nginx_restart=1
  128. start_all
  129. say_done
  130. sleep 1
  131. break
  132. ;;
  133. "$stopall")
  134. prevent_nginx_restart=1
  135. stop_all
  136. say_done
  137. sleep 1
  138. break
  139. ;;
  140. "$destroyall")
  141. echo -e "\n\e[3m\xe2\x86\x92 Destroy everything\e[0m"
  142. echo ""
  143. echo -e "\e[1mReset dockerbunker to its initial state\e[0m"
  144. echo ""
  145. echo "The following will be removed:"
  146. echo ""
  147. echo "- All dockerbunker container(s)"
  148. echo "- All dockerbunker volume(s)"
  149. echo "- All environment file(s)"
  150. echo "- All nginx configuration files"
  151. echo "- All SSL Certificates"
  152. echo ""
  153. prompt_confirm "Continue?" \
  154. && destroy_all=1 destroy_all
  155. say_done
  156. exit 0
  157. ;;
  158. $choice)
  159. if [[ -z $choice ]];then
  160. echo "Please choose a number from 1 to $count"
  161. else
  162. service="$(echo -e "${choice,,}" | tr -d '[:space:]')"
  163. echo ""
  164. echo -e "\n\e[3m\xe2\x86\x92 Checking service status"
  165. echo ""
  166. source "${BASE_DIR}"/data/services/${SERVICES_ARR[$choice]}/${SERVICES_ARR[$choice]}.sh
  167. break
  168. fi
  169. ;;
  170. esac
  171. done