基于 Rust 的 S3 兼容对象存储服务,内置单端口管理控制台,支持集群管理、复制与纠删码。
RustIO 是一个公开发布的纯源码版对象存储仓库,默认提供:
- S3 兼容对象接口
- 单端口管理控制台
- 集群管理与健康检查
- IAM / 审计 / 指标摘要
- 复制、生命周期、对象锁与 KMS 能力
- 纠删码、读写 quorum 与数据保护能力
公开仓库当前保留了两条推荐启动链路:
- Docker 一键启动:适合大多数部署场景
- 源码一键启动:适合本地构建、二次开发与调试
./start.sh后台启动:
./start.sh -d强制重建镜像:
./start.sh --buildchmod +x ./start-source.sh
./start-source.sh- S3 / Admin API:
9000 - Web Console:
9000
RustIO 采用单端口模式,控制台与 S3 / Admin API 共用 9000。
- 用户名:
admin - 密码:
rustio-admin
可通过以下环境变量覆盖:
RUSTIO_CONSOLE_USERRUSTIO_CONSOLE_PASSWORD
- Access Key:
rustioadmin - Secret Key:
rustioadmin
可通过以下环境变量覆盖:
RUSTIO_ROOT_USERRUSTIO_ROOT_PASSWORD
同时兼容以下 MinIO 风格环境变量:
MINIO_ROOT_USERMINIO_ROOT_PASSWORD
- 已安装 Docker Engine 或 Docker Desktop
- 已安装
docker compose插件,或系统中存在docker-compose
在项目根目录执行:
./start.sh常用命令:
./start.sh --build
./start.sh -d
./start.sh --down修改对外端口:
./start.sh --port 19000修改数据目录:
./start.sh --data-dir ./data-prod自定义容器名与镜像名:
./start.sh --container-name rustio-prod --image-name rustio-prod也可以直接通过环境变量控制:
RUSTIO_HOST_PORT=19000 \
RUSTIO_DATA_DIR_HOST=./data-prod \
RUSTIO_CONTAINER_NAME=rustio-prod \
./start.sh -d- 自动探测 Docker Daemon API 版本
- 遇到老版本 daemon 时自动设置
DOCKER_API_VERSION - 自动在
docker compose与docker-compose之间择优 - 启动前自动创建宿主机数据目录
- 通过
docker-compose.yml参数化端口、容器名、镜像名和数据挂载目录
优先推荐使用 ./start.sh,因为它已经封装了兼容探测。
高级用户若需要直接执行,也可以使用:
docker compose up -d或:
docker-compose up -d- 控制台:
http://你的服务器IP:9000 - S3 / Admin API:
http://你的服务器IP:9000
如使用 --port 19000,则访问端口同步变为 19000。
Docker 模式默认将宿主机目录:
./data挂载到容器内:
/app/data./start.sh --down- Linux 或 macOS
- 本地可用的 C 编译器
- 可联网下载 Rust / Node 依赖
脚本会在缺失时自动尝试安装:
- Rust(通过
rustup) - Node.js 22+(通过
nvm)
./start-source.sh跳过前端构建,直接复用已有静态资源:
./start-source.sh --skip-web-build强制重建前端:
./start-source.sh --force-web-build强制使用 Docker 构建前端:
./start-source.sh --docker-node-build自定义监听地址、数据目录与静态资源目录:
./start-source.sh \
--addr 0.0.0.0:19000 \
--data-dir ./data-dev \
--console-dist ./web/console/dist禁用自动镜像加速:
./start-source.sh --no-mirror- 缺失 Rust 时自动安装
rustup - 缺失 Node.js 22+ 时自动安装
nvm与 Node.js - 检测到低版本
glibc或本机 Node 环境异常时,自动回退到 Docker 构建前端 - Docker 构建前端时,同样支持老版本 Docker API 自动兼容
- 若前端静态资源未变化,会自动跳过重复构建
- 后端使用
cargo build --locked --release -p rustio构建,避免锁文件漂移
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
# 安装 Node.js 22+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm install 22
nvm alias default 22
nvm use 22
# 验证版本
rustc -V
cargo -V
node -v
npm -vexport RUSTUP_DIST_SERVER=https://rsproxy.cn
export RUSTUP_UPDATE_ROOT=https://rsproxy.cn/rustup
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
export CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
npm ci --prefix web/console --prefer-offline --no-audit --no-fund
npm run build --prefix web/console
cargo build --locked --release -p rustio
mkdir -p ./data
RUSTIO_ADDR=0.0.0.0:9000 \
RUSTIO_DATA_DIR=./data \
RUSTIO_CONSOLE_DIST=$PWD/web/console/dist \
./target/release/rustio如果服务器没有 Docker,且系统太旧导致 Node.js 22 无法运行,可以在另一台较新的机器先构建前端,再将 web/console/dist 同步到服务器,然后执行:
RUSTIO_SKIP_WEB_BUILD=1 ./start-source.sh或:
./start-source.sh --skip-web-build- 控制台:
http://你的服务器IP:9000 - S3 / Admin API:
http://你的服务器IP:9000
如使用 --addr 0.0.0.0:19000,则访问端口变为 19000。
RUSTIO_ADDR:容器内监听地址,默认0.0.0.0:9000RUSTIO_HOST_PORT:宿主机映射端口,默认9000RUSTIO_CONTAINER_PORT:容器内暴露端口,默认9000RUSTIO_DATA_DIR_HOST:宿主机数据目录,默认./dataRUSTIO_DATA_DIR_CONTAINER:容器内数据目录,默认/app/dataRUSTIO_CONTAINER_NAME:容器名称,默认rustioRUSTIO_IMAGE_NAME:镜像名称,默认rustio-rustioRUSTIO_RESTART_POLICY:重启策略,默认unless-stopped
RUSTIO_ADDR:监听地址,示例0.0.0.0:9000RUSTIO_DATA_DIR:数据目录,示例./dataRUSTIO_CONSOLE_DIST:前端静态资源目录,示例./web/console/distRUSTIO_AUTO_MIRROR:是否自动启用镜像加速,默认1RUSTIO_SKIP_WEB_BUILD:是否跳过前端构建,默认0RUSTIO_FORCE_WEB_BUILD:是否强制重建前端,默认0RUSTIO_USE_DOCKER_NODE_BUILD:是否强制使用 Docker 构建前端,默认0RUSTIO_RUST_TOOLCHAIN:指定 Rust 工具链版本,例如stable
RUSTIO_CONSOLE_USERRUSTIO_CONSOLE_PASSWORDRUSTIO_ROOT_USERRUSTIO_ROOT_PASSWORDMINIO_ROOT_USERMINIO_ROOT_PASSWORD
服务启动后可检查:
GET /health/liveGET /health/readyGET /health/cluster
例如:
curl http://127.0.0.1:9000/health/live
curl http://127.0.0.1:9000/health/ready
curl http://127.0.0.1:9000/health/cluster- 放通对外访问端口,默认是
9000 - 生产环境建议修改默认控制台账号与 S3 Root 账号
- 生产环境建议将数据目录挂载到独立磁盘
- 如需 TLS、域名和统一入口,建议前置 Nginx / Caddy / Traefik
例如看到类似:
client version 1.53 is too new. Maximum supported API version is 1.43
当前 ./start.sh 已内置自动兼容逻辑,通常直接重新执行即可。若你是手动执行 Compose,请先导出:
export DOCKER_API_VERSION=1.43再执行 docker compose up 或 docker-compose up。
./start-source.sh 会优先尝试本机安装 Node.js 22+。如果系统 glibc 太旧或 Node 运行失败,脚本会自动回退到 Docker 构建前端。
如果服务器既没有 Docker、又无法运行 Node.js 22,请在另一台机器构建好 web/console/dist 后,再执行:
./start-source.sh --skip-web-build请确认:
web/console/dist已存在- 启动时
RUSTIO_CONSOLE_DIST指向正确目录 - 如果你跳过了前端构建,目录内不是空内容
请确认:
- 宿主机数据目录未被清理
docker-compose.yml中的数据卷挂载未被改掉- 你没有把临时目录误传给
--data-dir
请优先确认:
- 访问的是服务器实际 IP 或域名,而不是
127.0.0.1 - 对外端口已放行
- 控制台账号是否已被环境变量覆盖
- S3 Root 账号与控制台账号不是同一组概念
crates/:Rust 后端源码web/console/:Web 管理控制台源码Dockerfile.rustio:Docker 镜像构建文件docker-compose.yml:Docker 部署入口start.sh:Docker 一键启动脚本start-source.sh:源码一键启动脚本
如果你只是部署使用,优先关注:
README.mddocker-compose.ymlstart.shstart-source.sh
欢迎提交 Issue 与 PR。提交前建议至少完成以下自检:
- 能说明改动目的、范围与验证方式
- 文档变更与代码变更保持同步
- 不提交敏感信息、本地密钥和环境残留
- 如涉及部署链路,优先验证
./start.sh或./start-source.sh