123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- #!/usr/bin/env bash
- if [[ -r /etc/redhat-release ]];then
- if ! dnf list installed docker-ce &>/dev/null;then
- docker_missing=1
- fi
- elif [[ -r /etc/debian_version ]];then
- if ! dpkg -l docker &>/dev/null;then
- docker_missing=1
- fi
- fi
- [[ $docker_missing ]] \
- && 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";
- # Find base dir
- BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
- source "${BASE_DIR}"/data/include/init.sh
- [[ -f "data/env/dockerbunker.env" ]] && source "data/env/dockerbunker.env" || init_dockerbunker
- unset AVAILABLE_SERVICES count
- # All available services
- declare -a ALL_SERVICES=( \
- "Static HTML Site" \
- "Bitbucket" \
- "Cryptpad" \
- "CS50 IDE" \
- "Dillinger" \
- "Drone CI" \
- "Ghost" \
- "GitBucket" \
- "Gitea" \
- "Gitlab CE" \
- "Gogs" \
- "Hastebin" \
- "IPsec VPN Server" \
- "json-server" \
- "Kanboard" \
- "Mailcow (Dockerized)" \
- "Mailpile" \
- "Mastodon" \
- "Nextcloud" \
- "Open Project" \
- "Padlock Cloud" \
- "Piwik" \
- "Rocket.Chat" \
- "Seafile Pro" \
- "Searx" \
- "Send" \
- "sFTP Server" \
- "Wekan" \
- "Wordpress" \
- )
- # style menu according to what status service has
- declare -A SERVICES_ARR
- for service in "${ALL_SERVICES[@]}";do
- service_name="$(echo -e "${service,,}" | tr -cd '[:alnum:]')"
- if [[ "${INSTALLED_SERVICES[@]}" =~ $service ]];then
- [[ "${STOPPED_SERVICES[@]}" =~ $service ]] && service_status="$(printf "\e[32m${service}\e[0m \e[31m(Stopped)\e[0m")" || service_status="$(printf "\e[32m${service}\e[0m")"
- SERVICES_ARR+=( [$service_status]="${service_name}" )
- AVAILABLE_SERVICES+=( "$service_status" )
- elif [[ "${CONFIGURED_SERVICES[@]}" =~ $service ]];then
- service_status="$(printf "\e[33m${service}\e[0m")"
- SERVICES_ARR+=( [$service_status]="${service_name}" )
- AVAILABLE_SERVICES+=( "$service_status" )
- else
- service_status="$(printf "${service}")"
- SERVICES_ARR+=( [$service_status]="${service_name}" )
- AVAILABLE_SERVICES+=( "$service_status" )
- fi
- done
- startall=$(printf "\e[1;4;33mStart all stopped containers\e[0m")
- stopall=$(printf "\e[1;4;33mStop all running containers\e[0m")
- startnginx=$(printf "\e[1;4;33mStart nginx container\e[0m")
- stopnginx=$(printf "\e[1;4;33mStop nginx container\e[0m")
- restartnginx=$(printf "\e[1;4;33mRestart nginx container\e[0m")
- renewcerts=$(printf "\e[1;4;33mRenew Let's Encrypt certificates\e[0m")
- restartall=$(printf "\e[1;4;33mRestart all containers\e[0m")
- destroyall=$(printf "\e[1;4;33mDestroy everything\e[0m")
- exitmenu=$(printf "\e[1;4;33mExit\e[0m")
- count=$((${#AVAILABLE_SERVICES[@]}+1))
- [[ ${STOPPED_SERVICES[0]} ]] \
- && AVAILABLE_SERVICES+=( "$startall" )
- [[ $(docker ps -q --filter "status=running" --filter name=^/nginx-dockerbunker$) ]] \
- && AVAILABLE_SERVICES+=( "$stopnginx" ) \
- && AVAILABLE_SERVICES+=( "$restartnginx") \
- && count=$(($count+2))
- [[ -d "${CONF_DIR}"/nginx/ssl/letsencrypt/live ]] \
- && [[ $(ls -A "${CONF_DIR}"/nginx/ssl/letsencrypt/live) ]] \
- && AVAILABLE_SERVICES+=( "$renewcerts" ) && cound=$(($count+1))
- [[ ${#INSTALLED_SERVICES[@]} > 0 \
- || ${#STATIC_SITES[@]} > 0 \
- || ${#CONFIGURED_SERVICES[@]} > 0 \
- || -f "${BASE_DIR}"/data/env/dockerbunker.env ]] \
- && AVAILABLE_SERVICES+=( "$destroyall" ) \
- && count=$(($count+1))
- [[ $(docker ps -q --filter "status=exited" --filter name=^/nginx-dockerbunker$) ]] \
- && AVAILABLE_SERVICES+=( "$startnginx" )
- [[ $(docker ps -q --filter "status=running" --filter name=dockerbunker) \
- && ${#INSTALLED_SERVICES[@]} > 1 ]] \
- && AVAILABLE_SERVICES+=( "$stopall" ) \
- && count=$(($count+1))
- [[ $(docker ps -q --filter "status=exited" --filter name=dockerbunker) \
- && ${#STOPPED_SERVICES[@]} > 1 ]] \
- && AVAILABLE_SERVICES+=( "$startall" ) \
- && count=$(($count+1))
- [[ ${#INSTALLED_SERVICES[@]} > 1 ]] \
- && AVAILABLE_SERVICES+=( "$restartall" ) \
- && count=$(($count+1))
- echo ""
- echo "Please select the service you want to manage"
- echo ""
- [[ ${INSTALLED_SERVICES[@]} ]] && echo -e " \e[32mGreen\e[0m: Installed"
- [[ ${CONFIGURED_SERVICES[@]} ]] && echo -e " \e[33mOrange\e[0m: Configured"
- echo ""
- COLUMNS=12
- select choice in "${AVAILABLE_SERVICES[@]}" "$exitmenu"
- do
- case $choice in
- "$exitmenu")
- exit 0
- ;;
- "$startnginx")
- echo ""
- start_nginx
- say_done
- sleep 1
- break
- ;;
- "$stopnginx")
- echo ""
- stop_nginx
- say_done
- sleep 1
- break
- ;;
- "$restartnginx")
- prevent_nginx_restart=1
- echo ""
- restart_nginx
- say_done
- sleep 1
- break
- ;;
- "$renewcerts")
- echo -e "\n\e[3m\xe2\x86\x92 Renew Let's Encrypt certificates\e[0m\n"
- "${BASE_DIR}"/certbot.sh
- restart_nginx
- say_done
- sleep 1
- break
- ;;
- "$startall")
- prevent_nginx_restart=1
- start_all
- say_done
- sleep 1
- break
- ;;
- "$stopall")
- prevent_nginx_restart=1
- stop_all
- say_done
- sleep 1
- break
- ;;
- "$destroyall")
- echo -e "\n\e[3m\xe2\x86\x92 Destroy everything\e[0m"
- echo ""
- echo -e "\e[1mReset dockerbunker to its initial state\e[0m"
- echo ""
- echo "The following will be removed:"
- echo ""
- echo "- All dockerbunker container(s)"
- echo "- All dockerbunker volume(s)"
- echo "- All environment file(s)"
- echo "- All nginx configuration files"
- echo "- All self-signed certificates (Let's Encrypt certificates will be retained)"
- echo ""
- prompt_confirm "Continue?" \
- && destroy_all=1 destroy_all
- say_done
- exit 0
- ;;
- $choice)
- if [[ -z $choice ]];then
- echo "Please choose a number from 1 to $count"
- else
- service="$(echo -e "${choice,,}" | tr -d '[:space:]')"
- echo ""
- echo -e "\n\e[3m\xe2\x86\x92 Checking service status"
- echo ""
- source "${BASE_DIR}"/data/services/${SERVICES_ARR[$choice]}/${SERVICES_ARR[$choice]}.sh
- break
- fi
- ;;
- esac
- done
|