Skip to content

VupHub/openbmclapi

 
 

Repository files navigation

BMCLAPI

BMCLAPI是@bangbang93开发的BMCL的一部分,用于解决国内线路对Forge和Minecraft官方使用的Amazon S3 速度缓慢的问题。BMCLAPI是对外开放的,所有需要Minecraft资源的启动器均可调用。

OpenBMCLAPI

这个项目的主要目的是辅助bmclapi分发文件 对节点的要求降低了不少

  1. 公网可访问(端口映射也可),可以非80
  2. 10Mbps以上的上行速度
  3. 暂时不接受国外节点了
  4. 可以长时间稳定在线
  5. 暂不支持IPv6 only(可以双栈)

Wiki

安装

Docker Cli

如果你不熟悉docker,可以参考Docker部署指北

docker run -d \
-e CLUSTER_ID=${CLUSTER_ID} \
-e CLUSTER_SECRET=${CLUSTER_SECRET} \
-e CLUSTER_PUBLIC_PORT=${CLUSTER_PORT} \
-e TZ=Asia/Shanghai \
-v /data/openbmclapi:/opt/openbmclapi/cache \
-p ${CLUSTER_PORT}:4000 \
--restart always \
--name openbmclapi \
bangbang93/openbmclapi

若无法访问 Docker Hub Registry, 可以使用国内镜像:

docker pull registry.bangbang93.com/bmclapi/openbmclapi

Docker Compose

请先根据 设置参数 中说明的内容创建 .env 文件或直接更改 docker-compose.yml 文件, 然后运行以下命令:

docker compose up -d

配置

.env 文件位于项目根目录,程序启动时会自动加载(Docker Compose 也会读取)。

运行时环境变量(程序会读取)

环境变量 必填 默认值 配置方法
CLUSTER_ID - 集群 ID(字符串)
CLUSTER_SECRET - 集群密钥(字符串)
CLUSTER_BMCLAPI https://openbmclapi.bangbang93.com 主控地址(URL)
CLUSTER_IP 自动获取公网出口IP 对外访问的 IP 或域名(字符串)
CLUSTER_PORT 4000 本地监听端口(整数)
CLUSTER_PUBLIC_PORT CLUSTER_PORT 对外端口(整数,端口映射后需要设置)
CLUSTER_BYOC false 是否启用 BYOC(true/false)。开启后可用自定义证书
SSL_CERT - 证书公钥:可填证书文件路径,或直接填证书内容(PEM)。仅 BYOC 时使用
SSL_KEY - 证书私钥:可填私钥文件路径,或直接填私钥内容(PEM)。仅 BYOC 时使用
ENABLE_NGINX false 是否启用内置 nginx(true/false)
DISABLE_ACCESS_LOG false 是否禁用访问日志输出(true/false)
ENABLE_UPNP false 是否启用 UPNP 端口映射(true/false)
CLUSTER_STORAGE file 存储类型:file / alist / minio / oss
CLUSTER_STORAGE_OPTIONS - 存储参数(JSON 对象字符串)。不同存储类型参数不同,见下方示例
NOT_FOUND_HTML_PATH - 未匹配路径(例如 /)的自定义错误页 HTML 本地路径(支持相对/绝对路径)
TEST_FILES_DIR - 测试文件目录路径(相对/绝对)。启用后可通过 /test/test/<文件名> 访问
RSYNC_MAX_BANDWIDTH_MBPS 200 rsync 预同步最大总带宽(Mbps),多线程时会按线程数均分
RSYNC_MAX_THREADS 8 rsync 预同步最大线程数(并发 rsync 进程数)
LOGLEVEL info 日志级别:trace / debug / info / warn / error / fatal
PLAIN_LOG - 设置为任意非空值时,关闭 pretty 输出(更适合日志收集)
NODE_ENV - 开发调试环境:development 时异常不会自动退出进程
NO_DAEMON - 设置为任意非空值时,关闭守护进程模式(不再 fork 子进程)
NO_FAST_ENABLE false 设置为 true 时,上报主控时禁用 fast enable(用于排查)

CLUSTER_STORAGE_OPTIONS 示例

.env 中需要写成 JSON 对象字符串,例如:

CLUSTER_STORAGE=file

alist(WebDAV)

CLUSTER_STORAGE=alist
CLUSTER_STORAGE_OPTIONS={"url":"https://example.com/dav","username":"user","password":"pass","basePath":"/openbmclapi","cacheTtl":"1h"}

minio

CLUSTER_STORAGE=minio
CLUSTER_STORAGE_OPTIONS={"url":"http://127.0.0.1:9000","internalUrl":"http://127.0.0.1:9000"}

oss(Aliyun OSS)

CLUSTER_STORAGE=oss
CLUSTER_STORAGE_OPTIONS={"accessKeyId":"***","accessKeySecret":"***","bucket":"your-bucket","internal":false,"prefix":"","proxy":true,"endpoint":"oss-cn-hangzhou.aliyuncs.com","region":"oss-cn-hangzhou"}

连通性测试文件(可选)

不配置 TEST_FILES_DIR 时,不会启用该测试路径。

TEST_FILES_DIR=./test-files

例如把文件 1.test 放到 ./test-files/1.test,访问路径为:

  • http(s)://<你的地址>/test/test/1.test

Docker Compose 专用(可选)

环境变量 必填 默认值 配置方法
UID 1000 docker-compose.dev.yml:容器内运行用户 UID
GID 1000 docker-compose.dev.yml:容器内运行用户 GID
TZ Asia/Shanghai 时区(Docker 环境变量)

安装包

Github Release 中选择对应你的系统的最新版本

从源码安装

环境

  • Node.js 18以上
  • Windows/MacOS/Linux, x86/arm均可 (凡是nodejs支持的环境都可以)

设置环境

  1. https://nodejs.org/zh-cn/ 下载LTS版本的nodejs并安装
  2. Clone 并安装依赖
git clone https://github.com/VupHub/openbmclapi
cd openbmclapi
## 安装依赖
npm ci
## 编译
npm run build
## 运行
node dist/index.js
  1. 如果你看到了 CLUSTER_ID is not set 的报错, 说明一切正常, 该设置参数了

打包构建

npm ci
npm run build

构建产物在 dist/,可直接运行:

node dist/index.js

设置参数

在项目根目录创建一个文件, 名为 .env

写入如下内容

CLUSTER_ID=你的CLUSTER_ID
CLUSTER_SECRET=你的CLUSTER_SECRET
CLUSTER_PORT=对外访问端口

CLUSTER_ID 和 CLUSTER_SECRET 请联系我获取

如果配置无误的话, 运行程序, 就会开始拉取文件, 拉取完成后就会开始等待服务器分发请求了

同步数据

openbmclapi 会自行同步需要的文件, 但是初次同步可能会速度过慢, 如果您的节点是个全量节点, 可以通过以下命令使用rsync快速同步 以下三台rsync服务器是相同的, 你可以选择任意一台进行同步 其中rsync的password为 openbmclapi

  • rsync -rzvP openbmclapi@home.933.moe::openbmclapi cache
  • rsync -avP openbmclapi@storage.yserver.ink::bmcl cache
  • rsync -azvrhP openbmclapi@openbmclapi.home.mxd.moe::data cache

也可以使用内置的多线程 rsync 预同步(会把文件同步到 ./cache),并通过 .env 限制最大带宽与线程数:

RSYNC_MAX_BANDWIDTH_MBPS=200
RSYNC_MAX_THREADS=8

先构建:

npm ci
npm run build

再执行预同步(选择任意一个 rsync 源): 其中rsync的password为 openbmclapi

node dist/index.js rsync openbmclapi@home.933.moe::openbmclapi
node dist/index.js rsync openbmclapi@storage.yserver.ink::bmcl
node dist/index.js rsync openbmclapi@openbmclapi.home.mxd.moe::data

About

BMCLAPI by TianXia

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 96.9%
  • Dockerfile 1.4%
  • Other 1.7%