使用 Docker 安装 RustFS
RustFS Docker 部署。
RustFS 是高性能、兼容 S3 的开源分布式对象存储系统。在单节点单磁盘(SNSD)部署模式下,后端使用零纠删码,不提供额外数据冗余,适合本地测试和小规模场景。 本文基于 RustFS 官方 Linux 二进制软件包,通过自定义 Dockerfile 将 RustFS 及其运行环境打包到容器中,并配置数据卷和环境变量以一键启动服务。
前提条件
- 主机要求
- 已安装 Docker(≥ 20.10),并能正常拉取镜像和运行容器
- 本地路径
/mnt/rustfs/data(或自定义路径),用于挂载对象数据 - 管理主机上已安装
rc,用于验证流程
- 网络和防火墙
- 确保主机端口 9000(S3 API)和 9001(控制台)可供外部访问,或与自定义端口一致
- 目录权限
- RustFS 容器以 ID 为
10001的非 root 用户rustfs运行。如果使用 docker 的-v将主机目录挂载到容器,请确保主机目录的所有者为10001,否则会遇到权限拒绝错误。运行chown -R 10001:10001 /path/to/host_directory授予必要权限。
运行 RustFS 容器
使用上述镜像和配置,按以下方式运行 RustFS SNSD Docker:
docker run -d \
--name rustfs_local \
-p 9000:9000 \
-p 9001:9001 \
-v /mnt/rustfs/data:/data \
rustfs/rustfs:latest \
/data参数说明:
-p 9000:9000:将主机端口 9000 映射到容器-v /mnt/rustfs/data:/data:挂载数据卷--name rustfs_local:自定义容器名称-d:在后台运行
完整配置示例
配置可以通过环境变量(推荐)或命令行参数传入,请选择一种方式;两者同时存在时,命令行参数优先。卷路径(/data)始终放在最后。
# Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24)
docker run -d \
--name rustfs \
-p 9000:9000 \
-p 9001:9001 \
-v /mnt/rustfs/data:/data \
-e RUSTFS_ACCESS_KEY="<your-access-key>" \
-e RUSTFS_SECRET_KEY="<your-secret-key>" \
-e RUSTFS_ADDRESS=:9000 \
-e RUSTFS_CONSOLE_ENABLE=true \
rustfs/rustfs:latest \
/data# Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24)
docker run -d \
--name rustfs \
-p 9000:9000 \
-p 9001:9001 \
-v /mnt/rustfs/data:/data \
rustfs/rustfs:latest \
--access-key "<your-access-key>" \
--secret-key "<your-secret-key>" \
--address :9000 \
--console-enable \
/data常用配置组合
-
基本配置:
docker run -d \ -p 9000:9000 \ -p 9001:9001 \ -v /mnt/data:/data \ rustfs/rustfs:latest \ /data -
启用控制台:
docker run -d \ -p 9000:9000 \ -p 9001:9001 \ -v /mnt/data:/data \ -e RUSTFS_CONSOLE_ENABLE=true \ rustfs/rustfs:latest \ --console-enable \ /data -
自定义身份验证密钥:
# Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24) docker run -d \ -p 9000:9000 \ -p 9001:9001 \ -v /mnt/data:/data \ -e RUSTFS_ACCESS_KEY="<your-access-key>" \ -e RUSTFS_SECRET_KEY="<your-secret-key>" \ rustfs/rustfs:latest \ --access-key "<your-access-key>" \ --secret-key "<your-secret-key>" \ /data
重要说明
-
端口映射必须对应:
- 服务端口默认为 9000(
-p 9000:9000)
- 服务端口默认为 9000(
-
数据卷必须持久化:
-v /host/path:/container/path
-
环境变量和命令行参数可以混用,但命令行参数优先级更高
-
如果使用 TLS,需要额外挂载证书路径:
-v /path/to/certs:/certs \ -e RUSTFS_TLS_PATH=/certs \
使用 Docker Compose 安装
RustFS 官方提供 Docker Compose 安装方式。docker-compose.yml 文件包含 grafana、prometheus、otel-collector 和 jaeger 等多个服务,主要用于可观测性。如果要一起部署这些服务,请将 RustFS 代码仓库克隆到本地:
git clone https://github.com/rustfs/rustfs.git在根目录下运行命令:
docker compose --profile observability up -d提供必要的权限。需要使用初始化容器,通过 depends_on 关键字为 rustfs 授予正确的访问权限。以下示例将 rustfs_perms 服务添加到 docker-compose.yml 来处理权限。为了确保日志持久化且可访问,将主机日志目录映射到容器的 /logs 路径:
services:
# grant the necessary permissions to RUSTFS volumes path
rustfs_perms:
image: alpine
user: root
volumes:
- /path/to/host_directory/volumes:/fix_path
command: chown -R 10001:10001 /fix_path
rustfs:
image: rustfs/rustfs:latest
depends_on:
rustfs_perms:
condition: service_completed_successfully
volumes:
- /path/to_host_directory/volumes/data:/data
- /path/to_host_directory/volumes/logs:/logs
environment:
- RUSTFS_OBS_LOG_DIRECTORY=/logs
# ... other configurations启动后的容器如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c13c23fe3d9d rustfs/rustfs:latest "/entrypoint.sh rust…" 6 seconds ago Up 5 seconds (health: starting) 0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp rustfs-server
e3f4fc4a83a2 grafana/grafana:latest "/run.sh" 7 seconds ago Up 5 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp grafana
71ef1b8212cf prom/prometheus:latest "/bin/prometheus --c…" 7 seconds ago Up 5 seconds 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
e7db806b2d6f jaegertracing/all-in-one:latest "/go/bin/all-in-one-…" 7 seconds ago Up 5 seconds 4317-4318/tcp, 9411/tcp, 0.0.0.0:14250->14250/tcp, :::14250->14250/tcp, 14268/tcp, 0.0.0.0:16686->16686/tcp, :::16686->16686/tcp jaeger
1897830a2f1e otel/opentelemetry-collector-contrib:latest "/otelcol-contrib --…" 7 seconds ago Up 5 seconds 0.0.0.0:4317-4318->4317-4318/tcp, :::4317-4318->4317-4318/tcp, 0.0.0.0:8888-8889->8888-8889/tcp, :::8888-8889->8888-8889/tcp, 55679/tcp otel-collector如果只想安装 RustFS,而不安装 Grafana、Prometheus 和其他可观测性服务,请仅启动 rustfs 服务(compose 文件将 collector 依赖项标记为可选):
docker compose -f docker-compose.yml up -d rustfs这样只会安装并启动 rustfs-server 服务,即 rustfs 容器:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e07121ecdd39 rustfs/rustfs:latest "/entrypoint.sh rust…" 2 seconds ago Up 1 second (health: starting) 0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp rustfs-server无论只启动 rustfs-server 还是同时启动可观测性服务,S3 API 都位于 http://localhost:9000,RustFS 控制台位于 http://localhost:9001。请在浏览器中打开控制台,使用上面配置的访问密钥和秘密密钥(<your-access-key> / <your-secret-key> 占位符)登录。例如使用 openssl rand -base64 24 生成强密钥,绝不要将占位符值用于生产环境。
立即设置容器凭证
在将 RustFS 接入网络前,请设置唯一的 RUSTFS_ACCESS_KEY 和 RUSTFS_SECRET_KEY 环境变量。任一凭证都不要使用众所周知的 rustfsadmin 值。对于 docker run,使用 -e 传入这两个值。对于 Docker Compose,请在 rustfs 服务环境或用于变量替换的环境文件中定义这两个变量,然后使用 docker compose up -d rustfs 重新创建服务。
验证和访问
- 查看容器状态和日志:
docker logs rustfs_local日志应显示服务成功启动并监听端口 9000。
- 测试 S3 API:
使用 rc 验证 S3 API:
# Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24)
rc alias set rustfs http://localhost:9000 <your-access-key> <your-secret-key>
rc bucket create rustfs/my-bucket
rc bucket list rustfs/如果可以成功创建并列出存储桶,则部署有效。
多节点
Docker 默认的桥接网络不支持多节点部署。使用 --network host,让每个容器可以直接与其他节点通信。
在每个节点上运行以下命令:
# Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24)
docker run -d \
--name rustfs \
--network host \
-v /mnt/rustfs/data:/data \
-e RUSTFS_ACCESS_KEY="<your-access-key>" \
-e RUSTFS_SECRET_KEY="<your-secret-key>" \
-e RUSTFS_CONSOLE_ENABLE=true \
-e RUSTFS_VOLUMES="http://node{1...4}:9000/data/rustfs{0...3}" \
rustfs/rustfs:latest在每个节点的 /etc/hosts 中添加条目:
192.168.1.1 node1
192.168.1.2 node2
192.168.1.3 node3
192.168.1.4 node4其他建议
- 生产环境建议:
- 使用多节点部署架构
- 启用 TLS 加密通信
- 配置日志轮转策略
- 设置定期备份策略
- 存储建议:
- 使用本地 SSD/NVMe 存储
- 避免使用网络文件系统(NFS)
- 确保存储目录独占访问
总结
本文介绍使用 Docker 部署 RustFS 的最佳实践,从单节点单磁盘(SNSD)设置开始,再扩展到多节点部署选项。