Contents

vaults3

VaultS3

轻量级S3存储

一、介绍

VaultS3 是一个轻量级、兼容 Amazon S3 API 的开源对象存储服务,使用 Go 开发,可以以单二进制或 Docker 容器方式运行,并内置 Web Dashboard。

项目定位比较明确:在资源占用较低、部署简单的前提下,为自建环境提供常见的 S3 对象存储能力。官方文档给出的轻量单节点空闲内存占用约为 17 MiB。

VaultS3 支持 AWS CLI、MinIO Client、boto3、s3fs 等常见 S3 客户端。当前项目提供 80+ S3 API 操作,并支持 Multipart Upload、Presigned URL、对象版本、IAM、生命周期、S3 Event、对象锁等功能。

项目地址:https://github.com/Kodiqa-Solutions/VaultS3

主要特点:

  • S3 Compatible API
  • AWS Signature V4
  • 单二进制部署
  • Docker / Kubernetes 部署
  • 内置 Web Dashboard
  • 中文 Web UI
  • IAM 用户、用户组和 Policy
  • Access Key / Secret Key
  • Multipart Upload
  • Presigned URL
  • Bucket Policy
  • Bucket / Object ACL
  • Bucket CORS
  • 对象版本管理
  • Object Lock / WORM
  • Lifecycle 生命周期管理
  • Bucket Quota
  • SSE-S3 加密
  • SSE-KMS
  • SSE-C
  • AES-256-GCM 静态数据加密
  • Erasure Coding
  • Replication
  • Prometheus Metrics
  • Webhook / Kafka / NATS / Redis / RabbitMQ 等事件通知
  • Health / Readiness 检查
  • S3 数据迁移
  • 内置 CLI

VaultS3 的对象内容实际存储为普通文件,元数据主要保存在 BoltDB 中,因此整体架构相对简单。

基本架构可以理解为:

               ┌─────────────────────┐
               │     S3 Client       │
               │ AWS CLI / mc / SDK  │
               └─────────┬───────────┘
                         │ S3 API
               ┌─────────────────────┐
               │       VaultS3       │
               │                     │
               │ S3 API              │
               │ IAM                 │
               │ Dashboard           │
               │ Encryption          │
               │ Versioning          │
               │ Lifecycle           │
               └───────┬─────┬───────┘
                       │     │
                 Object│     │Metadata
                       ▼     ▼
                  /data     /metadata
                             BoltDB

当项目需要一个简单的 S3 Compatible Server,而又不希望运行较重的对象存储集群时,可以使用 VaultS3。

二、安装部署

docker 命令

docker run -d  --name vaults3  --restart unless-stopped  -p 9000:9000  -e VAULTS3_ACCESS_KEY=admin  -e VAULTS3_SECRET_KEY='ChangeMe-StrongPassword'  -v vaults3-data:/data  -v vaults3-meta:/metadata  eniz1806/vaults3:v4.4.75

启动以后:

S3 Endpoint:
http://服务器IP:9000

Dashboard:
http://服务器IP:9000/dashboard/

默认情况下 S3 API 和 Dashboard 共用 9000 端口。

docker-compose

services:
  vaults3:
    image: eniz1806/vaults3:v4.4.75
    container_name: vaults3
    restart: unless-stopped
    ports:
      - "9000:9000"

    environment:
      VAULTS3_ACCESS_KEY: "admin"
      VAULTS3_SECRET_KEY: "ChangeMe-StrongPassword"
      # 创建默认的bucket
      VAULTS3_DEFAULT_BUCKETS: "images,backups,attachments"

    volumes:
      - ./data:/data
      - ./metadata:/metadata

ArgoCD部署

# applicationset.yaml

apiVersion: v1
kind: Secret
metadata:
  name: vaults3-zot-helm-repository
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  name: vaults3-zot
  type: helm
  enableOCI: "true"
  url: zot.imau.cc/charts
---
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: dev-vaults3
  namespace: argocd
  labels:
    product: dev
    env: dev
spec:
  generators:
    - list:
        elements:
          - chartName: vaults3
            chartVersion: "0.1.36"
  template:
    metadata:
      name: '{{chartName}}-dev'
      labels:
        product: dev
        env: dev
    spec:
      project: default
      sources:
        - repoURL: 'git@imau.cc:serialt/argo.git'
          targetRevision: main
          ref: values
        - repoURL: 'zot.imau.cc/charts'
          chart: '{{chartName}}'
          targetRevision: '{{chartVersion}}'
          helm:
            valueFiles:
              - '$values/vaults3/dev/values/vaults3.yaml'
      destination:
        name: in-cluster
        namespace: app
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
          - ApplyOutOfSyncOnly=true
          - CreateNamespace=true
          - PrunePropagationPolicy=foreground
# value.yaml

controller:
  kind: StatefulSet

replicaCount: 1

image:
  repository: registry.cn-hangzhou.aliyuncs.com/serialt/vaults3
  tag: "4.4.75"
  pullPolicy: IfNotPresent

auth:
  existingSecret: vaults3-auth

service:
  type: ClusterIP
  port: 9000

ingress:
  enabled: true
  className: traefik
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: websecure
    traefik.ingress.kubernetes.io/router.tls: "true"
  hosts:
    - host: s3.imau.cc
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: imau-cc-wildcard-tls
      hosts:
        - s3.imau.cc

persistence:
  enabled: true
  data:
    size: 20Gi
    accessModes:
      - ReadWriteOnce
  metadata:
    size: 5Gi
    accessModes:
      - ReadWriteOnce

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    cpu: "1"
    memory: 512Mi

extraEnv:
  - name: VAULTS3_LOG_LEVEL
    value: info

serviceMonitor:
  enabled: false

cluster:
  enabled: false

测试验证

export AWS_ACCESS_KEY_ID='admin'
export AWS_SECRET_ACCESS_KEY='xxxx'
export AWS_REGION='us-east-1'


[serialt@Sugar jsonb]🐳 s5cmd --endpoint-url https://s3.imau.cc ls
2026/09/12 17:40:46  s3://dev
2026/09/12 17:34:36  s3://sugar

[serialt@Sugar jsonb]🐳 date >date.txt
[serialt@Sugar jsonb]🐳 s5cmd --endpoint-url https://s3.imau.cc cp date.txt s3://dev/
cp date.txt s3://dev/date.txt

分离dashboard端口

services:
  vaults3:
    image: eniz1806/vaults3:v4.4.75
    container_name: vaults3
    restart: unless-stopped

    ports:
      - "9000:9000" # S3 API
      - "9001:9001" # Dashboard

    environment:
      VAULTS3_ACCESS_KEY: "${VAULTS3_ACCESS_KEY}"
      VAULTS3_SECRET_KEY: "${VAULTS3_SECRET_KEY}"

    volumes:
      - ./data:/data
      - ./metadata:/metadata
      - ./vaults3.yaml:/etc/vaults3/vaults3.yaml:ro
# vaults3.yaml 
server:
  address: "0.0.0.0"

  # S3 API
  port: 9000

  # Web Dashboard
  console_port: 9001

storage:
  data_dir: "/data"
  metadata_dir: "/metadata"
  
# .env
VAULTS3_ACCESS_KEY=admin
VAULTS3_SECRET_KEY=ChangeMe-StrongPassword

访问:

S3 API:
http://服务器IP:9000

Dashboard:
http://服务器IP:9001/dashboard/