SeaweedFS 单机二进制部署
[!tip]
适用环境:Linux(Ubuntu/Debian/CentOS)单台服务器,二进制部署,启用 S3 兼容 API。
当前版本:4.32(2026-06)。
许可证:Apache 2.0(商业友好,无 AGPL 约束)。
1. 架构说明
SeaweedFS 由三个核心组件构成,单机部署时三者运行在同一台服务器上:

| 组件 | 端口 | 职责 |
|---|---|---|
| Master | 9333 | 管理卷元数据,分配文件 ID,协调集群 |
| Volume | 8080 | 实际存储文件数据(append-only) |
| Filer | 8888 | 提供文件系统语义、目录树、WebUI |
| S3 API | 8333 | S3 兼容接口,供客户端调用 |
但是一般 SeaweedFS 都是集群搭建的,所以这里也给个集群架构图:

2. 环境准备
2.1 系统要求
- OS:Linux x86_64(Ubuntu 20.04+ / Debian 11+ / CentOS 7+)
- 内存:≥ 1 GB(生产建议 ≥ 4 GB)
- 磁盘:SSD 系统盘 + HDD 数据盘(推荐,见下方存储规划)
- 开放端口:
8080、8333、8888、9333
推荐存储规划(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

可以看到,本例子中新增的硬盘为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

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. 下载并安装二进制
我这里以当前最新版本4.3.2为例:

这里根据自己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

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

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

[!caution]
Redis 在这里只是缓存层,主数据始终在 MySQL。Redis 重启或清空不会丢失元数据,Filer 会自动从 MySQL 重建缓存。如果 Redis 已设置密码,填入
password字段;如果 Redis 有其他业务在使用,建议修改database编号(0~15)避免 key 冲突。如果你是以
MySQL为主要后端,那么你的redis2的enabled必须设为false。SeaweedFS 会把所有enabled = true的存储后端都视为主存储,如果mysql2和redis2同时为true,Filer 启动时会报Filer store is enabled for both mysql2 and redis2错误并崩溃退出。将redis2的enabled设为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-id 和 your-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. 启动服务
-
重新加载 systemd 配置
sudo systemctl daemon-reload -
按顺序启用开机自启
sudo systemctl enable seaweedfs-master seaweedfs-volume seaweedfs-filer -
启动服务(注意顺序: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)。那么就是成功了



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 加密,服务器上不需要开任何额外端口。

如果不想每次都开着一个终端窗口,可以加 -N 参数后台运行:
ssh -N -L 8888:127.0.0.1:8888 user@服务器IP &
用完之后 kill %1 关掉隧道即可。
在上图,你能够看到Filer WebUI中有一个New Folder的按钮,你可以通过这个按钮来创建Bucket。不过你的Bucket必须放在文件夹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. 升级
-
下载新版本(large_disk 版本)并且解压
-
停止服务(反序停止)
sudo systemctl stop seaweedfs-filer sudo systemctl stop seaweedfs-volume sudo systemctl stop seaweedfs-master -
替换二进制
sudo mv weed /usr/local/bin/weed sudo chmod +x /usr/local/bin/weed -
重启服务(正序启动)
sudo systemctl start seaweedfs-master sleep 3 sudo systemctl start seaweedfs-volume sleep 3 sudo systemctl start seaweedfs-filer -
验证版本和类型
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 |
功能模块:
- 集群概览(Cluster Overview):实时展示集群健康状态、节点在线情况、系统统计(总 Volume 数、文件数、存储大小、Volume 大小限制)、数据中心地理分布。
- 节点状态(Node Status):显示 Master、Filer、Volume Server、Message Broker 各节点的运行状态。
- S3 Bucket 管理:查看、创建、删除 S3 Bucket,是目前功能最完整的模块之一。
- Volume 管理:查看 Volume 分布情况,可以对 Volume 执行 Vacuum(垃圾回收)等维护操作。
- 文件浏览:基础的文件系统浏览功能。
- 消息队列管理:管理 Topics、查看 Subscribers 及消费延迟、查看分区分布统计。
- 后台任务(Workers):管理和监控 Admin 下发的维护任务,包括检测间隔、超时、并发等参数配置。
下面开始部署:
-
生成
security.toml文件这个文件将存放AdminUI的管理员的账号密码。通过如下语句生成模版文件:
weed scaffold -config=security -output=/etc/seaweedfs执行之后会在
/etc/seaweedfs/下生成security.toml。由于我的filer.toml等文件都是放在/etc/seaweedfs/文件夹下的,所以这里也放在这:
-
把
security.toml里的[admin]部分
[admin] user = "admin" password = "your_strong_password_here" [admin.readonly] user = "" password = "" -
创建数据目录
weed admin启动时需要一个-dataDir目录来持久化存储一些数据,主要包括:- Session 信息:登录后的会话 cookie 密钥,如果没有持久化,每次重启 Admin UI 所有已登录的会话都会失效,需要重新登录
- Admin UI 自身的配置和状态数据:比如一些界面偏好、任务记录等
这个数据目录就是存放这些数据的,如果不创建,默认在内存中,这里我们还是创建:
sudo mkdir -p /var/lib/seaweedfs-admin sudo chown seaweedfs:seaweedfs /var/lib/seaweedfs-admin -
写入 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 -
启动服务
sudo systemctl daemon-reload sudo systemctl enable --now seaweedfs-admin
最后访问:


[!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;
}
Comments