#!/bin/bash # 定义颜色 RED='\033[31m' GREEN='\033[32m' YELLOW='\033[33m' BLUE='\033[34m' PH='\033[35m' QS='\033[36m' NC='\033[0m' # No Color echo -e "${PH}警告:此脚本只适用于Debian系列系统(包含Ubuntu),因为需要使用apt来安装软件。${NC}" echo -e "${PH}警告:此脚本只适用于Debian系列系统(包含Ubuntu),因为需要使用apt来安装软件。${NC}" echo -e "${PH}警告:此脚本只适用于Debian系列系统(包含Ubuntu),因为需要使用apt来安装软件。${NC}" echo -e "${YELLOW}警告:如果是群晖NAS自行安装node套件后同样可以使用脚本进行更新使用!!!${NC}" echo -e "${GREEN}警告:脚本自动更新需要自行添加任务计划设定运行时间!!!${NC}" # 检查是否为群晖系统 is_syno_system() { # 群晖系统通常会有 /etc.defaults/VERSION 文件 if [ -f /etc.defaults/VERSION ]; then return 0 else return 1 fi } # 检查是否为群晖系统 if is_syno_system; then echo -e "${QS}检测到群晖系统,跳过apt检查。${NC}" else # 检查系统是否支持apt if ! command -v apt >/dev/null 2>&1; then echo -e "${GREEN}错误:不支持的系统。${NC}" exit 1 fi fi # 检查Node.js版本 check_node_version() { local node_version=$(node -v) if [[ "$node_version" < "v20.0.0" ]]; then echo -e "${YELLOW}Node.js版本低于20.0.0,正在安装Node.js v20以上版本...${NC}" install_node_v20 npm config set registry https://registry.npmmirror.com else echo -e "${GREEN}Node.js版本符合要求(v20以上),跳过安装。${NC}" fi } # 安装Node.js v20以上版本 install_node_v20() { echo -e "${YELLOW}正在安装NVM...${NC}" curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 启用NVM export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # 安装Node.js 20.18.1 echo -e "${YELLOW}正在安装Node.js 20.18.1...${NC}" nvm install 20.18.1 # 设置默认Node.js版本 nvm alias default 20.18.1 echo -e "${GREEN}Node.js 20.18.1安装完成。${NC}" } # 检查NVM是否存在,如果不存在则安装 if command -v nvm >/dev/null 2>&1; then echo -e "${GREEN}NVM已安装,跳过NVM安装。${NC}" else echo -e "${YELLOW}NVM未安装,正在安装NVM...${NC}" curl -o- https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh | bash export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion echo -e "${GREEN}NVM安装完成。${NC}" fi # 安装Yarn和PM2 install_yarn_and_pm2() { if command -v yarn >/dev/null 2>&1; then echo -e "${GREEN}Yarn已安装,跳过Yarn安装。${NC}" yarn config set registry https://registry.yarnpkg.com else echo -e "${YELLOW}Yarn未安装,正在安装Yarn...${NC}" nvm install-node # 安装最新版本的Node.js,自动选择大于v20的版本 nvm use default npm install -g yarn yarn config set registry https://registry.yarnpkg.com if [ $? -ne 0 ]; then echo -e "${RED}Yarn安装失败,请手动安装Yarn后重试。${NC}" exit 1 fi echo -e "${GREEN}Yarn安装成功。${NC}" fi if command -v pm2 >/dev/null 2>&1; then echo -e "${GREEN}PM2已安装,跳过PM2安装。${NC}" else echo -e "${YELLOW}PM2未安装,正在安装PM2...${NC}" npm install -g pm2 if [ $? -ne 0 ]; then echo -e "${RED}PM2安装失败,请手动安装PM2后重试。${NC}" exit 1 fi echo -e "${GREEN}PM2安装成功。${NC}" fi } # 执行Node.js版本检查 check_node_version # 安装Yarn和PM2 install_yarn_and_pm2 # 提示用户输入需要创建的目录,30秒后自动使用当前目录 echo -ne "${PH}请输入需要创建的目录路径(30秒内无输入则使用当前目录):${NC}" read -t 30 dir_path echo # 根据用户输入设置目录 if [[ -n $dir_path ]]; then mkdir -p "$dir_path" && cd "$dir_path" if [ $? -eq 0 ]; then echo -e "${GREEN}目录 '$dir_path' 创建并进入成功。${NC}" REPO_DIR="$dir_path" else echo -e "${RED}目录 '$dir_path' 创建失败,使用当前目录。${NC}" REPO_DIR=$(pwd) fi else echo -e "${YELLOW}已超时,使用当前目录:$(pwd)" REPO_DIR=$(pwd) fi # 远程仓库地址 REMOTE_REPO="https://github.com/hjdhnx/drpy-node.git" # 代理远程仓库地址 echo -e "${YELLOW}如果拉取不顺利,请在脚本中找到$REMOTE_REPO自行注释修改为kk代理地址${NC}" #REMOTE_REPO="https://kkgithub.com/hjdhnx/drpy-node.git" # 项目名称 PROJECT_NAME="drpy-node" # 获取设备IP地址 get_device_ip() { # 使用curl获取公网IP地址 # 这里使用的是ipinfo.io服务,你也可以使用其他服务 IP=$(curl -s https://ipinfo.io/ip) if [ $? -eq 0 ]; then echo -e "${QS}= 设备IP地址:$IP${NC}" echo -e "${QS}= 公网IP自行打码${NC}" return 0 else echo -e "${RED}无法获取设备IP地址。${NC}" return 1 fi } # 获取设备局域网IP地址 get_local_ip() { # 使用ip命令获取局域网IP地址 local ip=$(ip addr show scope global | grep inet | grep -v inet6 | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1 | head -n1) if [ -n "$ip" ]; then echo -e "$ip" else echo -e "${RED}无法获取局域网IP地址。${NC}" exit 1 fi } # 获取局域网IP地址 LOCAL_IP=$(get_local_ip) # 定义创建env.json文件的函数 create_env_json() { local env_json_path="$1/config/env.json" # 检查env.json文件是否存在 if [ ! -f "$env_json_path" ]; then echo -e "${YELLOW}env.json文件不存在,正在创建...${NC}" # 创建env.json文件并填充默认内容 cat > "$env_json_path" <