Skip to content

Yuerchu/disknext

Repository files navigation


DiskNext Server

支持多家云存储的公私兼备的云服务系统后端

Python License Status


本项目旨在集百家之长(Cloudreve + Alist/OpenList + FnOS + KodBox),打造一个功能强大、安全可靠的云存储解决方案。

注意:目前正处于 OMEGA 实验阶段,比 Alpha 版还更早期,仅供测试和开发。

特性

存储能力

  • 多存储策略:支持本地存储、S3 兼容 API、阿里云 OSS、OneDrive 等多种存储后端
  • 远程节点:可对接从节点分担存储和下载任务
  • WebDAV 兼容:提供标准 WebDAV 接口,支持第三方客户端访问
  • 文件去重:基于 PhysicalFile 引用计数的文件去重机制

文件管理

  • 统一对象模型:文件和目录采用统一的 Object 模型管理
  • 分片上传:支持大文件分片上传,可断点续传
  • 在线压缩/解压:支持批量打包下载
  • 离线下载:内置离线下载服务,也可对接 Aria2/qBittorrent

用户与权限

  • 多用户系统:支持用户注册、登录、个人设置
  • 用户组管理:灵活的分级权限控制
  • 存储配额:可为用户组设置存储空间限制

安全能力

  • JWT 令牌认证:基于 OAuth2.1 规范的安全认证
  • 两步验证 (2FA):支持 TOTP 两步验证
  • WebAuthn:支持 Passkey 无密码登录
  • OAuth 登录:支持 QQ、GitHub 等第三方登录

分享功能

  • 分享链接管理:可设置密码、过期时间
  • 分享页展示:自动渲染分享中的 README、在线预览内容

增值服务

  • 积分系统:支持用户积分管理
  • 兑换码:支持兑换码功能
  • 容量包:可购买额外存储空间

系统架构

DiskNext 采用双进程架构,Python 负责业务逻辑,Go 负责字节流处理:

客户端 ──┬── 业务 API ──→ DiskNext Server (Python/FastAPI)
         │                        │
         │                        │ HMAC 签名的内部 API
         │                        ▼
         └── 文件流 ────→ disknext-gateway (Go)
                                  │
                                  │ 上传完成回调 / 元数据提取
                                  ▼
                            DiskNext Server
  • DiskNext Server(本仓库):用户认证、权限控制、文件管理、存储策略、数据库操作
  • disknext-gateway:本地文件上传/下载、S3 文件元数据提取,不接触数据库

技术栈

后端

技术 说明
Python 3.14+ 编程语言
FastAPI 高性能异步 Web 框架
SQLModel 类型安全的 ORM(SQLAlchemy + Pydantic)
Redis 缓存与令牌存储(必需)
aiohttp 异步 HTTP 客户端
asyncpg 异步 PostgreSQL 驱动
Loguru 现代化日志库
PyJWT JWT 令牌处理
WebAuthn Passkey 认证支持
Argon2 安全密码哈希
pytest 测试框架

字节流网关

技术 说明
Go 1.26+ 编程语言
Gin HTTP 框架
media-gateway/pkg MIME 检测、图片元数据提取

项目结构

disknext/
├── main.py              # 应用入口
├── sqlmodels/           # 数据模型(SQLModel)
│   ├── file.py          # 文件/目录统一模型 (Entry) + 上传会话
│   ├── physical_file.py # 物理文件模型(文件去重)
│   ├── file_metadata.py # 文件元数据 KV 模型
│   ├── policy/          # 存储策略(STI 多态)
│   │   ├── base.py      # Policy 基类
│   │   ├── local.py     # 本地存储策略
│   │   ├── s3_compatible.py # S3 兼容存储策略
│   │   └── onedrive.py  # OneDrive 存储策略
│   ├── user.py          # 用户模型
│   ├── group.py         # 用户组模型
│   ├── share.py         # 分享模型
│   ├── gateway.py       # Gateway 通信数据模型
│   └── ...
├── routers/             # API 路由
│   ├── api/v1/          # v1 版本 API
│   │   ├── user/        # 用户相关接口
│   │   ├── directory/   # 目录相关接口
│   │   ├── file/        # 文件上传/下载接口
│   │   ├── object/      # 对象操作接口
│   │   ├── share/       # 分享接口
│   │   └── admin/       # 管理员接口
│   ├── internal/        # Gateway 回调端点
│   ├── dav/             # WebDAV 路由
│   └── wopi/            # WOPI 协议(Office 在线编辑)
├── service/             # 业务服务层
├── middleware/          # 中间件(认证、依赖注入)
├── utils/               # 工具函数
│   ├── JWT/             # JWT 处理
│   ├── gateway/         # Go Gateway HTTP 客户端
│   ├── storage/         # 存储驱动(S3、本地)
│   ├── password/        # 密码处理(Argon2、TOTP)
│   ├── conf/            # 配置管理
│   ├── http/            # HTTP 异常处理
│   └── lifespan/        # 生命周期管理
└── tests/               # 测试用例
    ├── unit/            # 单元测试
    ├── integration/     # 集成测试
    └── fixtures/        # 测试夹具

API 概览

模块 前缀 说明
站点 /api/v1/site 站点配置和公开信息
用户 /api/v1/user 用户注册、登录、设置
目录 /api/v1/directory 目录浏览和管理
文件 /api/v1/file 文件上传、下载、管理
对象 /api/v1/object 文件和目录的通用操作(删除、移动、复制、重命名)
分享 /api/v1/share 分享链接管理
下载 /api/v1/download 离线下载管理
标签 /api/v1/tag 用户标签管理
WebDAV /api/v1/webdav WebDAV 账号管理
增值服务 /api/v1/vas 积分、兑换码等
回调 /api/v1/callback 第三方回调接口
从节点 /api/v1/slave 从节点通信接口
管理员 /api/v1/admin/* 后台管理接口

快速开始

环境要求

  • Python 3.14 或更高版本
  • uv (推荐) 或 pip
  • PostgreSQL 14+(必需,仅支持 PG)
  • Redis 6+(必需,用于令牌存储、封禁黑名单、WebAuthn Challenge 等)
  • disknext-gateway(必需,Go 字节流网关)

安装

# 克隆项目
git clone https://github.com/DiskNext/Server.git
cd Server

# 使用 uv 安装依赖
uv sync

配置

创建 .env 文件配置环境变量:

# 调试模式
DEBUG=false

# 运行模式: master(主节点)或 slave(从节点)
MODE=master

# PostgreSQL 连接 URL(必需,仅支持 asyncpg 驱动)
DATABASE_URL=postgresql+asyncpg://disknext:disknext@localhost:5432/disknext

# Redis 完整连接 URL(必需)
REDIS_URL=redis://localhost:6379/0

# Go Gateway 地址(必需)
GATEWAY_URL=http://localhost:8080
# Gateway 内部 API HMAC 密钥(必需,需与 Gateway 的 DG_INTERNAL_SECRET 一致)
GATEWAY_SECRET=your-shared-hmac-secret
# Gateway 回调 DiskNext 的基地址(默认 http://localhost:8000)
GATEWAY_CALLBACK_BASE=http://localhost:8000

启动

# 开发模式
fastapi dev

# 生产模式
fastapi run

访问 http://localhost:8000/docs 查看 API 文档(仅 DEBUG=true 时可用)。

首次启动会自动初始化数据库并创建默认管理员账户,请注意控制台输出的初始密码

测试

# 运行所有测试
pytest

# 运行单元测试
pytest tests/unit

# 运行集成测试
pytest tests/integration

# 生成覆盖率报告
pytest --cov

忘记密码

将密码字段设置为 $argon2id$v=19$m=65536,t=3,p=4$09YTQpkw7eS4qW732OazkQ$Szzbi3VIaJXBJ02rkVKrSFCAKHjRTl+EQWk4PNxCYFI

密码即可重设为 11223344

开发规范

详细的开发规范请参阅 CLAUDE.md,主要包括:

  • 类型安全与显式优于隐式
  • 异步优先,IO 绝不阻塞
  • 单一真相来源原则
  • 目录结构即 API 结构
  • SQLModel 使用规范

路线图

查看 ROADMAP.md 了解项目开发计划。

贡献

欢迎提交 Issue 和 Pull Request!

许可证

本项目采用 GPL v3 许可证。


你也可以考虑付费支持我们的发展 -> DiskNext Pro

About

支持多存储策略并可进行公私部署的网盘系统。基于 FastAPI + SQLModel。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages