在WSL2 Ubuntu中部署FastDFS服务的完整指南

📖 前言

最近,Huazie 在开发文件服务器项目【FleaFS】,使用到了 FastDFS 来作为底层文件管理服务。为了方便本地测试,便部署了 FastDFS 的服务。

由于笔者的系统是 Windows 11 家庭版,因此本篇教程指南将指导大家在 WSL2 Ubuntu 子系统中直接安装和配置 FastDFS 服务,无需 Docker虚拟机

方案特点

  • ✅ 原生 Linux 环境部署
  • ⚡ 高性能低延迟
  • 🔄 与 Windows 文件系统无缝互通

🛠️ 环境准备

1. 系统要求

组件 要求
Windows版本 Windows 10 2004+ 或 Windows 11
WSL版本 WSL2
内存 至少2GB空闲
磁盘空间 至少5GB可用空间

如果本地的WSL版本较低,可以查看【官方文档】进行手动更新。

2. Ubuntu应用

进入 Micorsoft 应用市场,搜索 Ubuntu,选择 20.04 LTS 以上的版本安装即可。

安装好了,本地系统可搜索Ubuntu应用【笔者本地安装的是 Ubuntu 24.04.2 LTS

🚀 安装服务

1. 更新系统

1
sudo apt update && sudo apt upgrade -y

2. 安装编译依赖

1
sudo apt install -y git gcc make perl libperl-dev

3. 下载源码

上述系统更新和编译依赖安装好了之后,我们就需要先后输入下面命令来克隆fastdfs相关的项目:

1
2
3
git clone https://github.com/happyfish100/libfastcommon.git
git clone https://github.com/happyfish100/libserverframe.git
git clone https://github.com/happyfish100/fastdfs.git

如果上述命令执行后,提示未找到命令,则通过 sudo apt install git 安装即可。多数情况下,WSLUbuntu 环境会默认配备 GitVim 等常用工具,以便于快速使用。

4. 编译安装

1
2
3
4
5
6
7
8
9
10
11
# 安装libfastcommon
cd libfastcommon
sudo ./make.sh && sudo ./make.sh install

# 安装libserverframe
cd libserverframe
sudo ./make.sh && sudo ./make.sh install

# 安装FastDFS
cd ../fastdfs
sudo ./make.sh && sudo ./make.sh install

🔧 配置服务

1. 设置配置文件

在上述的 fastdfs 目录中执行如下命令,用来设置配置文件(主要是将fastdfs相关的模板配置文件复制到/etc/fdfs中)。该脚本 不会覆盖 现有的配置文件,请放心执行这个脚本。

1
sudo ./setup.sh /etc/fdfs

执行前:

执行后:

2. 创建数据目录

1
2
sudo mkdir -p /data/fdfs/{client,tracker,storage,storage0}
sudo chmod -R 777 /data/fdfs

3. 配置Tracker服务

通过命令来编辑tracker.conf,如下:

1
sudo nano /etc/fdfs/tracker.conf

nanoLinux 系统中一个简单易用的 命令行文本编辑器,适合快速编辑文件(尤其是配置文件或脚本)。有关它的详细使用请自行搜索,这里不再赘述。

需要修改的关键配置如下:

1
2
port=22122
base_path=/data/fdfs/tracker

现在我们需要获取 Tracker 服务器的 IP 地址

本篇我们的示例 Tracker 服务器在 WSLUbuntu
WSLUbuntu 终端里,使用 ip addr 命令来获取网络接口信息。

其中 inet 后面的 IP 地址(如 172.22.204.57)就是 WSLUbuntu 的实际被分配的 IP 地址,这个地址可作为 Tracker 服务器的 IP 地址。

4. 配置Storage服务

通过命令来编辑storage.conf,如下:

1
sudo nano /etc/fdfs/storage.conf

需要修改的关键配置如下:

1
2
3
4
5
group_name=group1
port=23000
tracker_server=172.22.204.57:22122
base_path=/data/fdfs/storage
store_path0=/data/fdfs/storage0

其中,tracker_server 就配置 3 中的 IP地址,端口 22122

5. 配置客户端

通过命令来编辑client.conf,如下:

1
sudo nano /etc/fdfs/client.conf

需要修改的关键配置如下:

1
2
base_path=/data/fdfs/client
tracker_server=172.22.204.57:22122

tracker_server 同上修改即可。

🚦 启动服务

1. 启动Tracker

1
sudo fdfs_trackerd /etc/fdfs/tracker.conf restart

fdfs_trackerd :启动 FastDFSTracker Server(跟踪服务器) ,负责管理文件存储的元数据(如 Storage 节点的状态、文件映射关系)和调度客户端请求。

2. 启动Storage

1
sudo fdfs_storaged /etc/fdfs/storage.conf restart

fdfs_storaged :启动 FastDFSStorage Server(存储服务器) ,负责实际文件的存储、同步和访问。

3. 验证服务状态

检查进程

1
ps -ef | grep fdfs

查看端口监听

1
sudo netstat -tunlp | grep -E '22122|23000'

✅ 功能验证

1. 新建并上传测试文件

新建测试文件

1
echo "Hello WSL FastDFS,Huazie" | sudo tee /data/fdfs/test.txt

FastDFS 的文件上传命令需要使用 fdfs_upload_file,如果不清楚具体使用,我们可以先通过如下命令查看:

1
fdfs_upload_file --help

上传测试文件

1
sudo fdfs_upload_file /etc/fdfs/client.conf /data/fdfs/test.txt

上传成功返回路径:group1/M00/00/00/rBbMOWf5O7KAVMDWAAAAG3MLPyM018.txt

下面 Huazie 来将返回的路径详细分析下:

1
2
3
4
5
6
group1/M00/00/00/rBbMOWf5O7KAVMDWAAAAG3MLPyM018.txt
│ │ │ │ └── 文件名,基于文件内容哈希、时间戳等生成唯一标识
│ │ │ └── 二级子目录(每级 256 个目录,编号 00 到 FF)
│ │ └── 一级子目录(每级 256 个目录,编号 00 到 FF)
│ └── 存储路径标识符,对应配置文件中的 store_path0、store_path1 等
└── 文件所属的存储组(Group),支持多组扩展

2. 查看存储文件

从配置服务小节的配置Storage服务中,我们可以看到存储数据 store_path0 的配置路径 /data/fdfs/storage0,因此上述上传文件,可以通过如下命令查看存储路径:

1
ls -rtl /data/fdfs/storage0/data/00/00

如上图中标红的文件就是本地我们上传的文件,可以看到文件名也和上面返回的内容对应上了。

3. 下载文件

FastDFS 的文件下载命令需要使用 fdfs_download_file,如果不清楚具体使用,我们可以先通过如下命令查看:

1
fdfs_download_file --help

1
sudo fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBbMOWf5O7KAVMDWAAAAG3MLPyM018.txt download.txt

1
cat download.txt

🌐 外部调用

1. Tracker Server 的 IP 地址

这里我们在上面配置 Tracker 服务时已经查看过,也可通过如下命令精确定位:

1
ip addr show eth0 | grep inet

2. Java客户端配置

Huazie 这里就以 FleaFS 项目的配置【fdfs_client.conf】为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 9090
http.anti_steal_token = no
http.secret_key = FastDFS1234567890

tracker_server = 172.22.204.57:22122
#tracker_server = 172.22.204.58:22122

## Whether to open the connection pool, if not, create a new connection every time
connection_pool.enabled = true
## max_count_per_entry: max connection count per host:port , 0 is not limit
connection_pool.max_count_per_entry = 500
## connections whose the idle time exceeds this time will be closed, unit: second, default value is 3600
connection_pool.max_idle_time = 3600
## Maximum waiting time when the maximum number of connections is reached, unit: millisecond, default value is 1000
connection_pool.max_wait_time_in_ms = 1000

3. Java客户端示例

这里可查看 FleaFS 项目的 FastDFS 客户端测试类 FastDFSClientTest,该类演示了上传,下载,删除文件等功能,有需要的可以参考一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class FastDFSClientTest {

private static final Logger LOGGER = LoggerFactory.getLogger(FastDFSClientTest.class);

@Test
public void uploadFile() {
InputStream inputStream = IOUtils.getInputStreamFromClassPath("file/绿色田园风光.jpg");
String fileName = "绿色田园风光.jpg";
String fileId = FastDFSClient.uploadFile(inputStream, fileName);
LOGGER.debug("FILE_ID : {}", fileId);
}

@Test
public void downloadFile() throws Exception {
InputStream inputStream = FastDFSClient.downloadFile("group1/M00/00/00/rBbMOWfqU3CAH_cdAARILk7ifpI048.jpg");
File file = new File("E:\\绿色.jpg");
FileUtils.copyInputStreamToFile(inputStream, file);
}

@Test
public void deleteFile() {
FastDFSClient.deleteFile("group1/M00/00/00/rBbMOWfqU3CAH_cdAARILk7ifpI048.jpg");
}

}

📝 结语

通过本篇的指导,相信大家已经可以成功在本地系统的 WSL2 Ubuntu 应用中部署原生的 FastDFS 文件存储服务。

如有其他问题,欢迎大家在评论区交流讨论!

FastDFS 感兴趣的朋友,也可以研究研究 FastDFS官方文档