Seaweed S3服务单机版正式环境的部署

公司要做系统迁移,从AWS迁移到自建机房,那迁移的项目就一大堆,S3也在其中之列。

找来找去,第一首选的替代软件是minio,可是万恶的minio团队在这个时间点,已经后台移除了 admin 相关的操作权限

要想用呢,只能用个老版本的:quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z

那只能再找了,于是找到了SeaweedFS,这个软件其实是个彻头彻尾的单文件,但是分布式全集群架构

简单的说,就是一个软件,包含了10几种功能。

而我们呢,其实就要它的一个功能s3,而且要用于生产。网上一大堆的教程都是各种分布式的部署,如果机器足够,大家可以参考网上教程。

我们单台机器,硬盘底层是raid10,然后上层就只提供s3,而且要配置简单,没有什么安全问题,这台机器是直接暴露公网IP的。

那最简单的方法就是Docker compose,而且只放开s3的指定端口:

 1services:
 2  seaweedfs-s3:
 3    image: chrislusf/seaweedfs
 4    container_name: seaweedfs-s3
 5    volumes:
 6      - ./data:/data
 7      - ./config/config.json:/seaweedfs/config.json
 8    ports:
 9      - "127.0.0.1:8333:8333"
10      # - "9333:9333"
11    entrypoint: /bin/sh -c
12    command: |
13      "echo 'Starting SeaweedFS S3 server' && \
14      weed server -dir=/data -volume.max=120 -s3 -s3.config /seaweedfs/config.json"
15    restart: unless-stopped

仔细解释上面的参数:

  • ports 只开了 127.0.0.1:8333 的S3端口,其它都不开,如果需要查看服务状态,可以临时打开9333端口查看,看完再关
  • -volume.max=120,这个务必要注意,seaweed是分卷的,一个卷最多30G,缺省是8个卷。那缺省就是只有240G的容量,我们的硬盘是4T的,剩余3.7TB,那算下来,30*120=3600G=3.6T。这样就对准了,这个参数一定要根据生产的实际情况进行调整.
  • 另外还把config.json的配置文件给mount入docker卷中了,配置文件里放的就是S3的IAM访问权限控制

详细看一下config.json

 1{
 2  "identities": [
 3    {
 4      "name": "admin",
 5      "credentials": [
 6        {
 7          "accessKey": "aaa",
 8          "secretKey": "bbb"
 9        }
10      ],
11      "actions": [
12        "Admin",
13        "Read",
14        "List",
15        "Tagging",
16        "Write"
17      ]
18    },
19    {
20      "name": "goods",
21      "credentials": [
22        {
23          "accessKey": "ccc",
24          "secretKey": "ddd"
25        }
26      ],
27      "actions": [
28        "Read:goods",
29        "Write:goods",
30        "List:goods",
31        "Tagging:goods",
32        "Admin:goods"
33      ]
34    }
35  ]
36}

解释一下,上面定义了一个admin用户,可以对所有s3进行读写和管理。

然后又定义了一个goods用户,它只对goods桶有权限。

那seaweed的桶和权限实际是分开的,管理的时候可以先建桶,然后在配置文件里再配置权限,最后重载docker compose up -d即可

大家肯定也注意到了,端口映射只开了127.0.0.1:8333,这是因为http端口,前面需要套个https才能放到生产环境。

那前置代理https,就套用Caddy好了,配置文件Caddyfile也巨简单, 就三行:

1s3.rendoumi.com {
2  reverse_proxy 127.0.0.1:8333
3}

那我们管理的时候就用minio的客户端mc即可

1mc alias set mys3 https://s3.rendoumi.com aaa bbb
2
3mc ls mys3/goods
4
5mc mb newgoods mys3
6
7mc ls mys3/newgoods

最后,如果要从S3同步文件,那就用 JuiceFS 的 juicesync 这个软件即可。


生产环境Elasticsearch 8单节点Docker-Compose的安装方法
comments powered by Disqus