开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器

文章目录

  • 前言
  • [1. 本地搭建FastDFS文件系统](#1. 本地搭建FastDFS文件系统)
    • [1.1 环境安装](#1.1 环境安装)
    • [1.2 安装libfastcommon](#1.2 安装libfastcommon)
    • [1.3 安装FastDFS](#1.3 安装FastDFS)
    • [1.4 配置Tracker](#1.4 配置Tracker)
    • [1.5 配置Storage](#1.5 配置Storage)
    • [1.6 测试上传下载](#1.6 测试上传下载)
    • [1.7 与Nginx整合](#1.7 与Nginx整合)
    • [1.8 安装Nginx](#1.8 安装Nginx)
    • [1.9 配置Nginx](#1.9 配置Nginx)
  • [2. 局域网测试访问FastDFS](#2. 局域网测试访问FastDFS)
  • [3. 安装cpolar内网穿透](#3. 安装cpolar内网穿透)
  • [4. 配置公网访问地址](#4. 配置公网访问地址)
  • [5. 固定公网地址](#5. 固定公网地址)
    • [5.1 保留二级子域名](#5.1 保留二级子域名)
    • [5.2 配置二级子域名](#5.2 配置二级子域名)
  • [6. 测试访问固定二级子域名](#6. 测试访问固定二级子域名)

前言

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

配备一台公网服务器作为文件上传下载,花费资源和开销比较大,如果在本地搭建FastDFS服务,只把上传后的文件通过cpolar内网端口转发工具将文件配置可通过互联网访问,极大了减少服务器费用及开销,本文介绍详细搭建FastDFS教程,并结合Nginx+cpolar工具实现远程访问文件。

1. 本地搭建FastDFS文件系统

1.1 环境安装

由于fastDFS是由c语言编写,所以我们需要安装gcc

shell 复制代码
yum -y install gcc-c++ 

FastDFS依赖libevent库,需要安装。执行如下命令:

shell 复制代码
yum -y install libevent

1.2 安装libfastcommon

进入local目录

shell 复制代码
cd /usr/local

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。点击下面链接即可获取:

https://github.com/happyfish100/libfastcommon/releases/tag/V1.0.7

获取后,上传到local目录下

解压libfastcommon

shell 复制代码
tar -zxvf libfastcommonV1.0.7.tar.gz

进入解压文件夹

shell 复制代码
cd libfastcommon-1.0.7/

编译

shell 复制代码
./make.sh

安装

shell 复制代码
./make.sh install

libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。

shell 复制代码
cp /usr/lib64/libfastcommon.so /usr/lib/

1.3 安装FastDFS

进入local目录

shell 复制代码
cd /usr/local

点击下列地址,可获取下载FastDFS_v5.05.tar.gz文件:

https://sourceforge.net/projects/fastdfs/

下载文件后,上传FastDFS_v5.05.tar.gz/usr/local/

解压文件

shell 复制代码
tar -zxvf FastDFS_v5.05.tar.gz 

进入解压文件夹

shell 复制代码
cd FastDFS

编译

shell 复制代码
./make.sh 

安装

shell 复制代码
./make.sh install

安装成功后,将安装目录下的conf下的文件拷贝到/etc/fdfs/

shell 复制代码
cd conf/

拷贝

shell 复制代码
cp * /etc/fdfs/

1.4 配置Tracker

接下来进行配置,安装成功后进入/etc/fdfs目录

shell 复制代码
cd /etc/fdfs/

修改tracker.conf

shell 复制代码
vim tracker.conf

base_path=/home/yuqing/fastdfs改为base_path=/home/fastdfs

编辑后保存退出,然后创建一个对应的fastdfs文件夹

shell 复制代码
mkdir /home/fastdfs

然后启动

shell 复制代码
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

设置开机启动

shell 复制代码
vim /etc/rc.d/rc.local

将运行命令行添加进文件

shell 复制代码
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

1.5 配置Storage

进入/etc/fdfs目录

shell 复制代码
cd /etc/fdfs

修改storage.conf

shell 复制代码
vim storage.conf

base_path=/home/yuqing/fastdfs改为base_path=/home/fastdfs

store_path0=/home/yuqing/fastdfs改为store_path0=/home/fastdfs/fdfs_storage

继续修改,设置tracker服务器:IP,tracker_server=Linux局域网ip:22122 ,设置好后保存退出

创建对应fdfs_storage文件夹

shell 复制代码
mkdir /home/fastdfs/fdfs_storage

然后启动

shell 复制代码
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

设置开机自动启动

shell 复制代码
vim /etc/rc.d/rc.local

将运行命令行添加到文件,然后保存

shell 复制代码
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

1.6 测试上传下载

FastDFS安装成功可通过/usr/bin/fdfs_test命令测试上传、下载等操作。

修改/etc/fdfs/client.conf

shell 复制代码
vim /etc/fdfs/client.conf

修改如下内容,然后保存:

shell 复制代码
base_path=/home/fastdfs

tracker_server=Linux局域网ip:22122

接下来测试上传文件,这里上传了一张图片到/usr/local目录下,作为测试使用

FastDFS上传文件使用格式:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload+ 上传文件的路径

然后按照格式,测试将test23.png图片上传到FastDFS中

shell 复制代码
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/local/test23.png

执行后,我们可以看到返回地址信息,表示成功,但是目前还访问不了,需要结合Nginx做访问下载

1.7 与Nginx整合

点击下载下面链接下载fastdfs-nginx-module_v1.16:

https://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz/download\](https://sourceforge.net/projects/fastdfs/files/FastDFS Nginx Module Source Code/fastdfs-nginx-module_v1.16.tar.gz/download) 进入 /usr/local/文件夹下 ```shell cd /usr/local/ ``` 上传`fastdfs-nginx-module_v1.16.tar.gz` ![1679322637070](https://file.jishuzhan.net/article/1740310152931708929/23aa20c0326d65ac96ef944b9445a14f.webp) 解压fastdfs-nginx-module_v1.16.tar.gz ```shell tar -zxvf fastdfs-nginx-module_v1.16.tar.gz ``` 进入src,然后编辑配置文件 ```shell cd fastdfs-nginx-module/src/ ``` 修改config文件 ```shell vim config ``` 修改这三个位置,将里面原本是/usr/local/的路径改为/usr/,然后保存退出 ![1679322770876](https://file.jishuzhan.net/article/1740310152931708929/108d456826cc5336a4331bbe734f1ccc.webp) 然后将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下 ```shell cp mod_fastdfs.conf /etc/fdfs/ ``` 修改mod_FastDFS.conf的内容: ```shell vim /etc/fdfs/mod_fastdfs.conf ``` 修改内容如下: > base_path=/home/fastdfs > > tracker_server=Linux局域网ip地址:22122 > > url_have_group_name=true #url中包含group名称 > > store_path0=/home/fastdfs/fdfs_storage #指定文件存储路径 ![1679405651550](https://file.jishuzhan.net/article/1740310152931708929/9eb8befe53d5f14d01950c1bef0e4053.webp) 接下来将libfdfsclient.so拷贝至/usr/lib下 ```shell cp /usr/lib64/libfdfsclient.so /usr/lib/ ``` 创建nginx/client目录即可 ```shell mkdir -p /var/temp/nginx/client ``` ### 1.8 安装Nginx 首先安装系列环境 ```shell yum -y install pcre pcre-devel ``` ```shell yum -y install zlib zlib-devel ``` ```shell yum -y install openssl openssl-devel ``` 然后点击下载Nginx包: [nginx-1.16.1.tar.gz](http://nginx.org/en/download.html) 上传到root目录下 ![1679323002737](https://file.jishuzhan.net/article/1740310152931708929/819c5dacbf3173152ce05df35863bb06.webp) 解压,并进入解压文件夹 ```shell tar -zxvf nginx-1.16.1.tar.gz && cd nginx-1.16. ``` 添加FastDFS-nginx-module模块,执行以下命令: ```shell ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --add-module=/usr/local/fastdfs-nginx-module/src ``` ![1679320271108](https://file.jishuzhan.net/article/1740310152931708929/3f8d1770d2e5ec4cb25042fa1532655c.webp) 然后编译 ```shell make ``` 安装 ```shell make install ``` ### 1.9 配置Nginx 修改Nginx配置文件 ```shell vim /usr/local/nginx/conf/nginx.conf ``` 添加server,添加后保存退出: ```shell server { listen 8089;#为了防止80端口,我们改成8089 server_name 192.168.59.133;#这里需要使用你本机的局域网ip location /group1/M00/{ ngx_fastdfs_module; } } ``` ![1679406356346](https://file.jishuzhan.net/article/1740310152931708929/33c90fd6bd51720d8503499b945c51ce.webp) 启动Nginx ```shell /usr/local/nginx/sbin/nginx ``` 如果启动nginx出现以下错误: nginx: \[emerg\] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 可以执行如下命令,然后再次启动: ```shell mkdir /var/run/nginx ``` 设置开机自动启动。 ```shell vim /etc/rc.d/rc.local ``` 将运行命令行添加进文件,然后保存退出: ```shell /usr/local/nginx/sbin/nginx ``` ![1679321237969](https://file.jishuzhan.net/article/1740310152931708929/97d2a6d81d0e7883cb180e404381190a.webp) 关闭防火墙 ```shell service iptables stop ``` 设置防火墙不自动启动 ```shell chkconfig iptables off ``` ## 2. 局域网测试访问FastDFS 然后按照格式,测试将上面我们上传的test23.png图片上传到FastDFS中 ```shell /usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/local/test23.png ``` 执行后,我们可以看到返回地址信息,表示成功 ![1679323425917](https://file.jishuzhan.net/article/1740310152931708929/9a8c3327bf1db82f1154257866100625.webp) 然后使用上面的地址,在浏览器访问,即可看到我们上传的图片,fastDFS搭建完成 ![1679406429350](https://file.jishuzhan.net/article/1740310152931708929/81c9fd3455ab06f8f841b23b8800565b.webp) ## 3. 安装cpolar内网穿透 上面我们在本地Linux虚拟机安装了fastDFS分布式文件服务,下面我们安装cpolar内网穿透工具,通过cpolar的http公网地址,我们可以很容易远程也可以访问fastDFS里面上传的文件,而无需自己注册域名购买云服务器.下面是安装cpolar内网穿透步骤 > cpolar官网: * 使用一键脚本安装命令 ```shell curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash ``` * token认证 登录cpolar官网后台,点击左侧的验证,查看自己的认证token,之后将token贴在命令行里: ```shell cpolar authtoken xxxxxxx ``` ![20230206171248](https://file.jishuzhan.net/article/1740310152931708929/fd011baf58424b79917689be4a2190a3.webp) * 向系统添加服务 ```shell sudo systemctl enable cpolar ``` * 启动cpolar服务 ```shell sudo systemctl start cpolar ``` ## 4. 配置公网访问地址 成功启动cpolar服务后,我们在浏览器上访问Linux局域网ip地址+9200端口,登录cpolar web UI管理界面。 登录成功后,点击左侧仪表盘的隧道管理------创建隧道,创建一个http协议的隧道指向上面设置的Nginx8089端口: * 隧道名称:可自定义,注意不要与已有的隧道名称重复 * 协议:http * 本地地址:8089 * 域名类型:免费选择随机域名 * 地区:选择China VIP 点击`创建` ![1679406828417](https://file.jishuzhan.net/article/1740310152931708929/f262ba9e4f396501410a63e67c54a2e1.webp) 然后打开在线隧道列表,查看并且复制公网地址 ![1679406894080](https://file.jishuzhan.net/article/1740310152931708929/cdb1f3d09bcc8abbd613c1a73d420a0d.webp) 然后打开浏览器,输入公网地址,访问我们上传在fastDFS里的文件,即可远程访问成功 ![1679406972587](https://file.jishuzhan.net/article/1740310152931708929/5a42a120f5ad06a3fb7c99fa334bacd4.webp) ## 5. 固定公网地址 由于刚刚创建隧道使用的是随机临时地址,该地址会在24小时内发生变化,为了长期和更稳定远程访问,我们接下来将这个公网地址配置为固定的, ### 5.1 保留二级子域名 > 需升级至基础套餐或以上才支持配置二级子域名,如有下载文件的需求,可以升级更高套餐以便获取更大的带宽,提高下载速度 登录[cpolar官网后台](https://dashboard.cpolar.com/),点击左侧仪表盘的`预留`,找到`保留二级子域名`,为http隧道保留一个二级子域名。 * *地区:选择服务器地区* * *名称:填写您想要保留的二级子域名(可自定义)* * *描述:即备注,可自定义填写* ![1679407261443](https://file.jishuzhan.net/article/1740310152931708929/0fee6bbd5f512a66db094c5b48d298f4.webp) 本例保留一个名称为`fasttest`的二级子域名。子域名保留成功后,我们将子域名复制下来,接下来需要将其配置到隧道中去。 ![1679407306636](https://file.jishuzhan.net/article/1740310152931708929/3ecded2fc843923bc5592cae98036541.webp) ### 5.2 配置二级子域名 登录cpolar web ui管理界面。点击左侧仪表盘的`隧道管理`------`隧道列表`,找到需要配置二级子域名的隧道,点击右侧的`编辑` ![1679407950343](https://file.jishuzhan.net/article/1740310152931708929/73e521b6c205cb15a873a497657a7319.webp) 修改隧道信息,将二级子域名配置到隧道中: * *域名类型:改为选择`二级子域名`* * *Sub Domain:填写我们刚刚所保留的二级子域名(本例为`fasttest`)* 修改完成后,点击`更新` ![1679407459593](https://file.jishuzhan.net/article/1740310152931708929/ddf0ac7b6c45e8511da031e6622be6e8.webp) 隧道更新成功后,点击左侧仪表盘的`状态`------`在线隧道列表`,可以看到隧道的公网地址,已经更新为二级子域名了,将公网地址复制下来。 ![1679407508347](https://file.jishuzhan.net/article/1740310152931708929/09395b6c114943e7dff34c828bdb8155.webp) ## 6. 测试访问固定二级子域名 我们来测试一下访问配置成功的二级子域名,打开浏览器,输入公网地址加资源路径,访问我们上传在fastDFS里的文件,出现图片即可远程访问成功。现在,我们全网唯一的私有二级子域名,就创建好了。 而且这个地址也不会再随机变化,他是固定不变的,只要保持隧道在线,我们在外就可以通过这个公网地址,随时随地远程访问,无需公网IP,也不用设置路由器。 ![1679407663302](https://file.jishuzhan.net/article/1740310152931708929/c0aa4243a86151ecf937533698ee790b.webp)

相关推荐
宁zz2 小时前
乌班图安装jenkins
运维·jenkins
无名之逆2 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
大丈夫立于天地间2 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
rainFFrain3 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式
GalaxyPokemon3 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
xujiangyan_4 小时前
nginx的反向代理和负载均衡
服务器·网络·nginx
@郭小茶5 小时前
docker-compose方式部署docker项目
运维·docker·容器
GalaxyPokemon5 小时前
Muduo网络库实现 [十] - EventLoopThreadPool模块
linux·服务器·网络·c++
自由鬼5 小时前
开源虚拟化管理平台Proxmox VE部署超融合
linux·运维·服务器·开源·虚拟化·pve
孤独得猿6 小时前
Qt常用控件第一部分
服务器·开发语言·qt