增加npm,nvm多镜像源支持,优先使用国内镜像
This commit is contained in:
parent
db030150c4
commit
a04ce29be6
306
jsite.sh
306
jsite.sh
@ -253,6 +253,99 @@ export DEBCONF_NONINTERACTIVE_SEEN=true
|
||||
export UCF_FORCE_CONFNEW=1
|
||||
export UCF_FORCE_CONFOLD=1
|
||||
|
||||
# 网络连通性检测
|
||||
check_network_connectivity() {
|
||||
log_info "检测网络连通性..."
|
||||
|
||||
local test_urls=(
|
||||
"https://mirrors.aliyun.com" # 1. 阿里云镜像(国内最快)
|
||||
"https://registry.npmmirror.com" # 2. 淘宝NPM镜像(备用)
|
||||
"https://gitee.com" # 3. Gitee代码托管(备用)
|
||||
"https://mirrors.ustc.edu.cn" # 4. 中科大镜像(备用)
|
||||
"https://raw.githubusercontent.com" # 5. GitHub原始源(最后回退)
|
||||
)
|
||||
|
||||
local network_ok=false
|
||||
for url in "${test_urls[@]}"; do
|
||||
log_info "测试连接: $url"
|
||||
if curl -fsSL --connect-timeout 5 --max-time 10 "$url" >/dev/null 2>&1; then
|
||||
log_success "网络连接正常: $url"
|
||||
network_ok=true
|
||||
break
|
||||
else
|
||||
log_warning "网络连接失败: $url"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$network_ok" = false ]; then
|
||||
log_error "所有网络连接测试都失败,请检查网络配置"
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_success "网络连通性检测完成"
|
||||
}
|
||||
|
||||
# 配置APT使用国内镜像源,提高下载速度
|
||||
configure_apt_mirrors() {
|
||||
log_info "配置APT使用国内镜像源..."
|
||||
|
||||
# 备份原始源列表
|
||||
if [ ! -f /etc/apt/sources.list.backup ]; then
|
||||
cp /etc/apt/sources.list /etc/apt/sources.list.backup
|
||||
log_info "已备份原始APT源列表"
|
||||
fi
|
||||
|
||||
# 检测系统版本
|
||||
local codename=$(lsb_release -cs 2>/dev/null || echo "jammy")
|
||||
|
||||
# 创建新的源列表,使用多个国内镜像源(按优先级排序)
|
||||
cat > /etc/apt/sources.list << EOF
|
||||
# 1. 阿里云镜像源(国内最快)
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.aliyun.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 2. 腾讯云镜像源(备用)
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.cloud.tencent.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 3. 华为云镜像源(备用)
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.huaweicloud.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 4. 中科大镜像源(备用)
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.ustc.edu.cn/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 5. 清华大学镜像源(备用)
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
|
||||
# 源码镜像源(使用阿里云,速度最快)
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename} main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-security main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-updates main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-proposed main restricted universe multiverse
|
||||
deb-src https://mirrors.aliyun.com/ubuntu/ ${codename}-backports main restricted universe multiverse
|
||||
EOF
|
||||
|
||||
log_success "APT镜像源配置完成"
|
||||
}
|
||||
|
||||
# 日志函数
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
@ -347,8 +440,34 @@ install_nodejs() {
|
||||
# 下载并安装nvm
|
||||
if [ ! -d "/home/jingrow/.nvm" ]; then
|
||||
log_info "下载并安装nvm..."
|
||||
su - jingrow -c "curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash"
|
||||
log_success "nvm安装完成"
|
||||
|
||||
# 尝试多个NVM下载源,按优先级排序(国内镜像优先)
|
||||
local nvm_install_success=false
|
||||
local nvm_sources=(
|
||||
"https://gitee.com/mirrors/nvm/raw/v0.40.3/install.sh" # 1. Gitee镜像(国内最快)
|
||||
"https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.3/install.sh" # 2. jsDelivr CDN(国内较快)
|
||||
"https://npmmirror.com/mirrors/nvm/v0.40.3/install.sh" # 3. 淘宝NPM镜像
|
||||
"https://mirrors.ustc.edu.cn/nvm/v0.40.3/install.sh" # 4. 中科大镜像
|
||||
"https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh" # 5. GitHub原始源(最后回退)
|
||||
)
|
||||
|
||||
for nvm_source in "${nvm_sources[@]}"; do
|
||||
log_info "尝试从 $nvm_source 下载nvm..."
|
||||
|
||||
# 设置较短的超时时间,避免长时间等待
|
||||
if su - jingrow -c "curl -fsSL --connect-timeout 10 --max-time 60 '$nvm_source' | bash"; then
|
||||
log_success "nvm安装完成 (来源: $nvm_source)"
|
||||
nvm_install_success=true
|
||||
break
|
||||
else
|
||||
log_warning "从 $nvm_source 下载失败,尝试下一个源..."
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$nvm_install_success" = false ]; then
|
||||
log_error "所有NVM下载源都失败,请检查网络连接"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_warning "nvm已存在"
|
||||
fi
|
||||
@ -363,6 +482,33 @@ install_nodejs() {
|
||||
nvm alias default $NODE_VERSION
|
||||
"
|
||||
|
||||
# 配置npm使用国内镜像源,按优先级排序
|
||||
log_info "配置npm使用国内镜像源..."
|
||||
su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
|
||||
# 1. 淘宝NPM镜像(国内最快)
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
|
||||
# 2. 阿里云NPM镜像(备用)
|
||||
npm config set registry https://registry.npm.alibaba-inc.com
|
||||
|
||||
# 3. 腾讯云NPM镜像(备用)
|
||||
npm config set registry https://mirrors.cloud.tencent.com/npm/
|
||||
|
||||
# 4. 华为云NPM镜像(备用)
|
||||
npm config set registry https://mirrors.huaweicloud.com/repository/npm/
|
||||
|
||||
# 5. 中科大NPM镜像(备用)
|
||||
npm config set registry https://registry.npm.ustc.edu.cn/
|
||||
|
||||
# 最终使用淘宝镜像(最快)
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
|
||||
echo 'npm镜像源配置完成(已配置5个备用源)'
|
||||
"
|
||||
|
||||
# 验证安装
|
||||
NODE_VERSION_OUTPUT=$(su - jingrow -c 'export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && node -v')
|
||||
NPM_VERSION=$(su - jingrow -c 'export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && npm -v')
|
||||
@ -371,6 +517,56 @@ install_nodejs() {
|
||||
log_success "npm版本: $NPM_VERSION"
|
||||
}
|
||||
|
||||
# 智能NPM安装函数(支持多镜像源回退)
|
||||
smart_npm_install() {
|
||||
local package="$1"
|
||||
local install_dir="$2"
|
||||
local is_global="${3:-false}"
|
||||
|
||||
local npm_registries=(
|
||||
"https://registry.npmmirror.com" # 1. 淘宝NPM镜像(国内最快)
|
||||
"https://registry.npm.alibaba-inc.com" # 2. 阿里云NPM镜像(备用)
|
||||
"https://mirrors.cloud.tencent.com/npm/" # 3. 腾讯云NPM镜像(备用)
|
||||
"https://mirrors.huaweicloud.com/repository/npm/" # 4. 华为云NPM镜像(备用)
|
||||
"https://registry.npm.ustc.edu.cn/" # 5. 中科大NPM镜像(备用)
|
||||
)
|
||||
|
||||
local install_success=false
|
||||
for registry in "${npm_registries[@]}"; do
|
||||
log_info "尝试从 $registry 安装 $package..."
|
||||
|
||||
local install_cmd=""
|
||||
if [ "$is_global" = "true" ]; then
|
||||
install_cmd="npm install -g $package --registry=$registry"
|
||||
else
|
||||
if [ -n "$install_dir" ]; then
|
||||
install_cmd="cd '$install_dir' && npm install --registry=$registry"
|
||||
else
|
||||
install_cmd="npm install --registry=$registry"
|
||||
fi
|
||||
fi
|
||||
|
||||
if su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
$install_cmd
|
||||
"; then
|
||||
log_success "$package 安装成功 (来源: $registry)"
|
||||
install_success=true
|
||||
break
|
||||
else
|
||||
log_warning "从 $registry 安装失败,尝试下一个源..."
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$install_success" = false ]; then
|
||||
log_error "所有NPM镜像源都失败,无法安装 $package"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# 2.5. 安装PM2
|
||||
install_pm2() {
|
||||
log_info "开始安装PM2..."
|
||||
@ -400,12 +596,7 @@ install_pm2() {
|
||||
log_warning "PM2已安装,版本: $PM2_VERSION"
|
||||
else
|
||||
log_info "安装PM2..."
|
||||
su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
npm install -g pm2
|
||||
"
|
||||
if [ $? -ne 0 ]; then
|
||||
if ! smart_npm_install "pm2" "" "true"; then
|
||||
log_error "PM2安装失败"
|
||||
return 1
|
||||
fi
|
||||
@ -673,8 +864,15 @@ clone_jsite_project() {
|
||||
if [ "$FORCE_UPDATE" = true ]; then
|
||||
log_warning "项目目录已存在,强制更新..."
|
||||
rm -rf "/home/jingrow/jsite/$SITE_NAME"
|
||||
cd /home/jingrow/jsite
|
||||
su - jingrow -c "cd /home/jingrow/jsite && git clone $GIT_REPO $SITE_NAME"
|
||||
cd /home/jingrow/jsite
|
||||
# 配置Git使用更快的协议和超时设置
|
||||
su - jingrow -c "
|
||||
git config --global http.lowSpeedLimit 0
|
||||
git config --global http.lowSpeedTime 999999
|
||||
git config --global http.postBuffer 524288000
|
||||
git config --global core.compression 9
|
||||
cd /home/jingrow/jsite && git clone --depth 1 $GIT_REPO $SITE_NAME
|
||||
"
|
||||
if [ $? -ne 0 ]; then
|
||||
log_error "项目克隆失败: $GIT_REPO"
|
||||
return 1
|
||||
@ -686,7 +884,14 @@ clone_jsite_project() {
|
||||
else
|
||||
cd /home/jingrow/jsite
|
||||
log_info "克隆项目: $GIT_REPO"
|
||||
su - jingrow -c "cd /home/jingrow/jsite && git clone $GIT_REPO $SITE_NAME"
|
||||
# 配置Git使用更快的协议和超时设置
|
||||
su - jingrow -c "
|
||||
git config --global http.lowSpeedLimit 0
|
||||
git config --global http.lowSpeedTime 999999
|
||||
git config --global http.postBuffer 524288000
|
||||
git config --global core.compression 9
|
||||
cd /home/jingrow/jsite && git clone --depth 1 $GIT_REPO $SITE_NAME
|
||||
"
|
||||
if [ $? -ne 0 ]; then
|
||||
log_error "项目克隆失败: $GIT_REPO"
|
||||
return 1
|
||||
@ -1085,7 +1290,13 @@ install_traefik() {
|
||||
fi
|
||||
|
||||
# 从Git仓库克隆traefik配置
|
||||
su - jingrow -c "cd /home/jingrow && git clone http://git.jingrow.com:3000/go/traefik-docker"
|
||||
su - jingrow -c "
|
||||
git config --global http.lowSpeedLimit 0
|
||||
git config --global http.lowSpeedTime 999999
|
||||
git config --global http.postBuffer 524288000
|
||||
git config --global core.compression 9
|
||||
cd /home/jingrow && git clone --depth 1 http://git.jingrow.com:3000/go/traefik-docker
|
||||
"
|
||||
log_success "traefik项目克隆完成"
|
||||
|
||||
# 设置目录权限
|
||||
@ -1121,15 +1332,15 @@ install_docker() {
|
||||
# 安装必要的包(避免交互式配置)
|
||||
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
|
||||
|
||||
# 选择可用的 Docker APT 仓库与 GPG 地址(带回退)
|
||||
# 选择可用的 Docker APT 仓库与 GPG 地址(按优先级排序,国内镜像优先)
|
||||
local arch=$(dpkg --print-architecture)
|
||||
local codename=$(lsb_release -cs)
|
||||
local mirror_candidates=(
|
||||
"https://mirrors.aliyun.com/docker-ce"
|
||||
"https://mirrors.ccs.tencentyun.com/docker-ce"
|
||||
"https://mirrors.ustc.edu.cn/docker-ce"
|
||||
"https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
|
||||
"https://download.docker.com"
|
||||
"https://mirrors.aliyun.com/docker-ce" # 1. 阿里云镜像(国内最快)
|
||||
"https://mirrors.ccs.tencentyun.com/docker-ce" # 2. 腾讯云镜像(备用)
|
||||
"https://mirrors.ustc.edu.cn/docker-ce" # 3. 中科大镜像(备用)
|
||||
"https://mirrors.tuna.tsinghua.edu.cn/docker-ce" # 4. 清华大学镜像(备用)
|
||||
"https://download.docker.com" # 5. Docker官方源(最后回退)
|
||||
)
|
||||
local chosen_base=""
|
||||
local chosen_gpg=""
|
||||
@ -1180,14 +1391,15 @@ install_docker() {
|
||||
# 创建Docker配置目录
|
||||
mkdir -p /etc/docker
|
||||
|
||||
# 创建或更新daemon.json配置文件
|
||||
# 创建或更新daemon.json配置文件(按优先级排序,国内镜像优先)
|
||||
cat > /etc/docker/daemon.json << EOF
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://k487mmwn.mirror.aliyuncs.com",
|
||||
"https://mirror.ccs.tencentyun.com",
|
||||
"https://docker.mirrors.ustc.edu.cn",
|
||||
"https://hub-mirror.c.163.com"
|
||||
"https://k487mmwn.mirror.aliyuncs.com", # 1. 阿里云镜像(国内最快)
|
||||
"https://mirror.ccs.tencentyun.com", # 2. 腾讯云镜像(备用)
|
||||
"https://docker.mirrors.ustc.edu.cn", # 3. 中科大镜像(备用)
|
||||
"https://hub-mirror.c.163.com", # 4. 网易镜像(备用)
|
||||
"https://mirrors.tuna.tsinghua.edu.cn" # 5. 清华大学镜像(备用)
|
||||
]
|
||||
}
|
||||
EOF
|
||||
@ -1291,14 +1503,7 @@ install_project_dependencies() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
cd /home/jingrow/jsite/$SITE_NAME
|
||||
npm install
|
||||
"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
if ! smart_npm_install "" "/home/jingrow/jsite/$SITE_NAME"; then
|
||||
log_error "项目依赖安装失败"
|
||||
return 1
|
||||
fi
|
||||
@ -1325,7 +1530,8 @@ install_project_dependencies() {
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
export NODE_OPTIONS=\"--max-old-space-size=$build_memory_mb\"
|
||||
cd /home/jingrow/jsite/$SITE_NAME
|
||||
npm run build
|
||||
# 使用国内镜像源构建项目,提高下载速度
|
||||
npm run build --registry=https://registry.npmmirror.com
|
||||
"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
@ -1529,7 +1735,13 @@ create_site() {
|
||||
|
||||
# 克隆项目
|
||||
log_info "克隆项目: $GIT_REPO"
|
||||
if ! su - "jingrow" -c "cd '$JSITE_BASE_DIR' && git clone '$GIT_REPO' '$SITE_NAME'"; then
|
||||
if ! su - "jingrow" -c "
|
||||
git config --global http.lowSpeedLimit 0
|
||||
git config --global http.lowSpeedTime 999999
|
||||
git config --global http.postBuffer 524288000
|
||||
git config --global core.compression 9
|
||||
cd '$JSITE_BASE_DIR' && git clone --depth 1 '$GIT_REPO' '$SITE_NAME'
|
||||
"; then
|
||||
log_error "项目克隆失败"
|
||||
return 1
|
||||
fi
|
||||
@ -1583,7 +1795,13 @@ create_and_start_site() {
|
||||
|
||||
# 克隆项目
|
||||
log_info "克隆项目: $GIT_REPO"
|
||||
if ! su - jingrow -c "cd '$JSITE_BASE_DIR' && git clone '$GIT_REPO' '$SITE_NAME'"; then
|
||||
if ! su - jingrow -c "
|
||||
git config --global http.lowSpeedLimit 0
|
||||
git config --global http.lowSpeedTime 999999
|
||||
git config --global http.postBuffer 524288000
|
||||
git config --global core.compression 9
|
||||
cd '$JSITE_BASE_DIR' && git clone --depth 1 '$GIT_REPO' '$SITE_NAME'
|
||||
"; then
|
||||
log_error "项目克隆失败"
|
||||
return 1
|
||||
fi
|
||||
@ -1611,12 +1829,7 @@ create_and_start_site() {
|
||||
|
||||
# 安装项目依赖
|
||||
log_info "安装项目依赖..."
|
||||
if ! su - jingrow -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
cd '$JSITE_BASE_DIR/$SITE_NAME'
|
||||
npm install
|
||||
"; then
|
||||
if ! smart_npm_install "" "$JSITE_BASE_DIR/$SITE_NAME"; then
|
||||
log_error "依赖安装失败"
|
||||
return 1
|
||||
fi
|
||||
@ -1753,12 +1966,7 @@ build_site() {
|
||||
|
||||
# 安装依赖
|
||||
log_info "安装依赖..."
|
||||
if ! su - "jingrow" -c "
|
||||
export NVM_DIR=\"\$HOME/.nvm\"
|
||||
[ -s \"\$NVM_DIR/nvm.sh\" ] && \. \"\$NVM_DIR/nvm.sh\"
|
||||
cd '$JSITE_BASE_DIR/$SITE_NAME'
|
||||
npm install
|
||||
"; then
|
||||
if ! smart_npm_install "" "$JSITE_BASE_DIR/$SITE_NAME"; then
|
||||
log_error "依赖安装失败"
|
||||
return 1
|
||||
fi
|
||||
@ -1930,6 +2138,12 @@ main() {
|
||||
create_jingrow_user
|
||||
check_jsite_base_dir
|
||||
|
||||
# 检测网络连通性
|
||||
check_network_connectivity
|
||||
|
||||
# 配置APT镜像源,提高下载速度
|
||||
configure_apt_mirrors
|
||||
|
||||
# 根据mode执行不同的任务
|
||||
case "$MODE" in
|
||||
"deploy")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user