dockerbunker.sh 5.5 KB

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