Files
dock/SublinkX
2025-12-24 19:15:18 +08:00

164 lines
4.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ==========================================
# SublinkX/E 部署脚本 (带自动备份恢复功能)
# 路径锁定: /data/sublinkx
# ==========================================
set -e
# 定义路径和备份地址
PROJECT_DIR="/data/sublinkx"
COMPOSE_FILE="$PROJECT_DIR/docker-compose.yml"
BACKUP_URL="https://pub-b69a7194f4ea42fba6aa990c49bded91.r2.dev/data/sublinkx.zip"
# 检查并安装必要工具 (wget, unzip)
echo "正在检查系统环境..."
if ! command -v unzip &> /dev/null; then
echo "未找到 unzip正在安装..."
if [ -f /etc/debian_version ]; then
apt-get update && apt-get install -y unzip wget
elif [ -f /etc/redhat-release ]; then
yum install -y unzip wget
fi
fi
echo "=================================================="
echo "请选择要部署的版本 / Select Version:"
echo "1. SublinkX (原版 - jaaksi/sublinkx) - 仅全新部署"
echo "2. SublinkE (新版 - eun1e/sublinke) - 部署并恢复数据"
echo "=================================================="
read -p "请输入数字 [1-2]: " choice
# 1. 停止旧服务
if [ -f "$COMPOSE_FILE" ]; then
echo "检测到旧配置,正在停止旧容器..."
cd "$PROJECT_DIR"
docker compose down 2>/dev/null || true
fi
# 2. 准备目录
echo "正在准备目录: $PROJECT_DIR ..."
mkdir -p "$PROJECT_DIR"
# 3. 如果选择 2执行备份恢复逻辑
if [ "$choice" == "2" ]; then
echo "--------------------------------------------------"
echo "🔄 正在下载并恢复备份数据..."
echo "下载地址: $BACKUP_URL"
# 下载到临时目录
wget -O /tmp/sublinkx_backup.zip "$BACKUP_URL"
echo "正在解压数据..."
# 解压到临时文件夹以检查结构
rm -rf /tmp/sublink_restore_temp
mkdir -p /tmp/sublink_restore_temp
unzip -o /tmp/sublinkx_backup.zip -d /tmp/sublink_restore_temp
# 智能移动数据 (防止压缩包内包含/不包含根文件夹的情况)
# 如果解压后有一个名为 sublinkx 的文件夹,则移动其内容;否则移动所有内容
if [ -d "/tmp/sublink_restore_temp/sublinkx" ]; then
echo "检测到目录嵌套,正在移动内部数据..."
cp -rf /tmp/sublink_restore_temp/sublinkx/* "$PROJECT_DIR/"
else
echo "检测到直接结构,正在移动数据..."
cp -rf /tmp/sublink_restore_temp/* "$PROJECT_DIR/"
fi
# 清理临时文件
rm -f /tmp/sublinkx_backup.zip
rm -rf /tmp/sublink_restore_temp
# 确保 plugins 目录存在 (以防备份里没有)
mkdir -p "$PROJECT_DIR"/plugins
echo "✅ 数据恢复完成!"
echo "--------------------------------------------------"
else
# 选项 1 的常规目录创建
mkdir -p "$PROJECT_DIR"/{db,template,logs}
fi
# 4. 生成 Docker Compose 文件
if [ "$choice" == "1" ]; then
echo "正在生成 SublinkX (jaaksi) 配置文件..."
cat > "$COMPOSE_FILE" << 'EOF'
version: '3.8'
services:
sublinkx:
image: jaaksi/sublinkx:latest
container_name: sublinkx
ports:
- "8000:8000"
volumes:
- ./db:/app/db
- ./template:/app/template
- ./logs:/app/logs
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
networks:
- sublinkx-network
networks:
sublinkx-network:
driver: bridge
EOF
elif [ "$choice" == "2" ]; then
echo "正在生成 SublinkE (eun1e) 配置文件..."
cat > "$COMPOSE_FILE" << 'EOF'
version: '3.8'
services:
sublinke:
image: eun1e/sublinke
container_name: sublinke
ports:
- "8000:8000"
volumes:
- ./db:/app/db
- ./template:/app/template
- ./logs:/app/logs
- ./plugins:/app/plugins
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
networks:
- sublinkx-network
networks:
sublinkx-network:
driver: bridge
EOF
else
echo "输入错误,脚本退出。"
exit 1
fi
# 5. 启动服务
cd "$PROJECT_DIR"
echo "正在启动容器..."
docker compose up -d
# 6. 检查状态
echo "等待服务初始化..."
sleep 5
SERVER_IP=$(hostname -I | awk '{print $1}')
echo "=================================================="
if docker compose ps | grep -q "Up"; then
echo "✅ 部署成功!"
if [ "$choice" == "2" ]; then
echo "模式: SublinkE (已恢复备份)"
else
echo "模式: SublinkX (全新安装)"
fi
echo "访问地址: http://${SERVER_IP}:8000"
echo "数据位置: $PROJECT_DIR"
echo "=================================================="
else
echo "❌ 启动失败,请运行以下命令查看日志:"
echo "cd $PROJECT_DIR && docker compose logs"
fi