SeaweedFS 单机二进制部署

[!tip]

适用环境:Linux(Ubuntu/Debian/CentOS)单台服务器,二进制部署,启用 S3 兼容 API。

当前版本:4.32(2026-06)。

许可证:Apache 2.0(商业友好,无 AGPL 约束)。

1. 架构说明

SeaweedFS 由三个核心组件构成,单机部署时三者运行在同一台服务器上:

单机SeaweedFS部署架构

组件 端口 职责
Master 9333 管理卷元数据,分配文件 ID,协调集群
Volume 8080 实际存储文件数据(append-only)
Filer 8888 提供文件系统语义、目录树、WebUI
S3 API 8333 S3 兼容接口,供客户端调用

但是一般 SeaweedFS 都是集群搭建的,所以这里也给个集群架构图:

集群SeaweedFS部署架构

2. 环境准备

2.1 系统要求

  • OS:Linux x86_64(Ubuntu 20.04+ / Debian 11+ / CentOS 7+)
  • 内存:≥ 1 GB(生产建议 ≥ 4 GB)
  • 磁盘:SSD 系统盘 + HDD 数据盘(推荐,见下方存储规划)
  • 开放端口:8080833388889333

推荐存储规划(SSD + HDD 混合):

存放位置 内容 原因
SSD(系统盘) 主程序 /usr/local/bin/weed 程序启动后即加载进内存,磁盘位置无影响
SSD(系统盘) Master 元数据 /data/seaweedfs/master 数据量极小,但每次文件分配都需访问,延迟敏感
SSD(系统盘) MySQL 数据目录 Filer 元数据主存储,查询频繁,SSD 显著提升响应速度
SSD(系统盘) Redis 本身在内存中运行,落盘位置影响不大
HDD(数据盘) Volume 数据目录 文件实际内容,顺序写入为主,HDD 性能完全够用,且容量大、成本低

简单来说:元数据走 SSD,文件数据走 HDD,两者职责分离,既保证了访问性能,又最大化利用 HDD 的大容量。

2.2 挂载 HDD 数据盘(新盘)

2.2.1 确认需要操作的磁盘

如果 HDD 尚未挂载,先完成挂载并设置开机自动挂载。

在挂载之前,先使用命令fdisk -l命令来查看磁盘和分区信息,根据大小及其他信息确认需要操作的磁盘

fdisk -l

fdisk命令查看磁盘和分区信息

可以看到,本例子中新增的硬盘为sdb。

2.2.2 创建分区

# 这里 sdx为您需要操作的分区,如本例子为sdb。
fdisk /dev/sdx

在fdisk中输入n,然后多次回车使用默认值,看到Created a new partition 1 of type 'Linux' ....后,输入w写入到分区表:

创建分区

2.2.3 格式化分区

再次输入fdisk -l命令确认新创建的分区:

再次查看分区信息

可以看到,本例子中新增的分区为sdb1。

输入以下命令格式化磁盘为ext4:

# sdxx为您看到的分区,如本例子为sdb1
mkfs.ext4 /dev/sdxx

格式化分区

2.2.4 挂载磁盘

创建一个空目录用作挂载磁盘:

# 路径可以任意,但是需要为空目录,本例子为/mnt/sdb
mkdir /mnt/sdb

由于挂载磁盘的sdx顺序可能会改变,如改变可能会导致系统无法启动,所以需要使用UUID挂载。输入以下命令获取blkid:

blkid

查看块设备属性

可以看到,本例子中,磁盘的UUID为33672bf2-2a56-4a96-acab-c9b2a86c6d2b

最后输入vim /etc/fstab编辑fstab文件,在其中插入,最后保存即可:

vim /etc/fstab
#注:UUID需要替换为您从blkid命令中获取的;/mnt/sdb1挂载路径也需要替换为您实际的
UUID="33672bf2-2a56-4a96-acab-c9b2a86c6d2b" /mnt/sdb1 ext4 defaults 0 0

写入fstab实现开机自动挂载

2.2.5 重启服务器

最后重启服务器即可生效。

2.3 创建系统用户和目录

# 创建专用用户(不允许登录)
sudo useradd -r -s /bin/false seaweedfs

# SSD 上:Master 元数据目录(访问频繁,放系统盘)
sudo mkdir -p /data/seaweedfs/master

# HDD 上:Volume 文件数据目录(文件实际内容,放数据盘)
sudo mkdir -p /mnt/sdb1/data/seaweedfs/volumes

# 创建配置目录(系统盘)
sudo mkdir -p /etc/seaweedfs

# 设置目录权限
sudo chown -R seaweedfs:seaweedfs /data/seaweedfs
sudo chown -R seaweedfs:seaweedfs /mnt/sdb1/data/seaweedfs
sudo chown -R seaweedfs:seaweedfs /etc/seaweedfs

创建系统用户和目录

3. 下载并安装二进制

SeaweedFS二进制包下载地址

我这里以当前最新版本4.3.2为例:

SeaweedFS版本

这里根据自己CPU的架构选择合适的包就可以了:

uname -m

常见输出:

输出 架构
x86_64 AMD64 / Intel 64(即常说的 x86_64)
aarch64 ARM64
armv7l 32位 ARM
i686 32位 x86

由于我的CPU是x86_64的,所以这里玩下载amd相关的包就可以了。

3.1 普通版本 vs large_disk 版本

SeaweedFS 的每个 Release 都提供两种二进制,区别在于单个 Volume 文件的最大容量上限

版本 文件名 偏移量位宽 单卷最大容量 启动日志标识
普通版本 linux_amd64.tar.gz 4 字节 ~30 GB Start Seaweed Master 30GB
large_disk 版本 linux_amd64_large_disk.tar.gz 5 字节 ~8 TB Start Seaweed Master 8000GB

[!important]

  • 两个版本的磁盘数据格式不兼容,部署后不能随意切换,若要迁移需要停机重建索引。
  • 30 GB / 8 TB 是单个卷文件的上限,不是总存储上限——总容量取决于磁盘大小,数据会自动分散到多个卷。
  • 建议直接选 large_disk 版本,一步到位,避免后期因单卷写满而被迫停机迁移。

3.2 下载安装(large_disk 版本,推荐)

下载指定二进制文件

下载下来之后,放到任意目录之后执行解压命令:

tar  -zxvf linux_amd64_large_disk.tar.gz

这个解压出来就只有一个weed的文件。之后把这个文件移动到系统路径下:

# 安装到系统路径
sudo mv weed /usr/local/bin/weed
sudo chmod +x /usr/local/bin/weed

3.3 验证安装

weed version

如果看见如下输出,那么就成功了:

验证安装

这里你还看见了8000GB的字样,说明确实是安装的 large_disk版本。

4. 配置文件

4.1 Filer 元数据后端选择

Filer 负责管理文件路径、目录树、文件名到内部 ID 的映射,这部分元数据需要持久化存储。SeaweedFS 支持多种后端:

后端 优点 缺点 适用场景
LevelDB2(默认) 无需额外部署 只支持单 Filer,备份需停服 快速测试、极简部署
MySQL(推荐) 备份成熟、支持多 Filer 需要 MySQL 已有 MySQL 的生产环境
PostgreSQL 同 MySQL 需要 PostgreSQL 已有 PG 的生产环境
SQLite 单文件,易迁移 只支持单 Filer,并发差 轻量单机场景

本文档使用 MySQL 作为主存储 + Redis 作为读缓存 的组合方案。优点是备份直接纳入现有 MySQL 备份流程,文件数据和元数据备份策略完全解耦;Redis 缓存热点元数据,减少 MySQL 查询压力。

4.2 MySQL 初始化

在 MySQL 中创建专用数据库和用户:

CREATE DATABASE seaweedfs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'seaweedfs'@'localhost' IDENTIFIED BY 'your-db-password';
GRANT ALL PRIVILEGES ON seaweedfs.* TO 'seaweedfs'@'localhost';
FLUSH PRIVILEGES;

[!tip]

Filer 启动时会自动建表,所以这里无需手动执行 DDL。

4.3 生成并配置 filer.toml

使用如下命令生成默认配置模板:

sudo -u seaweedfs weed scaffold -config=filer | sudo tee /etc/seaweedfs/filer.toml > /dev/null

编辑配置文件:

vim /etc/seaweedfs/filer.toml

禁用 LevelDB,启用 MySQL Redis:

# 1. 禁用默认的 LevelDB
[leveldb2]
enabled = false

# 2. 启用 MySQL,注意,这里是使用的mysql2这个配置
[mysql2]
enabled            = true
hostname           = "localhost"
port               = 3306
database           = "seaweedfs"
username           = "seaweedfs"
password           = "your-db-password"
connection_max_idle = 5
connection_max_open = 75

# 3. 配置 Redis 作为元数据读缓存(注意:enabled 必须为 false)
[redis2]
enabled  = false
address  = "localhost:6379"
password = ""
database = 0

禁用默认的 LevelDB

如果你是以MySQL为主要后端,你就开启如下配置:

配置并启用MySQL配置

如果你是以Redis为主要后端,那么你可以开启如下配置:

配置并启用Redis配置

[!caution]

Redis 在这里只是缓存层,主数据始终在 MySQL。Redis 重启或清空不会丢失元数据,Filer 会自动从 MySQL 重建缓存。如果 Redis 已设置密码,填入 password 字段;如果 Redis 有其他业务在使用,建议修改 database 编号(0~15)避免 key 冲突。

如果你是以MySQL为主要后端,那么你的 redis2enabled 必须设为 false。SeaweedFS 会把所有 enabled = true 的存储后端都视为主存储,如果 mysql2redis2 同时为 true,Filer 启动时会报 Filer store is enabled for both mysql2 and redis2 错误并崩溃退出。将 redis2enabled 设为 false 后,SeaweedFS 会自动将其作为缓存层使用,无需显式启用。

设置配置文件权限:

sudo chmod 640 /etc/seaweedfs/filer.toml
sudo chown seaweedfs:seaweedfs /etc/seaweedfs/filer.toml

4.4 创建 S3 访问凭证配置

sudo tee /etc/seaweedfs/s3.json > /dev/null <<'EOF'
{
  "identities": [
    {
      "name": "admin",
      "credentials": [
        {
          "accessKey": "your-access-key-id",
          "secretKey": "your-secret-access-key"
        }
      ],
      "actions": ["Admin", "Read", "Write", "List", "Tagging", "ReadAcp", "WriteAcp"]
    }
  ]
}
EOF

请将 your-access-key-idyour-secret-access-key 替换为你自己的密钥,建议使用随机字符串:

# 生成随机密钥的参考命令
openssl rand -hex 16   # 生成 32 位 access key
openssl rand -hex 32   # 生成 64 位 secret key

设置权限(避免密钥泄露):

sudo chmod 640 /etc/seaweedfs/s3.json
sudo chown seaweedfs:seaweedfs /etc/seaweedfs/s3.json

5. 创建 systemd 服务

5.1 Master 服务

sudo tee /etc/systemd/system/seaweedfs-master.service > /dev/null <<'EOF'
[Unit]
Description=SeaweedFS Master Server
After=network.target
Documentation=https://github.com/seaweedfs/seaweedfs

[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/bin/weed master \
    -mdir=/data/seaweedfs/master \
    -port=9333 \
    -ip=127.0.0.1 \
    -defaultReplication=000 \
    -volumeSizeLimitMB=1024
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

参数说明:

参数 说明
-mdir Master 元数据存储目录,放 SSD 系统盘,访问频繁且数据量极小
-port Master 监听端口(默认 9333)
-ip 单机部署绑定 127.0.0.1,若需集群通信改为实际 IP
-defaultReplication 复制策略,单机必须用 000(无副本),多机部署后再按需调整
-volumeSizeLimitMB Master 停止向某卷写入新数据的阈值(MB),30000 = 30GB,达到后自动创建新卷。该值不影响总存储容量,只影响单个卷文件大小和卷的数量

5.2 Volume 服务

sudo tee /etc/systemd/system/seaweedfs-volume.service > /dev/null <<'EOF'
[Unit]
Description=SeaweedFS Volume Server
After=network.target seaweedfs-master.service
Requires=seaweedfs-master.service
Documentation=https://github.com/seaweedfs/seaweedfs

[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/bin/weed volume \
    -master=127.0.0.1:9333 \
    -port=8080 \
    -dir=/mnt/sdb1/data/seaweedfs/volumes \
    -max=50 \
    -ip=127.0.0.1
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

参数说明:

参数 说明
-master Master 地址
-port Volume Server 监听端口
-dir 文件数据存储目录,指向 HDD 挂载点,文件实际内容全部写入此处
-max 最大卷数量,每卷最大 30GB(由 Master -volumeSizeLimitMB 决定),50 卷 = 最多 1.5TB;HDD 有多大就调多大,后续可动态改动
-ip 单机绑定 127.0.0.1

新增 HDD:若后续挂载了第二块 HDD(如 /mnt/sdb2),用逗号追加即可,无需停机迁移旧数据:

-dir=/mnt/sdb1/data/seaweedfs/volumes,/mnt/sdb2/data/seaweedfs/volumes
-max=50,50

5.3 Filer 服务(含 S3 API)

sudo tee /etc/systemd/system/seaweedfs-filer.service > /dev/null <<'EOF'
[Unit]
Description=SeaweedFS Filer Server with S3 API
After=network.target seaweedfs-master.service seaweedfs-volume.service
Requires=seaweedfs-master.service seaweedfs-volume.service
Documentation=https://github.com/seaweedfs/seaweedfs

[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/bin/weed filer \
    -master=127.0.0.1:9333 \
    -port=8888 \
    -ip=127.0.0.1 \
    -s3 \
    -s3.port=8333 \
    -s3.config=/etc/seaweedfs/s3.json
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

参数说明:

参数 说明
-master Master 地址
-port Filer 监听端口(WebUI 也在此端口)
-s3 启用 S3 API
-s3.port S3 API 监听端口(8333,与 MinIO 默认端口一致)
-s3.config S3 凭证配置文件路径

[!warning]

注意,这里-ip配置给的是127.0.0.1,也就是说只监听本机回环地址,从外界访问时会被拒绝的,就算你后面开放了8888端口,从外界也是无法访问的。

同时一般也不建议把Filer WebUI暴露到公网中。如果你真的想要在外部访问Filer WebUI,这里的-ip你可以给0.0.0.0

6. 启动服务

  1. 重新加载 systemd 配置

    sudo systemctl daemon-reload
    
  2. 按顺序启用开机自启

    sudo systemctl enable seaweedfs-master seaweedfs-volume seaweedfs-filer
    
  3. 启动服务(注意顺序:master → volume → filer)

    sudo systemctl start seaweedfs-master
    

    启动master之后你可以等一会,比如说10s,等 Master 完全起来了之后,再执行:

    sudo systemctl start seaweedfs-volume
    

    启动 Volume 之后,也要等一会,等待 Volume 注册到 Master 之后,再执行:

    sudo systemctl start seaweedfs-filer
    

6.1 检查服务状态

sudo systemctl status seaweedfs-master
sudo systemctl status seaweedfs-volume
sudo systemctl status seaweedfs-filer

如果所有服务应显示 Active: active (running)。那么就是成功了

Master服务成功启动

Volume服务成功启动

Filer服务成功启动

6.2 查看服务日志

查看 Master 日志

sudo journalctl -u seaweedfs-master -n 50

实时查看 Filer 日志(含 S3 请求)

sudo journalctl -u seaweedfs-filer -f

查看所有 SeaweedFS 日志

sudo journalctl -u "seaweedfs-*" -n 100

7. 验证部署

7.1 检查集群状态

查看集群拓扑(Master Web API):

curl http://localhost:9333/cluster/status

正常应该响应如下数据:

{
    "IsLeader": true,
    "Leader": "127.0.0.1:9333.19333"
}

查看卷列表:

curl http://localhost:9333/vol/status

正常响应如下:

{
    "Version": "8000GB 4.32 78da9572aee7589f773ca09a987b494888829ba3",
    "Volumes": {
        "DataCenters": {
            "DefaultDataCenter": {
                "DefaultRack": {
                    "127.0.0.1:8080": null
                }
            }
        },
        "Free": 50,
        "Max": 50
    }
}

7.2 使用 AWS CLI 测试 S3 API

安装 AWS CLI(如未安装):

# Ubuntu/Debian
sudo apt-get install -y awscli

配置 AWS CLI 指向本地 SeaweedFS:

aws configure set aws_access_key_id your-access-key-id
aws configure set aws_secret_access_key your-secret-access-key
aws configure set default.region us-east-1
aws configure set default.output json

测试基本操作:

# 创建 bucket
aws --endpoint-url http://localhost:8333 s3 mb s3://test-bucket

# 列出所有 bucket
aws --endpoint-url http://localhost:8333 s3 ls

# 上传文件
echo "Hello SeaweedFS" > /tmp/test.txt
aws --endpoint-url http://localhost:8333 s3 cp /tmp/test.txt s3://test-bucket/test.txt

# 列出 bucket 内容
aws --endpoint-url http://localhost:8333 s3 ls s3://test-bucket/

# 下载文件
aws --endpoint-url http://localhost:8333 s3 cp s3://test-bucket/test.txt /tmp/downloaded.txt
cat /tmp/downloaded.txt

# 删除文件
aws --endpoint-url http://localhost:8333 s3 rm s3://test-bucket/test.txt

7.3 访问 Filer WebUI

在浏览器中打开(需要服务器允许访问 8888 端口):

http://<服务器IP>:8888/

可以通过 WebUI 浏览目录和文件。

不过之前说过了,这个不建议暴露到公网上,因为它没有任何认证机制,任何人都可以直接访问到文件并且操作。

如果你实在是想访问,你可以用SSH隧道的方式来访问。

在你自己的电脑的控制台上输入如下命令:

ssh -L 8888:127.0.0.1:8888 user@服务器IP

这条命令会正常登录到服务器(和普通 ssh 一样),保持这个终端窗口不要关,然后打开本地浏览器访问:

http://localhost:8888

就能看到 SeaweedFS 的 WebUI 了,全程走 SSH 加密,服务器上不需要开任何额外端口

默认Filer WebUI

如果不想每次都开着一个终端窗口,可以加 -N 参数后台运行:

ssh -N -L 8888:127.0.0.1:8888 user@服务器IP &

用完之后 kill %1 关掉隧道即可。


在上图,你能够看到Filer WebUI中有一个New Folder的按钮,你可以通过这个按钮来创建Bucket。不过你的Bucket必须放在文件夹buckets下,也就是你必须在根目录先创建一个buckets文件夹:

创建buckets文件夹

后续在这个文件夹下所创建的所有目录其实都是桶名称

创建痛

如图所示,你这里就拥有两个桶,一个是test,另外一个是test-bucket

其实如果你在之前使用了 AWS CLI 来创建桶的时候,你会发现默认就是创建了/buckets/xxx,他会自动给你创建buckets文件夹。同时,你用 AWS CLI 来列出所有 bucket 的时候,其实也只会列出文件夹buckets下的所有文件夹。

8. S3 API 对外暴露(Nginx 反代)

S3 API 是业务接入的唯一入口,建议通过 Nginx 反代对外暴露,不要直接暴露 8333 端口。

Nginx核心配置文件如下:

server {
    listen 80;
    server_name s3.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:8333;

        # 关键配置:禁止 Nginx 将 HEAD 请求转换为 GET
        # 不加这行会导致所有 HEAD 请求签名验证失败返回 403
        proxy_cache_convert_head off;

        # 使用 HTTP/1.1 保持长连接
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # 使用 $http_host 保留原始 Host 头(包含端口),不能用 $host
        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_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Port $server_port;

        # 大文件上传支持
        client_max_body_size 0;
        proxy_request_buffering off;
        proxy_buffering off;

        # 超时设置(大文件传输)
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_send_timeout 300;
    }
}

各端口安全策略汇总

端口 服务 对外策略 访问方式
9333 Master 不对外 仅服务器内部
8080 Volume 不对外 仅服务器内部
8333 S3 API 如需对外,请通过 Nginx 反代对外 业务客户端走域名访问
8888 Filer WebUI 不对外 SSH 隧道本地访问

9. 常用运维操作

9.1 日志管理(journald 全局配置)

SeaweedFS 三个服务的日志均写入 systemd journal。默认情况下 journal 没有明确的占用上限,会自动使用文件系统剩余空间的 10%,长期运行可能悄悄占满 SSD,建议提前配置全局限制。

[!caution]

journald.conf 是全局配置,对系统上所有服务生效,不只是 SeaweedFS。

sudo vim /etc/systemd/journald.conf

取消注释并修改以下几行(其余保持默认即可):

[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=500M
SystemMaxFileSize=50M
SystemMaxFiles=100
MaxRetentionSec=2week

参数说明:

参数 建议值 含义
Storage=persistent persistent 日志持久化写入磁盘,重启后不丢失
Compress=yes yes 压缩旧日志文件,节省空间
SystemMaxUse 500M journal 总占用上限,超出自动删最旧的日志
SystemMaxFileSize 50M 单个日志文件最大大小,超出自动轮转
SystemMaxFiles 100 最多保留 100 个日志文件
MaxRetentionSec 2week 超过 2 周的日志自动删除

[!tip]

SystemMaxUse 是最关键的参数。如果 SSD 空间宽裕可以设为 1G,空间紧张则设为 200M

应用配置并清理存量旧日志:

# 重启 journald 使配置生效
sudo systemctl restart systemd-journald

# 立即清理超出限制的旧日志
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=14d

# 验证当前占用
journalctl --disk-usage

常用日志查看命令:

# 实时查看所有 SeaweedFS 日志
sudo journalctl -u "seaweedfs-*" -f

# 查看指定服务最近 100 行
sudo journalctl -u seaweedfs-filer -n 100 --no-pager

# 查看某个时间段的日志
sudo journalctl -u seaweedfs-master --since "2026-06-10 00:00:00" --until "2026-06-10 06:00:00"

# 只看错误级别日志
sudo journalctl -u "seaweedfs-*" -p err

9.2 使用 weed shell 管理集群

进入交互式管理 shell:

weed shell -master=localhost:9333

常用命令(在 weed shell 内):

> volume.list            # 列出所有卷
> volume.balance         # 均衡卷分布
> volume.fix.replication # 修复复制
> fs.du -fullPath /      # 查看磁盘使用
> s3.bucket.list         # 列出 S3 bucket
> exit

10. 升级

  1. 下载新版本(large_disk 版本)并且解压

  2. 停止服务(反序停止)

    sudo systemctl stop seaweedfs-filer
    sudo systemctl stop seaweedfs-volume
    sudo systemctl stop seaweedfs-master
    
  3. 替换二进制

    sudo mv weed /usr/local/bin/weed
    sudo chmod +x /usr/local/bin/weed
    
  4. 重启服务(正序启动)

    sudo systemctl start seaweedfs-master
    sleep 3
    sudo systemctl start seaweedfs-volume
    sleep 3
    sudo systemctl start seaweedfs-filer
    
  5. 验证版本和类型

    weed version
    sudo journalctl -u seaweedfs-master -n 5 | grep "Start Seaweed Master"
    

    应显示 8000GB,确认 large_disk 版本生效。

11. Weed AdminUI(推荐部署)

[!warning]

官方 Wiki 明确标注 Admin UI 目前仍在开发中(Work in Progress),部分功能可用,部分尚未完善,后续可能有变动。

weed admin 是 SeaweedFS 内置的 Web 管理界面,通过一个独立进程提供集群的可视化管理能力,默认监听 23646 端口。它会自动从 Master 节点发现集群中的 Filer,同时在 HTTP 端口 +10000 处启动一个 gRPC 服务,用于 Worker 连接。

启动参数:

参数 默认值 说明
-port 23646 监听端口
-masters localhost:9333 Master 地址,多个用逗号分隔
-dataDir 持久化存储目录,不设置则仅保存在内存中
-adminUser admin 管理员用户名
-adminPassword 管理员密码,不设置则无需鉴权
-readOnlyUser 只读用户名(可选)
-readOnlyPassword 只读用户密码,需同时设置 -adminPassword
-urlPrefix 子路径部署前缀,如 /seaweedfs

功能模块:

  1. 集群概览(Cluster Overview):实时展示集群健康状态、节点在线情况、系统统计(总 Volume 数、文件数、存储大小、Volume 大小限制)、数据中心地理分布。
  2. 节点状态(Node Status):显示 Master、Filer、Volume Server、Message Broker 各节点的运行状态。
  3. S3 Bucket 管理:查看、创建、删除 S3 Bucket,是目前功能最完整的模块之一。
  4. Volume 管理:查看 Volume 分布情况,可以对 Volume 执行 Vacuum(垃圾回收)等维护操作。
  5. 文件浏览:基础的文件系统浏览功能。
  6. 消息队列管理:管理 Topics、查看 Subscribers 及消费延迟、查看分区分布统计。
  7. 后台任务(Workers):管理和监控 Admin 下发的维护任务,包括检测间隔、超时、并发等参数配置。

下面开始部署:

  1. 生成security.toml文件

    这个文件将存放AdminUI的管理员的账号密码。通过如下语句生成模版文件:

    weed scaffold -config=security -output=/etc/seaweedfs
    

    执行之后会在 /etc/seaweedfs/ 下生成 security.toml。由于我的filer.toml等文件都是放在/etc/seaweedfs/ 文件夹下的,所以这里也放在这:

    security.toml存放位置

  2. security.toml 里的 [admin] 部分

    配置admin账号密码

    [admin]
    user = "admin"
    password = "your_strong_password_here"
    
    [admin.readonly]
    user = ""
    password = ""
    
  3. 创建数据目录

    weed admin 启动时需要一个 -dataDir 目录来持久化存储一些数据,主要包括:

    • Session 信息:登录后的会话 cookie 密钥,如果没有持久化,每次重启 Admin UI 所有已登录的会话都会失效,需要重新登录
    • Admin UI 自身的配置和状态数据:比如一些界面偏好、任务记录等

    这个数据目录就是存放这些数据的,如果不创建,默认在内存中,这里我们还是创建:

    sudo mkdir -p /var/lib/seaweedfs-admin
    sudo chown seaweedfs:seaweedfs /var/lib/seaweedfs-admin
    
  4. 写入 systemd 服务文件

    sudo tee /etc/systemd/system/seaweedfs-admin.service > /dev/null << 'EOF'
    [Unit]
    Description=SeaweedFS Admin UI
    Documentation=https://github.com/seaweedfs/seaweedfs/wiki/Admin-UI
    After=network.target seaweedfs-master.service seaweedfs-filer.service
    Requires=seaweedfs-filer.service
    
    [Service]
    Type=simple
    User=seaweedfs
    Group=seaweedfs
    ExecStart=/usr/local/bin/weed -config_dir=/etc/seaweedfs admin \
        -masters=127.0.0.1:9333 \
        -port=23646 \
        -dataDir=/var/lib/seaweedfs-admin
    Restart=on-failure
    RestartSec=5
    LimitNOFILE=65536
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  5. 启动服务

    sudo systemctl daemon-reload
    sudo systemctl enable --now seaweedfs-admin
    

最后访问:

AdminUI登陆界面

详细管理界面

[!tip]

如果你要公网访问,建议这个Weed AdminUI也建议使用Nginx部署。这个有鉴权,相对来说安全很多。

Nginx配置:

location / {
    proxy_pass http://127.0.0.1:23646;
    proxy_http_version 1.1;

    # WebSocket 支持(Admin UI 实时刷新依赖)
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection "upgrade";

    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_read_timeout    300s;
    proxy_send_timeout    300s;
    proxy_connect_timeout 10s;
    proxy_buffering       off;
}