Kotlin/Ktor 实现的 OpenBMCLAPI 集群节点,从 bangbang93/openbmclapi 原始 TypeScript/Node.js 版本迁移而来。
OpenBMCLAPI 是一个分布式文件分发网络,旨在为中国用户加速 Minecraft 资源下载。它通过创建分布式节点网络来高效提供文件,解决从 Amazon S3 下载速度慢的问题。
- Java 11 或更高版本
- Kotlin 2.1.0
- Gradle 9.1.0 (已包含 wrapper)
配置可通过环境变量或 application.yaml 提供。
| 变量 | 说明 |
|---|---|
CLUSTER_ID |
你的集群 ID (从 bangbang93 处获取) |
CLUSTER_SECRET |
你的集群密钥 (从 bangbang93 处获取) |
| 变量 | 默认值 | 说明 |
|---|---|---|
CLUSTER_IP |
自动检测 | 用户访问使用的公网 IP 或域名 |
CLUSTER_PORT |
4000 | 监听端口 |
CLUSTER_PUBLIC_PORT |
CLUSTER_PORT |
对外端口 (如果与监听端口不同) |
CLUSTER_BYOC |
false | 自带证书模式 |
DISABLE_ACCESS_LOG |
false | 禁用访问日志 |
CLUSTER_STORAGE |
file | 存储类型: file, minio, oss, webdav |
SSL_KEY |
- | SSL 私钥 (BYOC 模式) |
SSL_CERT |
- | SSL 证书 (BYOC 模式) |
CLUSTER_BMCLAPI |
https://openbmclapi.bangbang93.com | 主控服务器 URL |
创建 .env 文件或导出环境变量:
export CLUSTER_ID=你的集群ID
export CLUSTER_SECRET=你的集群密钥
export CLUSTER_PORT=4000
export CLUSTER_STORAGE=file或使用 application.yaml:
openbmclapi:
cluster:
id: 你的集群ID
secret: 你的集群密钥
port: 4000
storage: file./gradlew build./gradlew run或运行构建的 JAR:
java -jar build/libs/openbmclapi-agent-0.0.1-all.jar./gradlew buildFatJar./gradlew test./gradlew ktlintFormat即将推出 - Docker 支持将在未来更新中添加。
支持多种存储后端以适应不同的部署需求:
在本地 cache/ 目录中存储文件,使用基于哈希的目录结构:
cache/
ab/
ab12cd34ef56...
cd/
cd34ef56ab12...
配置示例:
CLUSTER_STORAGE=file支持任何兼容 WebDAV 的存储服务:
CLUSTER_STORAGE=webdav
CLUSTER_STORAGE_OPTIONS={"url":"https://webdav.example.com","username":"user","password":"pass","basePath":"/openbmclapi"}配置选项:
url: WebDAV 服务器地址 (必需)username: 认证用户名 (可选)password: 认证密码 (可选)basePath: 存储基础路径 (必需)
专为 Alist 优化的 WebDAV 存储,支持 302 重定向 URL 缓存以提高性能:
CLUSTER_STORAGE=alist
CLUSTER_STORAGE_OPTIONS={"url":"https://alist.example.com","username":"user","password":"pass","basePath":"/openbmclapi","cacheTtl":"3600000"}配置选项:
url: Alist WebDAV 服务器地址 (必需)username: 认证用户名 (可选)password: 认证密码 (可选)basePath: 存储基础路径 (必需)cacheTtl: 重定向 URL 缓存时间,单位毫秒 (可选,默认 3600000 即 1 小时)
支持 MinIO 和其他 S3 兼容的对象存储:
CLUSTER_STORAGE=minio
CLUSTER_STORAGE_OPTIONS={"url":"http://accesskey:[email protected]:9000/bucket/prefix"}高级配置(使用内网地址):
CLUSTER_STORAGE_OPTIONS={"url":"http://accesskey:[email protected]:9000/bucket","internalUrl":"http://accesskey:secretkey@minio-internal:9000/bucket"}配置选项:
url: MinIO 服务器地址,格式为scheme://accessKey:secretKey@host:port/bucket/prefix(必需)internalUrl: 内网访问地址,用于文件上传下载(可选,提高性能)
使用阿里云对象存储服务:
CLUSTER_STORAGE=oss
CLUSTER_STORAGE_OPTIONS={"accessKeyId":"your-key","accessKeySecret":"your-secret","bucket":"your-bucket","endpoint":"oss-cn-hangzhou.aliyuncs.com","prefix":"openbmclapi","proxy":"false"}配置选项:
accessKeyId: 阿里云访问密钥 ID (必需)accessKeySecret: 阿里云访问密钥 (必需)bucket: OSS 存储桶名称 (必需)endpoint: OSS 地区节点,如oss-cn-hangzhou.aliyuncs.com(可选,默认杭州)prefix: 文件存储前缀 (可选,默认为空)proxy: 是否通过服务器代理文件,true表示流式传输,false表示生成签名 URL (可选,默认true)
OpenBMCLAPI 支持两种 HTTPS 证书配置模式:
当 CLUSTER_BYOC=true 且提供了证书时,系统将使用本地证书:
export CLUSTER_BYOC=true
export SSL_CERT=/path/to/cert.pem
export SSL_KEY=/path/to/key.pem证书可以是:
- 文件路径: 系统将读取指定文件
- 证书内容: 直接在环境变量中提供 PEM 格式的证书内容
此 Kotlin 实现保持与原始 TypeScript 版本的 API 兼容性,同时提供:
- 类型安全: Kotlin 的强类型系统防止许多运行时错误
- 协程: 使用 Kotlin 协程高效的 async/await
- Ktor 框架: 现代、轻量级的 Web 框架
- JVM 性能: 更好的性能和更低的内存占用
- 无集群/守护进程模式: 简化为单进程模型
- 无 nginx 集成: 通过 Ktor 直接提供文件服务
项目使用 ktlint 进行代码格式化和检查:
# 检查代码风格
./gradlew ktlintCheck
# 自动格式化代码
./gradlew ktlintFormat配置文件: .editorconfig
这是一个迁移项目。欢迎贡献! 请确保:
- 代码遵循 Kotlin 约定
- 测试通过:
./gradlew test - 构建成功:
./gradlew build - 代码已格式化:
./gradlew ktlintFormat - 保持与原始版本的 API 兼容性
MIT License - 参见 LICENSE 文件
- 原始 TypeScript 实现: bangbang93/openbmclapi
- BMCLAPI 服务: bangbang93
- Kotlin 迁移: OpenBMCLAPI.kt 贡献者
相关问题:
- Kotlin 实现: 在此仓库开 issue
- 集群注册: 联系 bangbang93
- BMCLAPI 服务: 访问原始仓库
本项目正在积极开发中。核心功能已实现:
- ✅ 集群连接和认证
- ✅ 文件同步
- ✅ 多种存储后端支持
- ✅ HTTPS 证书管理 (BYOC 和自动获取)
- ✅ UPNP 支持 (使用weupnp)