diff --git a/docker-compose/setup-script/noco.sh b/docker-compose/setup-script/noco.sh index 4b6e7abc80..a241d8d1d5 100755 --- a/docker-compose/setup-script/noco.sh +++ b/docker-compose/setup-script/noco.sh @@ -1,6 +1,24 @@ #!/bin/bash # set -x +# ****************************************************************************** +# ***************** GLOBAL VARIABLES START ********************************* + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +MAGENTA='\033[0;35m' +CYAN='\033[0;36m' +ORANGE='\033[0;33m' +BOLD='\033[1m' +NC='\033[0m' + +NOCO_HOME="${HOME}/.nocodb/" + +# ***************** GLOBAL VARIABLES END *********************************** +# ****************************************************************************** + # ****************************************************************************** # ***************** HELPER FUNCTIONS START ********************************* @@ -100,10 +118,63 @@ read_number_range() { echo "$number" } +check_if_docker_is_running() { + if ! $DOCKER_COMMAND ps >/dev/null 2>&1; then + echo "+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+" + echo -e "| ${BOLD}${YELLOW}Warning ! ${NC} |" + echo "| Docker is not running. Most of the commands will not work without Docker. |" + echo "| Use the following command to start Docker: |" + echo -e "| ${BLUE} sudo systemctl start docker ${NC} |" + echo "+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+" + fi +} + # ***************** HELPER FUNCTIONS END *********************************** # ****************************************************************************** +# ****************************************************************************** +# ***************** Existing Install Test ************************************ + +IS_DOCKER_REQUIRE_SUDO=$(check_for_docker_sudo) +DOCKER_COMMAND=$([ "$IS_DOCKER_REQUIRE_SUDO" = "y" ] && echo "sudo docker" || echo "docker") + +NOCO_FOUND=false + +# Check if $NOCO_HOME exists as directory or symbolic link +if [ -d "$NOCO_HOME" ] || [ -L "$NOCO_HOME" ]; then + NOCO_FOUND=true +elif $DOCKER_COMMAND ps -a --format '{{.Names}}' | grep -q nocodb; then + echo "Found NocoDB running, but was unable to auto locate the installation directory." + echo "Please provide the path to the NocoDB installation directory: " + read -r CUSATOM_NOCO_HOME + + if [ -d "$CUSATOM_NOCO_HOME" ]; then + echo "NocoDB installation directory is required." + exit 1 + fi + + ln -s "$CUSATOM_NOCO_HOME" "$NOCO_HOME" + NOCO_FOUND=true +fi + +cd "$NOCO_HOME" || exit + +# Check if nocodb is already installed +if [ "$NOCO_FOUND" = true ]; then + echo "NocoDB is already installed. And running." + echo "Do you want to reinstall NocoDB? [Y/N] (default: N): " + read -r REINSTALL + + if [ "$REINSTALL" != "Y" ] && [ "$REINSTALL" != "y" ]; then + management_menu() + exit 0 + else + echo "Reinstalling NocoDB..." + $DOCKER_COMMAND compose down + fi +fi + # ****************************************************************************** # ******************** SYSTEM REQUIREMENTS CHECK START ************************* @@ -179,13 +250,6 @@ if [ -n "$CUSTOM_FOLDER_NAME" ]; then FOLDER_NAME="$CUSTOM_FOLDER_NAME" fi - -# Create the folder -mkdir -p "$FOLDER_NAME" - -# Navigate into the folder -cd "$FOLDER_NAME" || exit - # ******************** SYSTEM REQUIREMENTS CHECK END ************************** # ****************************************************************************** @@ -535,211 +599,6 @@ server { EOF fi -IS_DOCKER_REQUIRE_SUDO=$(check_for_docker_sudo) -DOCKER_COMMAND=$([ "$IS_DOCKER_REQUIRE_SUDO" = "y" ] && echo "sudo docker" || echo "docker") - -# Generate help script -cat > help.sh </dev/null 2>&1; then - echo "+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+" - echo -e "| \${BOLD}\${YELLOW}Warning ! \${NC} |" - echo "| Docker is not running. Most of the commands will not work without Docker. |" - echo "| Use the following command to start Docker: |" - echo -e "| \${BLUE} sudo systemctl start docker \${NC} |" - echo "+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+" - fi -} - -# Function to display the menu -show_menu() { - clear - check_if_docker_is_running - echo "" - echo \$MSG - echo -e "\t\t\${BOLD}Service Management Menu\${NC}" - echo -e " \${GREEN}1. Start Service" - echo -e " \${ORANGE}2. Stop Service" - echo -e " \${CYAN}3. Logs" - echo -e " \${MAGENTA}4. Restart" - echo -e " \${BLUE}5. Upgrade" - echo -e " 6. Scale" - echo -e " 7. Monitoring" - echo -e " \${RED}0. Exit\${NC}" -} - -# Function to start the service -start_service() { - echo -e "\nStarting nocodb..." - $DOCKER_COMMAND compose up -d -} - -# Function to stop the service -stop_service() { - echo -e "\nStopping nocodb..." - $DOCKER_COMMAND compose stop -} - -show_logs_sub_menu() { - clear - echo "Select a replica for \$1:" - for i in \$(seq 1 \$2); do - echo "\$i. \$1 replica \$i" - done - echo "A. All" - echo "0. Back to Logs Menu" - echo "Enter replica number: " - read replica_choice - - if [[ "\$replica_choice" =~ ^[0-9]+\$ ]] && [ "\$replica_choice" -gt 0 ] && [ "\$replica_choice" -le "\$2" ]; then - container_id=\$($DOCKER_COMMAND compose ps | grep "\$1-\$replica_choice" | cut -d " " -f 1) - $DOCKER_COMMAND logs -f "\$container_id" - elif [ "\$replica_choice" == "A" ] || [ "\$replica_choice" == "a" ]; then - $DOCKER_COMMAND compose logs -f \$1 - elif [ "\$replica_choice" == "0" ]; then - show_logs - else - show_logs_sub_menu "\$1" "\$2" - fi -} - - -# Function to show logs -show_logs() { - clear - echo "Select a container for logs:" - - # Fetch the list of services - services=() - while IFS= read -r service; do - services+=("\$service") - done < <($DOCKER_COMMAND compose ps --services) - - service_replicas=() - count=0 - - # For each service, count the number of running instances - for service in "\${services[@]}"; do - # Count the number of lines that have the service name, which corresponds to the number of replicas - replicas=\$($DOCKER_COMMAND compose ps \$service | grep "\$service" | wc -l) - service_replicas["\$count"]=\$replicas - count=\$((count + 1)) - done - - count=1 - - for service in "\${services[@]}"; do - echo "\$count. \$service (\${service_replicas[((\$count - 1))]} replicas)" - count=\$((count + 1)) - done - - echo "A. All" - echo "0. Back to main menu" - echo "Enter your choice: " - read log_choice - echo - - if [[ "\$log_choice" =~ ^[0-9]+\$ ]] && [ "\$log_choice" -gt 0 ] && [ "\$log_choice" -lt "\$count" ]; then - service_index=\$((log_choice-1)) - service="\${services[\$service_index]}" - num_replicas="\${service_replicas[\$service_index]}" - - if [ "\$num_replicas" -gt 1 ]; then - trap 'show_logs_sub_menu "\$service" "\$num_replicas"' INT - show_logs_sub_menu "\$service" "\$num_replicas" - trap - INT - else - trap 'show_logs' INT - $DOCKER_COMMAND compose logs -f "\$service" - fi - elif [ "\$log_choice" == "A" ] || [ "\$log_choice" == "a" ]; then - trap 'show_logs' INT - $DOCKER_COMMAND compose logs -f - elif [ "\$log_choice" == "0" ]; then - return - else - show_logs - fi - - trap - INT -} - -# Function to restart the service -restart_service() { - echo -e "\nRestarting nocodb..." - $DOCKER_COMMAND compose restart -} - -# Function to upgrade the service -upgrade_service() { - echo -e "\nUpgrading nocodb..." - $DOCKER_COMMAND compose pull - $DOCKER_COMMAND compose up -d --force-recreate - $DOCKER_COMMAND image prune -a -f -} - -# Function to scale the service -scale_service() { - num_cores=\$(nproc || sysctl -n hw.ncpu || echo 1) - current_scale=\$($DOCKER_COMMAND compose ps -q nocodb | wc -l) - echo -e "\nCurrent number of instances: \$current_scale" - echo "How many instances of NocoDB do you want to run (Maximum: \${num_cores}) ? (default: 1): " - scale_num=\$(read_number_range 1 \$num_cores) - - if [ \$scale_num -eq \$current_scale ]; then - echo "Number of instances is already set to \$scale_num. Returning to main menu." - return - fi - - $DOCKER_COMMAND compose up -d --scale nocodb=\$scale_num -} - -# Function for basic monitoring -monitoring_service() { - echo -e '\nLoading stats...' - trap ' ' INT - $DOCKER_COMMAND stats -} - -# Main program loop -while true; do - trap - INT - show_menu - echo "Enter your choice: " - - read choice - case \$choice in - 1) start_service && MSG="NocoDB Started" ;; - 2) stop_service && MSG="NocoDB Stopped" ;; - 3) show_logs ;; - 4) restart_service && MSG="NocoDB Restarted" ;; - 5) upgrade_service && MSG="NocoDB has been upgraded to latest version" ;; - 6) scale_service && MSG="NocoDB has been scaled" ;; - 7) monitoring_service ;; - 0) exit 0 ;; - *) MSG="\nInvalid choice. Please select a correct option." ;; - esac -done -EOF - -message_arr+=("Help script: help.sh") - cat > ./update.sh <