#!/bin/bash
# 设置颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
REPO_OWNER="cloudreve"
REPO_NAME="cloudreve"
INSTALL_DIR="/opt/cloudreve/v4"
SUPERVISOR_PROGRAM_NAME="cloudreve:cloudreve_00"
echo -e "${GREEN}>>> Cloudreve V4 更新启动${NC}"
echo "--------------------------------------------------"
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}错误:此脚本需要 root 权限运行,请使用 sudo。${NC}"
exit 1
fi
echo -e "${YELLOW}>>> 正在停止 Supervisor 进程组 '${SUPERVISOR_PROGRAM_NAME}'...${NC}"
supervisorctl stop "${SUPERVISOR_PROGRAM_NAME}"
if [ $? -ne 0 ]; then
echo -e "${YELLOW}>>> 进程可能已停止或不存在,继续执行更新...${NC}"
fi
echo -e "${GREEN}>>> 正在获取 Cloudreve V4 最新 Release 信息...${NC}"
API_URL="https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/releases/latest"
RELEASE_INFO=$(curl -s "${API_URL}")
if [ -z "$RELEASE_INFO" ]; then
echo -e "${RED}错误:无法从 GitHub API 获取 Release 信息。${NC}"
exit 1
fi
LATEST_VERSION=$(echo "$RELEASE_INFO" | grep -oP '"tag_name":\s*"\K[^"]+')
DOWNLOAD_URL=$(echo "$RELEASE_INFO" | grep -oP '"browser_download_url":\s*"\K.*cloudreve.*linux.*amd64\.tar\.gz[^"]*')
if [ -z "$DOWNLOAD_URL" ]; then
DOWNLOAD_URL=$(echo "$RELEASE_INFO" | grep -oP '"browser_download_url":\s*"\K.*cloudreve.*\.tar\.gz[^"]*')
fi
if [ -z "$DOWNLOAD_URL" ]; then
echo -e "${RED}错误:在最新 Release ($LATEST_VERSION) 中未找到下载包。${NC}"
exit 1
fi
FILENAME=$(basename "$DOWNLOAD_URL")
TEMP_FILE="/tmp/${FILENAME}"
echo -e "${GREEN}>>> 找到最新版本: ${LATEST_VERSION}${NC}"
echo -e "${GREEN}>>> 正在下载...${NC}"
wget -q --show-progress "$DOWNLOAD_URL" -O "$TEMP_FILE"
if [ $? -ne 0 ]; then
echo -e "${RED}错误:下载失败。${NC}"
exit 1
fi
echo -e "${GREEN}>>> 正在从压缩包中只提取 'cloudreve' 文件...${NC}"
mkdir -p "$INSTALL_DIR"
rm -f "${INSTALL_DIR}/cloudreve"
tar -xzf "${TEMP_FILE}" --wildcards -C "${INSTALL_DIR}" 'cloudreve'
chmod +x "${INSTALL_DIR}/cloudreve"
rm -f "${TEMP_FILE}"
echo -e "${GREEN}>>> 正在重新加载 Supervisor 配置并启动服务...${NC}"
supervisorctl reread
supervisorctl update
supervisorctl start "${SUPERVISOR_PROGRAM_NAME}"
sleep 3
STATUS=$(supervisorctl status "${SUPERVISOR_PROGRAM_NAME}" | awk '{print $2}')
if [[ "$STATUS" == "RUNNING" ]]; then
echo -e "${GREEN}>>> 进程启动成功!更新完成。${NC}"
else
echo -e "${RED}错误:进程启动失败。当前状态: $STATUS${NC}"
supervisorctl status "${SUPERVISOR_PROGRAM_NAME}"
exit 1
fi
echo "--------------------------------------------------"
echo -e "${GREEN}>>> Cloudreve V4 ${LATEST_VERSION} 已成功更新!${NC}"
Copy