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

在这里插入图片描述

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

  • 📖 前言
  • 🛠️ 环境准备
    • 1. 系统要求
    • 2. Ubuntu应用
  • 🚀 安装服务
    • 1. 更新系统
    • 2. 安装编译依赖
    • 3. 下载源码
    • 4. 编译安装
  • 🔧 配置服务
    • 1. 设置配置文件
    • 2. 创建数据目录
    • 3. 配置Tracker服务
    • 4. 配置Storage服务
    • 5. 配置客户端
  • 🚦 启动服务
    • 1. 启动Tracker
    • 2. 启动Storage
    • 3. 验证服务状态
  • ✅ 功能验证
    • 1. 新建并上传测试文件
    • 2. 查看存储文件
    • 3. 下载文件
  • 🌐 外部调用
    • 1. Tracker Server 的 IP 地址
    • 2. Java客户端配置
    • 3. Java客户端示例
  • 📝 结语

📖 前言

最近,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. 更新系统

sudo apt update && sudo apt upgrade -y

2. 安装编译依赖

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

3. 下载源码

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

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. 编译安装

# 安装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中)。该脚本 不会覆盖 现有的配置文件,请放心执行这个脚本。

sudo ./setup.sh /etc/fdfs

执行前:

执行后:

2. 创建数据目录

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

3. 配置Tracker服务

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

sudo nano /etc/fdfs/tracker.conf

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

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

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,如下:

sudo nano /etc/fdfs/storage.conf

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

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,如下:

sudo nano /etc/fdfs/client.conf

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

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

tracker_server 同上修改即可。

🚦 启动服务

1. 启动Tracker

sudo fdfs_trackerd /etc/fdfs/tracker.conf restart

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

2. 启动Storage

sudo fdfs_storaged /etc/fdfs/storage.conf restart

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

3. 验证服务状态

检查进程

ps -ef | grep fdfs

查看端口监听

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

✅ 功能验证

1. 新建并上传测试文件

新建测试文件

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

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

fdfs_upload_file --help

上传测试文件

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

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

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

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

2. 查看存储文件

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

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

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

3. 下载文件

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

fdfs_download_file --help

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

cat download.txt

🌐 外部调用

1. Tracker Server 的 IP 地址

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

ip addr show eth0 | grep inet

2. Java客户端配置

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

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 9090
http.anti_steal_token = no
http.secret_key = FastDFS1234567890tracker_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,该类演示了上传,下载,删除文件等功能,有需要的可以参考一下。

public class FastDFSClientTest {private static final Logger LOGGER = LoggerFactory.getLogger(FastDFSClientTest.class);@Testpublic void uploadFile() {InputStream inputStream = IOUtils.getInputStreamFromClassPath("file/绿色田园风光.jpg");String fileName = "绿色田园风光.jpg";String fileId = FastDFSClient.uploadFile(inputStream, fileName);LOGGER.debug("FILE_ID : {}", fileId);}@Testpublic 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);}@Testpublic void deleteFile() {FastDFSClient.deleteFile("group1/M00/00/00/rBbMOWfqU3CAH_cdAARILk7ifpI048.jpg");}}

📝 结语

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97050.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手向:网络编程完全指南

1. 引言:什么是网络编程?网络编程(Network Programming)是指利用计算机网络实现程序间通信的技术。它构建在计算机网络协议基础上,通过编程实现不同设备间的数据交换与资源共享。从底层协议实现到高层应用开发&#xf…

阿里云——云存储与数据库服务

云存储与数据库服务 数据是数字时代的新石油,而存储与数据库服务就是保存和提炼这些石油的“油库与炼油厂”。阿里云提供了从对象、块、文件存储到关系型、NoSQL、数据仓库的全方位数据服务。本章将帮你构建一套清晰的数据存储选型框架,并掌握核心服务的…

浏览器网页路径扫描器(脚本)

使用网页路径扫描器可以扫描网页的路径,一些工具如ffuf为在命令行上操作,比较不便,而其他资源不好找到 Website path scanner(Script-tampermonkey) 脚本发布在GitHub,本文章也关联文件资源 GitHub:Website path scanner(Script-…

实战原型模式案例

作者:小凯 分享、让自己和他人都能有所收获!😄 一、前言 老板你加钱我的代码能飞 程序员这份工作里有两种人;一类是热爱喜欢的、一类是仅当成工作的。而喜欢代码编程的这部分人会极其主动学习去丰富自己的羽翼,也非常喜…

微信小程序餐饮扫码点餐小程序堂食外卖桌台自助下单源码

功能说明:商家助手APP、接单更方便前端页面模版随意挑选,可diy精装设计线下买单餐桌点餐快速下单会员管理订单管理优惠券核销叫号取餐排队叫号商品管理桌位管理数据统计售后订单配送设置推广码硬件设备一、技术架构:PHPUniApp构建高性价比系统…

Linux应用软件编程---网络编程(TCP并发服务器构建:[ 多进程、多线程、select ])

TCP并发服务器构建一、服务器单循环服务器:服务端同一时刻只能处理一个客户端的任务(TCP)并发服务器:服务端同一时刻可以处理多个客户端的任务(UDP)二、TCP服务端并发模型1、多进程进程资源开销大&#xff…

重构审计体验!批量生成报表项目底稿的凭证检查表

在审计工作中,我们通过序时账或其他审计软件筛选导出的凭证列表,要如何快速分发给各个报表项目底稿的凭证检查表呢? “TB工具箱2025”正式上线“批量生成凭证表”的功能,通过一些巧妙的设计,使其具备高度的通用性&…

【c++进阶系列】:万字详解二叉搜索树(附源码实现)

🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 你可以走得慢,但别回头 1.概念 二叉搜索树,从其名字我们就能知道该数据结构是一个特殊的二叉树,而二…

通过web服务做横向移动

环境配置边缘主机(win10):192.168.237.140 10.10.90.128内网主机(win7):10.10.90.129 web服务 -- upload-labs攻击机:vps(120.26.114.196)windows10windows7假设已经拿下边缘主机win10,vshell上线ipconfig查…

把CentOS 7默认yum源改成腾讯云镜像

步骤计划: 备份原有CentOS-Base.repo文件,防止配置出错可恢复 下载腾讯云提供的CentOS 7镜像源配置文件(对应CentOS-Base.repo) 清理并生成yum缓存,使新源生效 具体命令 # 备份原有源 sudo mv /etc/yum.repos.d/C…

欧盟《人工智能法案》生效一年主要实施进展概览(二)

文章目录前言三、《关于禁止的人工智能实践指南》1. 整体适用2. 禁止的人工智能系统具体介绍(1)有害操纵和欺骗类及对脆弱性的有害利用类(2)社会评分类(3)个人刑事犯罪风险评估和预测类(4&#…

私域电商新范式:开源AI智能名片链动2+1模式S2B2C商城小程序赋能传统行业流量转化

摘要:本文聚焦私域电商领域,指出其并非仅局限于快消品等传统电商行业,多数传统行业同样面临私域流量利用难题。传统行业手握私域流量或优质流量入口,却不知如何有效转化,陷入流量焦虑。在此背景下,开源AI智…

Axios 整理常用形式及涉及的参数

一、axios get请求 //形如 axios.get(url[, config]).then(response > {// 处理响应}).catch(error > {// 处理错误}); //无 config 的情况下, axios.get(https://api.example.com/data).then(response > {// 处理响应}) .catch(error > {// 处理错误})…

深度学习---卷积神经网络CNN

卷积神经网络CNN(Convolutional Neural Networks)一、图像原理图像在计算机中是一堆按顺序排列的数字,数值为0到255。0表示最暗,255表示最亮。上图是只有黑白颜色的灰度图,而更普遍的图片表达方式是RGB颜色模型&#x…

日志输出触发的死锁问题排查记录

现象描述 错误日志: Found one Java-level deadlock:"http-nio-8083-exec-106":waiting for ownable synchronizer 0x00000005cbfa6b90, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),which is held by "http-nio-8083-exec-10" …

UNIX网络编程笔记:高级套接字编程20-25

广播通信:局域网内的高效信息传播 在局域网通信场景中,广播是一种高效的一对多信息传播方式 。它无需为每个接收者单独建立连接,能一次性将消息送达网段内所有目标,广泛应用于服务发现、网络通知等场景。以下从基础原理到实践应用…

React Native核心技术深度解析_Trip Footprints

React Native 框架详细技术解析 作为前端开发者,理解React Native需要从Web开发的角度出发,了解其独特之处和技术实现。 🎯 React Native 核心概念 什么是React Native? React Native是Facebook开发的跨平台移动应用开发框架&…

预算管理的“数字围栏“:如何用实时预警终结行政费用超支

作为公司行政主管,每年最让我忐忑的时刻不是年终总结,而是季度财务分析会。当CFO皱着眉头指出行政费用又超支时,那种如坐针毡的感觉至今难忘。行政预算就像一匹难以驯服的野马,明明已经严加管控,却总在年底给我们"…

NTLM哈希深度解析:从原理到安全实践

NTLM哈希深度解析:从原理到安全实践作为一名白帽子黑客,深入理解NTLM哈希机制对保障企业网络安全至关重要。1. NTLM哈希概述 NTLM(New Technology LAN Manager)是微软推出的一套身份验证协议套件,用于在Windows网络中验…

4-3.Python 数据容器 - 集合 set(集合 set 概述、集合的定义、集合的遍历、集合的常用方法)

集合 set 概述集合用于存储一系列元素集合存储的元素是无序的,不支持索引集合存储的元素是不可以重复的集合存储的元素可以是不同类型的,例如、数字、字符串、甚至是其他集合集合是可变的,在程序运行时可以添加、删除其中的元素一、集合的定义…