Sign inSign up

kokojacket/openlist-sync

By kokojacket

•Updated 9 months ago

PanBox Sync - 自动化文件同步与转码系统

Image
0

6.6K

kokojacket/openlist-sync repository overview

⁠PanBox Sync - 自动化文件同步与转码系统

一个功能完整的Web应用,用于从OpenList自动下载文件、进行视频转码处理,并上传到指定位置。

⁠功能特性

⁠核心功能
  • ✅ OpenList API集成(登录、文件管理)
  • ✅ 任务管理(创建、编辑、删除、批量操作)
  • ✅ 定时任务(基于Cron表达式)
  • ✅ 视频转码(使用FFmpeg)
  • ✅ 并发控制(可配置同时下载/上传数量)
  • ✅ 智能防重复下载
  • ✅ 用户认证系统
⁠任务配置项
  • 任务名称
  • 下载路径(OpenList源路径)
  • 是否转码处理
  • 转码后文件名后缀
  • 上传路径(OpenList目标路径)
  • 定时下载间隔(Cron表达式)
  • 任务状态(启用/禁用)

⁠技术栈

⁠后端
  • 框架: FastAPI (Python 3.9+)
  • 数据库: SQLite with SQLAlchemy ORM
  • 任务调度: APScheduler
  • 文件MD5修改: Python内置库(无需FFmpeg)
  • 认证: JWT (JSON Web Tokens)
  • HTTP客户端: httpx (异步)
⁠前端
  • 框架: Vue 3 + TypeScript
  • UI组件: Element Plus
  • 状态管理: Pinia
  • 路由: Vue Router
  • HTTP客户端: Axios

⁠快速开始

⁠前置要求

本地部署:

  • Python 3.9+
  • Node.js 18+
  • FFmpeg (不需要!我们使用更简单的MD5修改方式)

Docker部署(推荐):

  • Docker 20.10+
  • Docker Compose 2.0+ (可选)
⁠🐳 方式一:Docker 部署(最简单)⭐

使用预构建的 Docker 镜像,无需安装 Python 和 Node.js:

# 使用 Docker Compose(推荐)
docker-compose up -d

# 或直接使用 Docker
docker run -d \
  --name openlist-sync \
  -p 8000:8000 \
  -v $(pwd)/data:/app/backend/data \
  -e ENVIRONMENT=production \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  kokojacket/openlist-sync:latest

访问: http://localhost:8000⁠

详细说明请查看 📘 Docker 完全指南⁠

⁠方式二:一键启动(本地开发)

Windows:

scripts\start.bat

Linux/Mac:

./scripts/start.sh
⁠方式三:手动启动后端

快速启动(推荐):

# 在项目根目录
python run.py

详细步骤:

# 进入后端目录
cd backend

# 创建虚拟环境(首次运行)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖(首次运行)
pip install -r requirements.txt

# 初始化数据库(首次运行)
python -m app.utils.init_db

# 返回项目根目录
cd ..

# 启动后端服务
python run.py

后端将运行在: http://localhost:8000⁠ API文档: http://localhost:8000/docs⁠

⁠前端启动
# 进入前端目录
cd frontend

# 安装依赖
npm install

# 启动开发服务器
npm run dev

前端将运行在: http://localhost:5173⁠

⁠Docker启动(推荐)
# 构建并启动所有服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

⁠配置说明

⁠后端配置 (backend/.env)
# 应用配置
APP_NAME=PanBox Sync
APP_VERSION=1.0.0
DEBUG=true

# 数据库
DATABASE_URL=sqlite:///./data/database.db

# JWT认证
SECRET_KEY=your-secret-key-change-this-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=43200

# OpenList配置
OPENLIST_BASE_URL=https://your-openlist-server.com
OPENLIST_USERNAME=admin
OPENLIST_PASSWORD=your-password

# 并发控制
MAX_CONCURRENT_DOWNLOADS=3
MAX_CONCURRENT_UPLOADS=2
MAX_CONCURRENT_TRANSCODES=2

# FFmpeg配置
FFMPEG_PATH=ffmpeg
FFMPEG_THREADS=4

# 文件存储
DOWNLOAD_DIR=./data/downloads
UPLOAD_DIR=./data/uploads
LOG_DIR=./data/logs
⁠前端配置 (frontend/.env)
VITE_API_BASE_URL=http://localhost:8000
VITE_APP_TITLE=PanBox Sync
- ✅ **处理速度极快** - 秒级完成
- ✅ **文件大小几乎不变** - 只增加8-16字节
- ✅ **不影响播放** - 视频/文件完全可用
- ✅ **资源占用低** - 不消耗大量CPU

### 实现原理
参考项目: [kokojacket/md5-modifier](https://github.com/kokojacket/md5-modifier)

在文件末尾追加8-16个随机字节,这样:
- MD5值完全改变
- 文件功能不受影响
- 可以绕过OpenList的重复检测

## 故障排除

### ~~FFmpeg未找到~~
**不需要FFmpeg!** 本系统使用纯Python的MD5修改方式,无需安装任何外部工具。

### 数据库错误
```bash
# 重新初始化数据库
cd backend
python -m app.database reset
⁠端口被占用

修改配置文件中的端口号或终止占用进程:

# 查找占用8000端口的进程
lsof -i :8000  # Linux/macOS
netstat -ano | findstr :8000  # Windows

⁠开发指南

⁠后端开发
# 安装开发依赖
pip install -r requirements-dev.txt

# 运行测试
pytest

# 代码格式化
black app/
isort app/

# 类型检查
mypy app/
⁠前端开发
# 代码格式化
npm run format

# 代码检查
npm run lint

# 类型检查
npm run type-check

# 构建生产版本
npm run build

⁠贡献

欢迎提交Issue和Pull Request!

⁠许可证

本项目基于AGPLv3许可证(与OpenList保持一致)

⁠致谢

Tag summary

Content type

Image

Digest

sha256:666321d5c…

Size

139.7 MB

Last updated

9 months ago

docker pull kokojacket/openlist-sync