mirror of
https://github.com/nocodb/nocodb.git
synced 2026-02-02 02:37:33 +00:00
chore: merged help.sh with noco.sh
This commit is contained in:
@@ -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 <<EOF
|
||||
#!/bin/bash
|
||||
|
||||
$(declare -f read_number)
|
||||
|
||||
$(declare -f read_number_range)
|
||||
|
||||
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'
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
# 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 <<EOF
|
||||
$DOCKER_COMMAND compose pull
|
||||
$DOCKER_COMMAND compose up -d --force-recreate
|
||||
@@ -781,4 +640,182 @@ 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 -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 **********************************
|
||||
Reference in New Issue
Block a user