#!/bin/bash echo "警告:此脚本只适用于Debian系列系统(包含Ubuntu),因为需要使用apt来安装软件。" echo "警告:此脚本只适用于Debian系列系统(包含Ubuntu),因为需要使用apt来安装软件。" echo "警告:此脚本只适用于Debian系列系统(包含Ubuntu),因为需要使用apt来安装软件。" echo "警告:如果是群晖NAS自行安装node套件后同样可以使用脚本进行更新使用!!!" echo "警告:脚本自动更新需要自行添加任务计划设定运行时间!!!" # 检查是否为群晖系统 is_syno_system() { # 群晖系统通常会有 /etc.defaults/VERSION 文件 if [ -f /etc.defaults/VERSION ]; then return 0 else return 1 fi } # 检查是否为群晖系统 if is_syno_system; then echo "检测到群晖系统,跳过apt检查。" else # 检查系统是否支持apt if ! command -v apt >/dev/null 2>&1; then echo "错误:不支持的系统。" exit 1 fi fi # 检查Node.js版本 check_node_version() { local node_version=$(node -v) if [[ "$node_version" < "v20.0.0" ]]; then echo "Node.js版本低于20.0.0,正在安装Node.js v20以上版本..." install_node_v20 else echo "Node.js版本符合要求(v20以上),跳过安装。" fi } # 安装Node.js v20以上版本 install_node_v20() { echo "正在安装NVM..." 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 "正在安装Node.js 20.18.1..." nvm install 20.18.1 # 设置默认Node.js版本 nvm alias default 20.18.1 echo "Node.js 20.18.1安装完成。" } # 检查NVM是否存在,如果不存在则安装 if command -v nvm >/dev/null 2>&1; then echo "NVM已安装,跳过NVM安装。" else echo "NVM未安装,正在安装NVM..." 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 "NVM安装完成。" fi # 安装Yarn和PM2 install_yarn_and_pm2() { if command -v yarn >/dev/null 2>&1; then echo "Yarn已安装,跳过Yarn安装。" else echo "Yarn未安装,正在安装Yarn..." nvm install-node # 安装最新版本的Node.js,自动选择大于v20的版本 nvm use default npm install -g yarn if [ $? -ne 0 ]; then echo "Yarn安装失败,请手动安装Yarn后重试。" exit 1 fi echo "Yarn安装成功。" fi if command -v pm2 >/dev/null 2>&1; then echo "PM2已安装,跳过PM2安装。" else echo "PM2未安装,正在安装PM2..." npm install -g pm2 if [ $? -ne 0 ]; then echo "PM2安装失败,请手动安装PM2后重试。" exit 1 fi echo "PM2安装成功。" fi } # 执行Node.js版本检查 check_node_version # 安装Yarn和PM2 install_yarn_and_pm2 # 提示用户输入需要创建的目录,30秒后自动使用当前目录 echo "请输入需要创建的目录路径(30秒内无输入则使用当前目录):" read -t 30 dir_path # 根据用户输入设置目录 if [[ -n $dir_path ]]; then mkdir -p "$dir_path" && cd "$dir_path" if [ $? -eq 0 ]; then echo "目录 '$dir_path' 创建并进入成功。" REPO_DIR="$dir_path" else echo "目录 '$dir_path' 创建失败,使用当前目录。" REPO_DIR=$(pwd) fi else echo "已超时,使用当前目录:$(pwd)" REPO_DIR=$(pwd) fi # 远程仓库地址 REMOTE_REPO="https://github.com/hjdhnx/drpy-node.git" # 代理远程仓库地址 echo "如果拉取不顺利,请在脚本中找到$REMOTE_REPO自行注释修改为kk代理地址" #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 "= 设备IP地址:$IP" echo "= 公网IP自行打码" return 0 else echo "无法获取设备IP地址。" 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 "$ip" else echo "无法获取局域网IP地址。" 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 "env.json文件不存在,正在创建..." # 创建env.json文件并填充默认内容 cat > "$env_json_path" <