BMCLAPI是@bangbang93开发的BMCL的一部分,用于解决国内线路对Forge和Minecraft官方使用的Amazon S3 速度缓慢的问题。BMCLAPI是对外开放的,所有需要Minecraft资源的启动器均可调用。
这个项目的主要目的是辅助bmclapi分发文件 对节点的要求降低了不少
- 公网可访问(端口映射也可),可以非80
- 10Mbps以上的上行速度
- 暂时不接受国外节点了
- 可以长时间稳定在线
- 暂不支持IPv6 only(可以双栈)
-
如果你是家庭宽带打算参与,配置信息可以参考 家宽搭建说明
-
如果你是国内服务器打算参与,配置信息可以参考 国内服务器搭建说明
-
如果你是Alist云盘分发打算参与,配置信息可以参考 使用alist的WebDav模式挂载参数示例
如果你不熟悉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请先根据 设置参数 中说明的内容创建 .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(用于排查) |
.env 中需要写成 JSON 对象字符串,例如:
CLUSTER_STORAGE=fileCLUSTER_STORAGE=alist
CLUSTER_STORAGE_OPTIONS={"url":"https://example.com/dav","username":"user","password":"pass","basePath":"/openbmclapi","cacheTtl":"1h"}CLUSTER_STORAGE=minio
CLUSTER_STORAGE_OPTIONS={"url":"http://127.0.0.1:9000","internalUrl":"http://127.0.0.1:9000"}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
| 环境变量 | 必填 | 默认值 | 配置方法 |
|---|---|---|---|
| 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支持的环境都可以)
- 去 https://nodejs.org/zh-cn/ 下载LTS版本的nodejs并安装
- Clone 并安装依赖
git clone https://github.com/VupHub/openbmclapi
cd openbmclapi
## 安装依赖
npm ci
## 编译
npm run build
## 运行
node dist/index.js- 如果你看到了
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 cachersync -avP openbmclapi@storage.yserver.ink::bmcl cachersync -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