Skip to content
黑川启太
Go back

RustFS对象存储Docker部署

RustFS 简介

RustFS是使用目前全球最流行的、内存安全的Rust语言开发的 高性能分布式对象存储软件。RustFS 同时具备简单、高效的特点,也是一种高效、开源、自由、可以进行本地私有云部署的对象存储解决方案。RustFS 100% 兼容 S3 协议,使用 Apache2 许可证发行的开源软件。RustFS 使用目前全世界最受欢迎的、内存安全的语言 Rust 语言编写。 它是由全世界优秀的工程师参与并贡献的一款对于商用友好的分布式对象存储产品,RustFS 可以平替非常多非友好开源协议的对象存储产品。

官方网站:

https://rustfs.com.cn/

官方文档:

https://docs.rustfs.com.cn/

一、前置准备

主机要求

网络与防火墙

运行 RustFS 容器

RustFS SNSD Docker 运行方式,结合上述镜像与配置,执行:

# 创建 data 和 logs 文件夹mkdir -p /mnt/rustfs && cd /mnt/rustfsmkdir -p data logs # 修改权限 chown -R 10001:10001 data logs # Docker RUN docker run -d -p 9000:9000 -p 9001:9001 -v /mnt/rustfs/data:/data -v /mnt/rustfs/logs:/logs rustfs/rustfs:latestBASH

各参数说明:

完整参数配置示例

docker run -d \  --name rustfs_container \  -p 9000:9000 \  -p 9001:9001 \  -v /mnt/rustfs/data:/data \  -e RUSTFS_ACCESS_KEY=admin \  -e RUSTFS_SECRET_KEY=修改成你的密码 \  -e RUSTFS_CONSOLE_ENABLE=true \  -e RUSTFS_SERVER_DOMAINS=s3.example.com \  rustfs/rustfs:latest \  --address :9000 \  --console-enable \  --server-domains s3.example.com \  --access-key admin \  --secret-key 修改成你的密码 \  /dataLIVESCRIPT

Docker Compose 配置

创建 docker-compose.yml 文件:

version: "3.8"services:  rustfs:    image: rustfs/rustfs:latest    container_name: rustfs-server    security_opt:      - "no-new-privileges:true"    ports:      - "9000:9000"   # S3 API 对外端口      - "9001:9001"   # 控制台对外端口    environment:      # 数据卷(多个路径用逗号分隔)      - RUSTFS_VOLUMES=/data/rustfs0      # API 和控制台监听地址      - RUSTFS_ADDRESS=0.0.0.0:9000      - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001      - RUSTFS_CONSOLE_ENABLE=true      # CORS 设置,控制台与 S3 API 都放开来源      - RUSTFS_CORS_ALLOWED_ORIGINS=*      - RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS=*      # 访问密钥(生产环境请修改为强密码)      - RUSTFS_ACCESS_KEY=admin      - RUSTFS_SECRET_KEY=改为你的密码      # 日志级别      - RUSTFS_OBS_LOGGER_LEVEL=info    volumes:      # 存储数据卷(请根据实际情况修改路径)      - ./deploy/data/pro:/data      # 日志目录      - ./deploy/logs:/app/logs    networks:      - rustfs-network    restart: unless-stopped    healthcheck:      test: ["CMD", "sh", "-c", "curl -f http://localhost:9000/health && curl -f http://localhost:9001/health"]      interval: 30s      timeout: 10s      retries: 3      start_period: 40snetworks:  rustfs-network:    driver: bridge    ipam:      config:        - subnet: 172.20.0.0/16NESTEDTEXT

启动服务:

docker compose up -dEBNF

通过 http://localhost:9000 访问,默认用户名和密码均为 rustfsadmin

反向代理

Nginx 反向代理配置

S3 API 端配置

为 S3 API 创建 Nginx 配置文件(如 /www/server/panel/vhost/nginx/s3.example.com.conf):

# S3 API 负载均衡配置upstream rustfs {    least_conn;    server 127.0.0.1:9000;  # S3 API 服务端口}# HTTP 重定向到 HTTPSserver {    listen 80;    listen [::]:80;    server_name s3.example.com;  # 替换为你的 S3 API 域名    return 301 https://$host$request_uri;}# HTTPS 主配置server {    listen 443 ssl;    listen [::]:443 ssl;    http2 on;    server_name s3.example.com;  # 替换为你的 S3 API 域名    # SSL 证书配置(请替换为实际证书路径)    ssl_certificate     /www/server/panel/vhost/cert/s3.example.com/fullchain.pem;    ssl_certificate_key /www/server/panel/vhost/cert/s3.example.com/privkey.pem;    ssl_protocols       TLSv1.2 TLSv1.3;    ssl_ciphers         EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;    ssl_prefer_server_ciphers on;    ssl_session_cache   shared:SSL:10m;    ssl_session_timeout 10m;    add_header Strict-Transport-Security "max-age=31536000";    # 反向代理 RustFS S3 API    location / {        proxy_set_header Host $host;        proxy_set_header X-Real-IP         $remote_addr;        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;        proxy_set_header X-Forwarded-Port  $server_port;        proxy_set_header X-Forwarded-Host  $host;        # 关键配置:禁用 HEAD 请求转换,避免 S3 V4 签名失效        proxy_cache_convert_head off;        proxy_connect_timeout 300;        proxy_http_version 1.1;        proxy_set_header Connection "";        proxy_pass http://rustfs;  # 代理到 S3 API    }    # 日志配置(请根据实际情况修改路径)    access_log  /www/wwwlogs/s3.example.com.log;    error_log   /www/wwwlogs/s3.example.com.error.log;}AWK
控制台端配置

为控制台创建 Nginx 配置文件(如 /www/server/panel/vhost/nginx/console.example.com.conf):

# 控制台负载均衡配置upstream rustfs-console {    least_conn;    server 127.0.0.1:9001;  # 控制台服务端口}# HTTP 重定向到 HTTPSserver {    listen 80;    listen [::]:80;    server_name console.example.com;  # 替换为你的控制台域名    return 301 https://$host$request_uri;}# HTTPS 主配置server {    listen 443 ssl;    listen [::]:443 ssl;    http2 on;    server_name console.example.com;  # 替换为你的控制台域名    # SSL 证书配置(请替换为实际证书路径)    ssl_certificate     /www/server/panel/vhost/cert/console.example.com/fullchain.pem;    ssl_certificate_key /www/server/panel/vhost/cert/console.example.com/privkey.pem;    ssl_protocols       TLSv1.2 TLSv1.3;    ssl_ciphers         EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;    ssl_prefer_server_ciphers on;    ssl_session_cache   shared:SSL:10m;    ssl_session_timeout 10m;    add_header Strict-Transport-Security "max-age=31536000";    # 反向代理 RustFS 控制台    location / {        proxy_set_header Host $host;        proxy_set_header X-Real-IP         $remote_addr;        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto $scheme;        proxy_set_header X-Forwarded-Port  $server_port;        proxy_set_header X-Forwarded-Host  $host;        # 禁用 HEAD 请求转换        proxy_cache_convert_head off;        proxy_connect_timeout 300;        proxy_http_version 1.1;        proxy_set_header Connection "";        proxy_pass http://rustfs-console;  # 代理到控制台    }    # 日志配置(请根据实际情况修改路径)    access_log  /www/wwwlogs/console.example.com.log;    error_log   /www/wwwlogs/console.example.com.error.log;}AWK

重载 Nginx 配置:

nginx -t && nginx -s reload1C

测试S3

这里使用S3cmd

S3cmd 是一个用于操作 Amazon S3 和其他兼容 S3 的云存储服务的命令行工具。它提供了广泛的命令,允许用户上传、下载、同步和管理存储在 S3 上的文件。

使用包管理器安装

在大多数 Linux 发行版中,您可以使用包管理器来安装 S3cmd。以下是在几种常见 Linux 发行版上安装 S3cmd 的命令。

对于基于 Debian 的系统(如 Ubuntu),您可以使用 apt-get

sudo apt-get updatesudo apt-get install s3cmdBASH

对于基于 Red Hat 的系统(如 CentOS),您可以使用 yum

sudo yum install s3cmdBASH

对于基于 Arch Linux 的系统,您可以使用 pacman

sudo pacman -S s3cmdBASH

配置 S3cmd

在安装完 S3cmd 之后,您需要对其进行配置,以便连接到您的 S3 存储服务。配置 S3cmd 涉及设置您的 AWS 访问密钥 ID 和秘密访问密钥,这些是您在 AWS 账户中创建的访问权限凭证。

运行配置向导

最简单的方法是运行 S3cmd 的配置向导。在命令行中输入以下命令:

s3cmd --configureBASH

该命令将启动一个交互式配置程序,提示您输入所需的配置信息,包括:

参考

root@iv-ydya2ilgcgqc6ilqbabf:~# s3cmd --configureEnter new values or accept defaults in brackets with Enter.Refer to user manual for detailed description of all options.Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.Access Key: adminSecret Key: passwdDefault Region [US]:Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.S3 Endpoint [s3.amazonaws.com]: s3.xxx.cnUse "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be usedif the target S3 system supports dns based buckets.DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]:Encryption password is used to protect your files from readingby unauthorized persons while in transfer to S3Encryption password: passwdPath to GPG program [/usr/bin/gpg]:When using secure HTTPS protocol all communication with Amazon S3servers is protected from 3rd party eavesdropping. This method isslower than plain HTTP, and can only be proxied with Python 2.7 or newerUse HTTPS protocol [Yes]:On some networks all internet access must go through a HTTP proxy.Try setting it here if you can't connect to S3 directlyHTTP Proxy server name:New settings:  Access Key: admin  Secret Key: passwd  Default Region: US  S3 Endpoint: s3.quickso.cn  DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.s3.amazonaws.com  Encryption password: passwd  Path to GPG program: /usr/bin/gpg  Use HTTPS protocol: True  HTTP Proxy server name:  HTTP Proxy server port: 0Test access with supplied credentials? [Y/n] yPlease wait, attempting to list all buckets...Success. Your access key and secret key worked fine :-)Now verifying that encryption works...Success. Encryption and decryption worked fine :-)Save settings? [y/N] yConfiguration saved to '/root/.s3cfg'root@iv-ydya2ilgcgqc6ilqbabf:~# s3cmd ls2025-12-27 01:19  s3://testVHDL

出于安全考虑,您的配置文件应该只有您自己能够读写。设置适当的文件权限可以使用以下命令:

chmod 600 ~/.s3cfgBASH

这样,您就完成了 S3cmd 的基本配置,可以开始使用它来管理您的 S3 存储桶了

基本命令与操作

S3cmd 提供了一系列命令,用于执行与 Amazon S3 存储桶相关的各种操作。以下是一些常用的 S3cmd 命令及其基本用法。

1 列出存储桶

要列出所有可用的存储桶,可以使用以下命令:

s3cmd lsBASH

这将显示您有权访问的所有存储桶的列表。

2 上传文件

要将文件上传到存储桶,使用以下命令:

s3cmd put /path/to/your/file s3://bucket-name/file-nameBASH

请将 /path/to/your/file 替换为您要上传的文件的本地路径,将 bucket-name 替换为您的 S3 存储桶名称,将 file-name 替换为您希望文件在 S3 上保存的名称。

3 下载文件

要从存储桶下载文件,使用以下命令:

s3cmd get s3://bucket-name/file-name /path/to/your/local/directoryBASH

请将 bucket-namefile-name 替换为存储桶名称和文件名称,将 /path/to/your/local/directory 替换为您希望保存下载文件的本地路径。

4 删除文件

要删除存储桶中的文件,使用以下命令:

s3cmd rm s3://bucket-name/file-nameBASH

请确保在执行此操作之前正确地确认了文件名称,因为此操作是不可逆的。

5 同步文件

S3cmd 的同步功能允许您同步本地目录与 S3 存储桶中的内容。以下是如何使用该命令的示例:

s3cmd sync /path/to/your/local/directory s3://bucket-name/BASH

这个命令会检查本地目录和 S3 存储桶中的文件,并根据需要上传或下载文件以保持同步。

6 查看文件信息

要查看存储在 S3 上的文件的元数据,可以使用以下命令:

s3cmd info s3://bucket-name/file-nameBASH

这将显示关于指定文件的信息,包括其大小、存储类、ETag 等。

通过掌握这些基本命令,您可以开始有效地管理您的 S3 存储桶中的文件。S3cmd 还有更多高级功能,如批量删除、复制对象、设置权限等,可以通过查阅官方文档来了解这些高级用法。



Previous Post
重甲
Next Post
Minecraft 服务器资源大杂烩