From c279e22cb23ddf54cffcc7a9abbe9422fa2682aa Mon Sep 17 00:00:00 2001 From: Rohit T P Date: Wed, 24 Apr 2024 17:02:54 +0000 Subject: [PATCH 1/6] chore: merged help.sh with noco.sh --- docker-compose/setup-script/noco.sh | 319 ++++++++++++++++------------ 1 file changed, 178 insertions(+), 141 deletions(-) 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,53 +599,67 @@ server { EOF fi -IS_DOCKER_REQUIRE_SUDO=$(check_for_docker_sudo) -DOCKER_COMMAND=$([ "$IS_DOCKER_REQUIRE_SUDO" = "y" ] && echo "sudo docker" || echo "docker") +cat > ./update.sh < 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 -} +if [ "$SSL_ENABLED" = 'y' ] || [ "$SSL_ENABLED" = 'Y' ]; then + echo 'Starting Letsencrypt certificate request...'; + + $DOCKER_COMMAND compose exec certbot certbot certonly --webroot --webroot-path=/var/www/certbot -d "$DOMAIN_NAME" --email "contact@$DOMAIN_NAME" --agree-tos --no-eff-email && echo "Certificate request successful" || echo "Certificate request failed" + # Initial Let's Encrypt certificate request + + # Update the nginx config to use the new certificates + rm -rf ./nginx/default.conf + mv ./nginx-post-config/default.conf ./nginx/ + rm -r ./nginx-post-config + + echo "Restarting nginx to apply the new certificates" + # Reload nginx to apply the new certificates + $DOCKER_COMMAND compose exec nginx nginx -s reload + + message_arr+=("NocoDB is now available at https://$DOMAIN_NAME") + +elif [ -n "$DOMAIN_NAME" ]; then + message_arr+=("NocoDB is now available at http://$DOMAIN_NAME") +else + message_arr+=("NocoDB is now available at http://localhost") +fi + +print_box_message "${message_arr[@]}" + +# *************************** SETUP END ************************************* +# **************************************************************************** + +# ***************************************************************************** +# *************************** Management ************************************* # 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 $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}" + echo -e " ${RED}0. Exit${NC}" } # Function to start the service @@ -598,24 +676,24 @@ stop_service() { show_logs_sub_menu() { clear - echo "Select a replica for \$1:" - for i in \$(seq 1 \$2); do - echo "\$i. \$1 replica \$i" + 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 + 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" + show_logs_sub_menu "$1" "$2" fi } @@ -628,25 +706,25 @@ show_logs() { # Fetch the list of services services=() while IFS= read -r service; do - services+=("\$service") + 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 + 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)) + 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)) + for service in "${services[@]}"; do + echo "$count. $service (${service_replicas[(($count - 1))]} replicas)" + count=$((count + 1)) done echo "A. All" @@ -655,23 +733,23 @@ show_logs() { 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 [[ "$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" + 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" + $DOCKER_COMMAND compose logs -f "$service" fi - elif [ "\$log_choice" == "A" ] || [ "\$log_choice" == "a" ]; then + elif [ "$log_choice" == "A" ] || [ "$log_choice" == "a" ]; then trap 'show_logs' INT $DOCKER_COMMAND compose logs -f - elif [ "\$log_choice" == "0" ]; then + elif [ "$log_choice" == "0" ]; then return else show_logs @@ -696,18 +774,18 @@ upgrade_service() { # 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." + 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 + $DOCKER_COMMAND compose up -d --scale nocodb=$scale_num } # Function for basic monitoring @@ -717,68 +795,27 @@ monitoring_service() { $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 < Date: Sat, 27 Apr 2024 18:14:06 +0000 Subject: [PATCH 2/6] chore: auto-detect existing path --- docker-compose/setup-script/noco.sh | 416 ++++++++++++++-------------- 1 file changed, 208 insertions(+), 208 deletions(-) diff --git a/docker-compose/setup-script/noco.sh b/docker-compose/setup-script/noco.sh index a241d8d1d5..9cbf69ebfe 100755 --- a/docker-compose/setup-script/noco.sh +++ b/docker-compose/setup-script/noco.sh @@ -14,7 +14,7 @@ ORANGE='\033[0;33m' BOLD='\033[1m' NC='\033[0m' -NOCO_HOME="${HOME}/.nocodb/" +NOCO_HOME="${HOME}/.nocodb" # ***************** GLOBAL VARIABLES END *********************************** # ****************************************************************************** @@ -132,6 +132,184 @@ check_if_docker_is_running() { # ***************** HELPER FUNCTIONS END *********************************** # ****************************************************************************** +# ***************************************************************************** +# *************************** Management ************************************* + +# 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 +} + +management_menu() { + # 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 +} + +# ****************************************************************************** +# *************************** Management END ********************************** + # ****************************************************************************** # ***************** Existing Install Test ************************************ @@ -141,24 +319,23 @@ DOCKER_COMMAND=$([ "$IS_DOCKER_REQUIRE_SUDO" = "y" ] && echo "sudo docker" || ec NOCO_FOUND=false -# Check if $NOCO_HOME exists as directory or symbolic link -if [ -d "$NOCO_HOME" ] || [ -L "$NOCO_HOME" ]; then +# Check if $NOCO_HOME exists as directory +if [ -d "$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 +elif $DOCKER_COMMAND ps --format '{{.Names}}' | grep -q "nocodb"; then + NOCO_ID=$(docker ps | grep "nocodb/nocodb" | cut -d ' ' -f 1) + CUSTOM_HOME=$(docker inspect --format='{{index .Mounts 0}}' "$NOCO_ID" | cut -d ' ' -f 3) + PARENT_DIR=$(dirname "$CUSTOM_HOME") - if [ -d "$CUSATOM_NOCO_HOME" ]; then - echo "NocoDB installation directory is required." - exit 1 - fi + ln -s "$PARENT_DIR" "$NOCO_HOME" + basename "$PARENT_DIR" > "$NOCO_HOME/.COMPOSE_PROJECT_NAME" - ln -s "$CUSATOM_NOCO_HOME" "$NOCO_HOME" NOCO_FOUND=true +else + mkdir -p "$NOCO_HOME" fi -cd "$NOCO_HOME" || exit +cd "$NOCO_HOME" || exit 1 # Check if nocodb is already installed if [ "$NOCO_FOUND" = true ]; then @@ -166,12 +343,23 @@ if [ "$NOCO_FOUND" = true ]; then echo "Do you want to reinstall NocoDB? [Y/N] (default: N): " read -r REINSTALL + if [ -f "$NOCO_HOME/.COMPOSE_PROJECT_NAME" ]; then + export COMPOSE_PROJECT_NAME=$(cat "$NOCO_HOME/.COMPOSE_PROJECT_NAME") + fi + if [ "$REINSTALL" != "Y" ] && [ "$REINSTALL" != "y" ]; then - management_menu() + management_menu exit 0 else echo "Reinstalling NocoDB..." $DOCKER_COMMAND compose down + + unset COMPOSE_PROJECT_NAME + cd /tmp + rm -rf "$NOCO_HOME" + + mkdir -p "$NOCO_HOME" + cd "$NOCO_HOME" || exit 1 fi fi @@ -206,11 +394,6 @@ for tool in docker lsof openssl; do fi done -# e. Check if NocoDB is already installed and its expected version -# echo "Checking if NocoDB is already installed and its expected version..." -# Replace the following command with the actual command to check NocoDB installation and version -# Example: nocodb_version=$(command_to_get_nocodb_version) -# echo "NocoDB version: $nocodb_install_version" # f. Port mapping check echo " | Checking port accessibility..." @@ -236,19 +419,7 @@ if [ -z "$PUBLIC_IP" ]; then PUBLIC_IP="localhost" fi -# generate a folder for the docker-compose file which is not existing and do the setup within the folder -# Define the folder name -FOLDER_NAME="nocodb_$(date +"%Y%m%d_%H%M%S")" - -# prompt for custom folder name and if left empty skip -#echo "Enter a custom folder name or press Enter to use the default folder name ($FOLDER_NAME): " -#read CUSTOM_FOLDER_NAME - -message_arr+=("Setup folder: $FOLDER_NAME") - -if [ -n "$CUSTOM_FOLDER_NAME" ]; then - FOLDER_NAME="$CUSTOM_FOLDER_NAME" -fi +message_arr+=("Setup folder: $NOCO_HOME") # ******************** SYSTEM REQUIREMENTS CHECK END ************************** # ****************************************************************************** @@ -642,180 +813,9 @@ print_box_message "${message_arr[@]}" # *************************** SETUP END ************************************* # **************************************************************************** -# ***************************************************************************** -# *************************** Management ************************************* - -# 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 -} +echo "Do you want to start the management menu [Y/N] (default: Y): " +read -r MANAGEMENT_MENU -# 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 -} - -management_menu() { - # 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 -} - -# ****************************************************************************** -# *************************** Management END ********************************** \ No newline at end of file +if [ -z "$MANAGEMENT_MENU" ] || { [ "$MANAGEMENT_MENU" != "N" ] && [ "$MANAGEMENT_MENU" != "n" ]; }; then + management_menu +fi \ No newline at end of file From 575d8445dda321c061b1fa37cbc361c9d6a9dd83 Mon Sep 17 00:00:00 2001 From: Rohit <45072928+rohittp0@users.noreply.github.com> Date: Sun, 28 Apr 2024 00:01:30 +0530 Subject: [PATCH 3/6] Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docker-compose/setup-script/noco.sh | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docker-compose/setup-script/noco.sh b/docker-compose/setup-script/noco.sh index 9cbf69ebfe..61adcc8df3 100755 --- a/docker-compose/setup-script/noco.sh +++ b/docker-compose/setup-script/noco.sh @@ -140,7 +140,7 @@ show_menu() { clear check_if_docker_is_running echo "" - echo $MSG + echo "$MSG" echo -e "\t\t${BOLD}Service Management Menu${NC}" echo -e " ${GREEN}1. Start Service" echo -e " ${ORANGE}2. Stop Service" @@ -173,13 +173,13 @@ show_logs_sub_menu() { echo "A. All" echo "0. Back to Logs Menu" echo "Enter replica number: " - read replica_choice + read -r 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 + $DOCKER_COMMAND compose logs -f "$1" elif [ "$replica_choice" == "0" ]; then show_logs else @@ -205,7 +205,7 @@ show_logs() { # 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) + replicas=$($DOCKER_COMMAND compose ps "$service" | grep -c "$service") service_replicas["$count"]=$replicas count=$((count + 1)) done @@ -220,7 +220,7 @@ show_logs() { echo "A. All" echo "0. Back to main menu" echo "Enter your choice: " - read log_choice + read -r log_choice echo if [[ "$log_choice" =~ ^[0-9]+$ ]] && [ "$log_choice" -gt 0 ] && [ "$log_choice" -lt "$count" ]; then @@ -268,14 +268,14 @@ scale_service() { 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) + scale_num=$(read_number_range 1 "$num_cores") - if [ $scale_num -eq $current_scale ]; then + 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 + $DOCKER_COMMAND compose up -d --scale nocodb="$scale_num" } # Function for basic monitoring @@ -292,7 +292,7 @@ management_menu() { show_menu echo "Enter your choice: " - read choice + read -r choice case $choice in 1) start_service && MSG="NocoDB Started" ;; 2) stop_service && MSG="NocoDB Stopped" ;; @@ -344,7 +344,8 @@ if [ "$NOCO_FOUND" = true ]; then read -r REINSTALL if [ -f "$NOCO_HOME/.COMPOSE_PROJECT_NAME" ]; then - export COMPOSE_PROJECT_NAME=$(cat "$NOCO_HOME/.COMPOSE_PROJECT_NAME") + COMPOSE_PROJECT_NAME=$(cat "$NOCO_HOME/.COMPOSE_PROJECT_NAME") + export COMPOSE_PROJECT_NAME fi if [ "$REINSTALL" != "Y" ] && [ "$REINSTALL" != "y" ]; then @@ -355,7 +356,7 @@ if [ "$NOCO_FOUND" = true ]; then $DOCKER_COMMAND compose down unset COMPOSE_PROJECT_NAME - cd /tmp + cd /tmp || exit 1 rm -rf "$NOCO_HOME" mkdir -p "$NOCO_HOME" From 540ec1d61f9dd24cff1dd5b1c0b58ea017bd69f1 Mon Sep 17 00:00:00 2001 From: Rohit <45072928+rohittp0@users.noreply.github.com> Date: Mon, 29 Apr 2024 23:00:13 +0530 Subject: [PATCH 4/6] Update docker-compose/setup-script/noco.sh Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docker-compose/setup-script/noco.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose/setup-script/noco.sh b/docker-compose/setup-script/noco.sh index 61adcc8df3..83608f5514 100755 --- a/docker-compose/setup-script/noco.sh +++ b/docker-compose/setup-script/noco.sh @@ -168,6 +168,7 @@ show_logs_sub_menu() { clear echo "Select a replica for $1:" for i in $(seq 1 $2); do + echo "$i. \"$1\" replica $i" echo "$i. $1 replica $i" done echo "A. All" From 3966d10a9106c23497cd5795430f879665289648 Mon Sep 17 00:00:00 2001 From: Rohit <45072928+rohittp0@users.noreply.github.com> Date: Thu, 2 May 2024 12:57:21 +0530 Subject: [PATCH 5/6] Update docker-compose/setup-script/noco.sh Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docker-compose/setup-script/noco.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose/setup-script/noco.sh b/docker-compose/setup-script/noco.sh index 83608f5514..b579d649c8 100755 --- a/docker-compose/setup-script/noco.sh +++ b/docker-compose/setup-script/noco.sh @@ -169,7 +169,7 @@ show_logs_sub_menu() { echo "Select a replica for $1:" for i in $(seq 1 $2); do echo "$i. \"$1\" replica $i" - echo "$i. $1 replica $i" + echo "$i. \"$1\" replica $i" done echo "A. All" echo "0. Back to Logs Menu" From f676b7fddf90d290c3cb183d75c4c79482773951 Mon Sep 17 00:00:00 2001 From: Rohit <45072928+rohittp0@users.noreply.github.com> Date: Thu, 2 May 2024 13:03:04 +0530 Subject: [PATCH 6/6] Update docker-compose/setup-script/noco.sh Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docker-compose/setup-script/noco.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/docker-compose/setup-script/noco.sh b/docker-compose/setup-script/noco.sh index b579d649c8..3ad867d891 100755 --- a/docker-compose/setup-script/noco.sh +++ b/docker-compose/setup-script/noco.sh @@ -169,7 +169,6 @@ show_logs_sub_menu() { echo "Select a replica for $1:" for i in $(seq 1 $2); do echo "$i. \"$1\" replica $i" - echo "$i. \"$1\" replica $i" done echo "A. All" echo "0. Back to Logs Menu"