使用 Seaweedfs 代替 Minio
文章目录
原因
因为众所周知的原因Minio切换开源项目为仅维护状态,所以需要寻找替代方案来继续使用类似S3的存储服务。
在论坛和推上有不少人推荐了Seaweedfs作为替代方案。
在这里记录一下Debian 13系统下,使用Seaweedfs代替Minio的过程。
安装Seaweedfs
1. 下载最新二进制文件 (请根据实际情况替换版本号)
wget https://github.com/seaweedfs/seaweedfs/releases/download/4.01/linux_amd64_full.tar.gz
2. 解压并移动到系统路径
tar -xvf linux_amd64_full.tar.gz
sudo cp weed /usr/local/bin/
sudo chmod +x /usr/local/bin/weed
3. 创建数据存储目录
sudo mkdir -p /opt/seaweedfs/master
sudo mkdir -p /opt/seaweedfs/volume
sudo mkdir -p /opt/seaweedfs/filer
sudo mkdir -p /etc/seaweedfs
4. 配置 Systemd 服务
4.1 创建 Master 服务 /etc/systemd/system/seaweedfs-master.service:
[Unit]
Description=SeaweedFS Master
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/weed master \
-mdir=/opt/seaweedfs/master \
-port=9333 \
-ip=0.0.0.0 \
-defaultReplication=000
Restart=always
[Install]
WantedBy=multi-user.target
4.2 创建 Volume 服务 /etc/systemd/system/seaweedfs-volume.service:
[Unit]
Description=SeaweedFS Volume
After=network.target seaweedfs-master.service
[Service]
Type=simple
User=root
# max=0 表示根据磁盘空间自动计算最大卷数
ExecStart=/usr/local/bin/weed volume \
-dir=/opt/seaweedfs/volume \
-mserver=127.0.0.1:9333 \
-port=8080 \
-max=0
Restart=always
[Install]
WantedBy=multi-user.target
4.3 创建 Filer 服务 /etc/systemd/system/seaweedfs-filer.service:
[Unit]
Description=SeaweedFS Filer
After=network.target seaweedfs-master.service
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/weed filer \
-master=127.0.0.1:9333 \
-port=8888 \
-s3 \
-s3.port=8333
# -s3 参数直接开启了 S3 兼容网关,端口 8333
Restart=always
[Install]
WantedBy=multi-user.target
4.4 启动服务
# 重载配置
sudo systemctl daemon-reload
# 启动并设置开机自启
sudo systemctl enable --now seaweedfs-master
sudo systemctl enable --now seaweedfs-volume
sudo systemctl enable --now seaweedfs-filer
# 检查状态
systemctl status seaweedfs-filer
5.迁移minio数据
5.1 安装 Rclone
sudo apt update
sudo apt install rclone -y
5.2 配置 Rclone
运行命令rclone config,添加 Minio 和 Seaweedfs 的配置。
- 输入 n 新建
- Name 输入: minio_old
- Storage 类型选 s3 (Amazon S3 Compliant)
- Provider 选 Minio
- access_key_id: 输入你 MinIO 的 Access Key
- secret_access_key: 输入你 MinIO 的 Secret Key
- endpoint: 输入 MinIO 的地址 (例如 http://192.168.1.100:9000)
- 其他选项默认回车即可
再次输入 n 新建
- Name 输入: seaweedfs_new
- Storage 类型选 s3
- Provider 选 SeaweedFS或者Other (SeaweedFS 兼容通用 S3)
- access_key_id: 默认为空,如果在启动时未配置鉴权,可留空;或者配置 weed s3 -config 指定的账号(因暂时未配置鉴权,此处留空)
- 注:SeaweedFS S3 默认允许匿名读写,建议在正式环境配置 security.toml,迁移测试阶段可先跳过
- secret_access_key: 同上
- endpoint: 输入 SeaweedFS S3 地址 (例如 http://127.0.0.1:8333)
- 其他选项默认回车
5.3 迁移数据
# --progress 显示进度条
# --transfers 16 增加并发数 (根据网络情况调整)
rclone sync minio_old: seaweedfs_new: --progress --transfers=16 --checkers=16
注意:sync 会让目标端完全即时同步源端状态(即如果源端删除了文件,目标端也会删除)。如果不希望删除目标端已有的额外文件,请使用 copy 命令。
rclone copy minio_old: seaweedfs_new: --progress
也可以只迁移单个桶的数据:
rclone copy minio_old:my-images seaweedfs_new:my-images --progress
5.4 验证迁移结果
rclone size minio_old:my-images
rclone size seaweedfs_new:my-images
6. 开启 SeaweedFS S3 认证
6.1 创建 /etc/seaweedfs/s3.json:
{
"identities": [
{
"name": "admin",
"credentials": [
{
"accessKey": "你的AccessKey",
"secretKey": "你的SecretKey"
}
],
"actions": [
"Admin",
"Read",
"Write"
]
}
]
}
6.2 修改 Filer 服务 /etc/systemd/system/seaweedfs-filer.service:
[Unit]
Description=SeaweedFS Filer
After=network.target seaweedfs-master.service
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/weed filer -s3 -s3.config=/etc/seaweedfs/s3.json \
-master=127.0.0.1:9333 \
-port=8888 \
-s3 \
-s3.port=8333
# -s3 参数直接开启了 S3 兼容网关,端口 8333
Restart=always
[Install]
WantedBy=multi-user.target
6.3 重启 Filer 服务
sudo systemctl daemon-reload
sudo systemctl restart seaweedfs-filer
7. 更新Rclone配置
重新运行rclone config,修改 seaweedfs_new 的 access_key_id 和 secret_access_key 为刚才配置的认证信息。
或者直接编辑~/.config/rclone/rclone.conf文件:
[seaweedfs_new]
type = s3
provider = SeaweedFS
endpoint = http://127.0.0.1:8333
acl = public-read-write
access_key_id = 你的AccessKey
secret_access_key = 你的SecretKey
8. 更新Nginx配置
之前使用Minio时候通过nginx反代可以使用域名方式访问,现在改为Seaweedfs服务。
# ---------------------------------------------------
# 1. S3 接口 + Web 访问 (s3.example.com)
# 用于 Rclone 连接,以及对外图片展示
# ---------------------------------------------------
server {
listen 80;
server_name s3.example.com;
client_max_body_size 0;
# 场景 A: 浏览器访问文件 (GET 请求) -> 走 Filer (8888) 为了速度和免密
# 只有 GET/HEAD 请求才重写路径去 Filer
location / {
if ($request_method = GET) {
rewrite ^/(.*)$ /buckets/$1 break;
proxy_pass http://127.0.0.1:8888;
}
# 场景 B: S3 客户端操作 (PUT/DELETE/LIST) -> 走 S3 (8333) 为了鉴权
# 如果不是 GET,说明是上传或管理,交给 S3 端口处理权限
if ($request_method != GET) {
proxy_pass http://127.0.0.1:8333;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# ---------------------------------------------------
# 2. 管理后台 (admin.example.com)
# 用于查看 SeaweedFS 自带的网页管理界面
# ---------------------------------------------------
server {
listen 80;
server_name admin.example.com;
location / {
# 【关键安全策略】开启 Basic Auth
auth_basic "SeaweedFS Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8888; # 原样反代 Filer
proxy_set_header Host $host;
}
}
BTW: .htpasswd生成方法:
sudo apt install apache2-utils -y
htpasswd -c /etc/nginx/.htpasswd your_username
相似文章
文章作者 pengxiaochao
上次更新 2025-12-05
许可协议 不允许任何形式转载。