静看光阴荏苒
不管不顾不问不说也不念

VersityGW:高性能S3对象存储服务器

这个VersityGW官方称为高性能S3转换服务,和Garage是完全不同的实现。

VersityGW是无状态的,且数据是原样保存的,假设你上传了一个hello.txt(内容是 “hello world”)你可以看数据目录下的结构:

./data/
└── my-bucket/
    └── hello.txt  <-- 这就是一个普通的文本文件,你用记事本直接能打开

而Garage的数据目录类似:

./data/
└── a1/
    └── f8e2c... <-- 乱码文件(hello.txt 的碎片,直接打开是乱码)

VersityGW主打一个简单、高效、易于部署,我其实挺喜欢VersityGW这种设计方案的,反正作为普通用户在使用层面是完全无感的。

安装Docker:

apt -y update
apt -y install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

安装NGINX、CertBot:

apt update
apt install nginx python3-certbot-nginx

创建目录新建compose文件:

mkdir /opt/versitygw && cd /opt/versitygw && nano docker-compose.yml

写入如下内容:

services:
  versitygw:
    image: ghcr.io/versity/versitygw:latest
    ports:
      - "127.0.0.1:7070:7070"
      - "127.0.0.1:7071:7071"
      - "127.0.0.1:8080:8080"
    environment:
      ROOT_ACCESS_KEY: imlala
      ROOT_SECRET_KEY: setyourpassword
      VGW_PORT: ":7070"
      VGW_IAM_DIR: /data/iam
      VGW_VERSIONING_DIR: /data/versioning
      VGW_BACKEND: posix
      VGW_BACKEND_ARGS: /data/s3
      VGW_ADMIN_PORT: ":7071"
      VGW_WEBUI_PORT: ":8080"
      VGW_WEBUI_GATEWAYS: "https://versitygw-s3.example.com"
      VGW_WEBUI_ADMIN_GATEWAYS: "https://versitygw-admin.example.com"
    volumes:
      - ./data/s3:/data/s3
      - ./data/versioning:/data/versioning
      - ./data/iam:/data/iam
    restart: unless-stopped

7070是s3 api端口,7071是管理api端口,8080是webui端口。对于生产环境而言,建议使用反向代理。我这里使用NGINX反向代理:

https://versitygw-s3.example.com --> 7070端口
https://versitygw-admin.example.com --> 7071端口
https://versitygw-console.example.com --> 8080端口

[不推荐]如果不使用反向代理,可以将VGW_WEBUI_GATEWAYSVGW_WEBUI_ADMIN_GATEWAYS配置为服务器的公网IP:

services:
  versitygw:
    image: ghcr.io/versity/versitygw:latest
    ports:
      - "7070:7070"
      - "7071:7071"
      - "8080:8080"
    environment:
      VGW_WEBUI_GATEWAYS: "http://8.9.6.4:7070"
      VGW_WEBUI_ADMIN_GATEWAYS: "http://8.9.6.4:7071"

[不推荐]如果你在没有公网IP的环境下部署,如本地测试环境,可以配置为localhost:

services:
  versitygw:
    image: ghcr.io/versity/versitygw:latest
    ports:
      - "7070:7070"
      - "7071:7071"
      - "8080:8080"
    environment:
      VGW_WEBUI_GATEWAYS: "http://localhost:7070"
      VGW_WEBUI_ADMIN_GATEWAYS: "http://localhost:7071"

创建VersityGW需要用到的目录:

mkdir -p ./data/s3 ./data/versioning ./data/iam

启动:

docker compose up -d

新建NGINX站点配置文件:

nano /etc/nginx/sites-available/versitygw

写入如下内容:

upstream versity_s3_backend {
    server 127.0.0.1:7070;
    keepalive 32; # 保持 32 个空闲长连接,提升高频请求性能
}

upstream versity_admin_backend {
    server 127.0.0.1:7071;
    keepalive 8;
}

upstream versity_webui_backend {
    server 127.0.0.1:8080;
    keepalive 8;
}

server {
    listen 80;
    listen [::]:80;
    server_name versitygw-s3.example.com; # 替换为你的 S3 访问域名
    client_max_body_size 0;
    
    # 关键设置:禁用缓冲,确保大文件分片上传和流式传输时不会塞满 Nginx 缓存
    proxy_buffering off;
    proxy_request_buffering off;

    location / {
        proxy_pass http://versity_s3_backend;
        proxy_set_header Host $http_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_http_version 1.1;
        proxy_set_header Connection "";
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name versitygw-admin.example.com; # 替换为你的管理 API 域名

    location / {
        proxy_pass http://versity_admin_backend;
        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;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name versitygw-console.example.com; # 替换为你的 Web UI 域名

    location / {
        proxy_pass http://versity_webui_backend;
        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;
    }
}

启用站点:

ln -s /etc/nginx/sites-available/versitygw /etc/nginx/sites-enabled/versitygw

签发证书:

certbot --nginx

访问versitygw-console.example.com,使用ROOT_ACCESS_KEYROOT_SECRET_KEY登录Web UI:

创建一个普通用户:

创建bucket,设置所有者为刚才创建的用户:

上传文件测试:

可以为文件生成presigned URL供临时访问:

管理bucket:

这绝对又是一个MinIO的绝佳替代品,MinIO已经死了没啥好对比的了,与Garage对比的话,我觉得VersityGW无论是部署还是平时使用都比Garage简单太多了,上手自然也比Garage快,毕竟自带Web UI,而且比Garage多了版本控制功能。

赞(0)
未经允许不得转载:荒岛 » VersityGW:高性能S3对象存储服务器
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿