FROM walkingd/tgto123:latest # 安装 socat, netcat 和 huggingface_hub RUN apt-get update && apt-get install -y socat netcat-openbsd && \ pip3 install --no-cache-dir huggingface_hub --break-system-packages && \ rm -rf /var/lib/apt/lists/* # 备份脚本(保持不变) RUN cat > /usr/local/bin/backup.sh << 'EOF' #!/bin/bash set -e if [ -z "$HF_DATASET" ] || [ -z "$HF_TOKEN" ]; then echo "❌ 缺少 HF_DATASET 或 HF_TOKEN 环境变量,跳过备份" exit 0 fi echo "$(date): 📦 开始备份 TgtoDrive 数据..." mkdir -p /tmp/tgtodrive_backup # 备份可能的数据目录 for path in /app/db /app/user.env /app/data; do if [ -e "$path" ]; then cp -r "$path" /tmp/tgtodrive_backup/ 2>/dev/null || true echo "✅ 已复制 $path" else echo "⚠️ 未找到 $path" fi done cd /tmp tar -czf tgtodrive_backup.tar.gz tgtodrive_backup 2>/dev/null || true BACKUP_FILE="/tmp/tgtodrive_backup.tar.gz" if [ ! -f "$BACKUP_FILE" ]; then echo "❌ 没有数据可备份" exit 0 fi TIMESTAMP=$(date +%Y%m%d_%H%M%S) REMOTE_PATH="tgtodrive_backup_${TIMESTAMP}.tar.gz" python3 < /usr/local/bin/start.sh << 'EOF' #!/bin/bash set -e # 恢复最新备份 if [ -n "$HF_DATASET" ] && [ -n "$HF_TOKEN" ]; then echo "🔄 检查是否存在可恢复的备份..." python3 </dev/null; do sleep 1 done echo "✅ 主服务端口已就绪" # 启动端口转发 echo "🔌 启动端口转发 7860 -> 12366" socat TCP-LISTEN:7860,fork TCP:127.0.0.1:12366 & SOCAT_PID=$! # 定时备份 echo "⏰ 启动自动备份(每30分钟)..." ( while true; do sleep 1800 /usr/local/bin/backup.sh done ) & BACKUP_PID=$! trap 'echo "🛑 容器停止,执行最后一次备份..."; /usr/local/bin/backup.sh; kill $MAIN_PID $SOCAT_PID $BACKUP_PID 2>/dev/null' EXIT wait $MAIN_PID EOF RUN chmod +x /usr/local/bin/start.sh EXPOSE 7860 CMD ["/usr/local/bin/start.sh"]