reader / install_reader.sh
mao123qw's picture
Update install_reader.sh
5b34f9d verified
raw
history blame
2.61 kB
#!/bin/bash
set -euo pipefail
# 检查WebDAV环境变量
if [[ -z "${WEBDAV_URL}" || -z "${WEBDAV_USER}" || -z "${WEBDAV_PASS}" ]]; then
echo "错误:必须设置WEBDAV_URL、WEBDAV_USER、WEBDAV_PASS环境变量"
exit 1
fi
# 获取最新版本的重定向URL
echo "正在获取最新版本信息..."
redirect_url=$(curl -Ls -o /dev/null -w '%{url_effective}' 'https://github.com/hectorqin/reader/releases/latest')
# 提取版本标签
tag=$(basename "$redirect_url")
if [[ ! "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "错误:无效的版本标签 '$tag'"
exit 1
fi
version="${tag#v}"
echo "检测到最新版本: $version"
# 构造下载链接
download_url="https://github.com/hectorqin/reader/releases/download/${tag}/reader-server-${version}.zip"
echo "开始下载: $download_url"
# 下载文件
if ! curl -LO "$download_url"; then
echo "错误:文件下载失败"
exit 1
fi
# 解压文件
zip_file="reader-server-${version}.zip"
echo "正在解压文件..."
unzip "$zip_file"
# +x权限
find . -type f -exec chmod +x {} +
# 数据恢复逻辑
DATA_DIR="./storage"
if [ ! -d "${DATA_DIR}" ] || [ -z "$(ls -A ${DATA_DIR})" ]; then
echo "数据目录不存在或为空,尝试从WebDAV恢复备份..."
if curl -u "${WEBDAV_USER}:${WEBDAV_PASS}" "${WEBDAV_URL}/latest-backup.tar.gz" -o /tmp/latest-backup.tar.gz; then
echo "下载备份成功,正在解压..."
mkdir -p "${DATA_DIR}"
tar -xzf /tmp/latest-backup.tar.gz -C "${DATA_DIR}" 2>/dev/null || true
echo "数据恢复完成"
else
echo "警告:无法下载备份文件,将使用空数据目录启动"
fi
else
echo "数据目录已存在,跳过恢复"
fi
# 启动定时备份任务
echo "启动定时备份任务,每半小时备份一次到WebDAV..."
(
while true; do
sleep 1800
echo "$(date '+%Y-%m-%d %T'): 开始备份数据..."
BACKUP_FILE="/tmp/backup-$(date +%Y%m%d%H%M%S).tar.gz"
tar -czf "${BACKUP_FILE}" -C "${DATA_DIR}" . >/dev/null 2>&1
curl -u "${WEBDAV_USER}:${WEBDAV_PASS}" -T "${BACKUP_FILE}" "${WEBDAV_URL}/backup/$(basename "${BACKUP_FILE}")" --silent
curl -u "${WEBDAV_USER}:${WEBDAV_PASS}" -T "${BACKUP_FILE}" "${WEBDAV_URL}/latest-backup.tar.gz" --silent
rm -f "${BACKUP_FILE}"
echo "$(date '+%Y-%m-%d %T'): 备份完成"
done
) &
# 执行启动脚本
if [ -f "./bin/startup.sh" ]; then
echo "正在启动服务..."
chmod +x "./bin/startup.sh"
cd bin
./startup.sh -m single
echo "服务已启动!"
else
echo "错误:启动脚本不存在"
exit 1
fi