dockerbunker.sh 5.5 KB

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