微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FastDFS服务器安装以及使用

前提介绍

  1. 服务器部分本来是管服务器的人装的,现在没有这部分的人所以自己就尝试这装一下。所有的过程都是按照网上的步骤一步一步来的,如果你安装过程中出现了一些问题。可能本文无法帮助到您。但是笔者出现的问题肯定会在文章介绍出来。
  2. 本文显示安装的http版本,后面在介绍http转型为https。笔者写的时候并不会安装,然后成功后又想弄成https但是博客改动起来好麻烦,按照前面说的,服务器也不是本职工作。整了一天才弄好。难死了就也懒得改动了。且好多博客都是安装的http的,其实我的https转型部分也有一些参考价值

目录

FastDFS服务器安装

环境介绍

阿里云——CentOS 7.7 64位

前期准备

直接选择最新的下载就行,本文使用的版本号在【】内已经标明。

Common核心包【1.0.58】:https://github.com/happyfish100/libfastcommon/tags

FastDFS软件包【6.08】:https://github.com/happyfish100/fastdfs/tags

fastdfs-Nginx重定向【1.22】:https://github.com/happyfish100/fastdfs-nginx-module/tags

Nginx重定向工具【1.22.0】:http://nginx.org/en/download.html

安装初始环境

@H_502_118@#安装GCC-c++ yum -y install gcc-c++ #安装libevent库 yum -y install libevent #通过Xftp将文件上传到服务器上 我的位置是/usr/local/fastdfs

安装libfastcommon

这个必须先安装,不然FastDFS安装会报路径不存在

@H_502_118@#解压 tar -zxvf libfastcommon-1.0.58.tar.gz #进入解压文件 路径请根据自己的来 cd /usr/local/fastdfs/libfastcommon-1.0.58/ #编译与安装 ./make.sh ./make.sh install #安装号后就会提示你已经将一个叫libfastcommon.so文件创建在 /usr/lib64下【如图1】 #现在需要将这个文件放置在Liunx的标准路径下 /usr/lib # ---------------------------注意--------------------------- # 新版本创建的时候不仅会在/usr/lib64创建 也会在/usr/lib创建。所以无需辅助。如果需要复制运行以下代码 # cp /usr/lib64/libfastcommon.so /usr/lib

image

图1 安装libfastcommon的参数

安装FastDFS

@H_502_118@#解压 tar -zxvf fastdfs-6.08.tar.gz #进入解压文件 路径请根据自己的来 cd /usr/local/fastdfs/fastdfs-6.08/ #编译与安装 【图2】 ./make.sh ./make.sh install # 此时查看 /etc/fdfs/文件夹出现了很多配置文件,但是对应原始的文件夹下缺少了一部分。 # 如果你需要Nginx服务需要进行全部辅助过来。 # 我这里需要安装Nginx所以选择全部拷贝 cp /usr/local/fastdfs/fastdfs-6.08/conf/* /etc/fdfs/ # 问我覆盖全部选覆盖 \> cp: overwrite ‘/etc/fdfs/client.conf’? y \> cp: overwrite ‘/etc/fdfs/storage.conf’? y \> cp: overwrite ‘/etc/fdfs/storage_ids.conf’? y \> cp: overwrite ‘/etc/fdfs/tracker.conf’? y # 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了 mkdir -p /home/fastDFS_data/tracker/ # 修改配置文件修改内容查看图3】 vim /etc/fdfs/tracker.conf # 启动start 重启restart 关闭stop。修改末尾即可 fdfs_trackerd /etc/fdfs/tracker.conf start # 建议不是老油条暂时不要设置开机自启 小心开不了机。这里我也不尝试就不粘贴指令了

image

图2 安装FastDFS参数

image

图3 FastDFS需要修改的参数

配置存储端Storage

安全组配置

笔者使用的是阿里云服务器,这一步请根据实际情况设置

image

防火墙配置

笔者喜欢开启防火墙,如果平时测试都是关闭防火墙的这一步可以直接忽略

@H_502_118@# 开启防护墙 systemctl start firewalld # 放开端口 firewall-cmd --zone=public --add-port=22122/tcp --permanent firewall-cmd --zone=public --add-port=23000/tcp --permanent # 重启防火墙 systemctl restart firewalld

配置Storage

@H_502_118@# 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了 mkdir -p /home/fastDFS_data/storage # 修改配置文件修改内容查看图4】 vim /etc/fdfs/storage.conf # 启动服务 fdfs_storaged /etc/fdfs/storage.conf start

image

图4 Storage需要修改的参数

这一步执行完毕后需要去你说设置的Storage目录下面查看是否创建对应的目录。如果失败可以看看日志。

image

配置客户端Client

@H_502_118@# 将libfdfsclient.so拷贝到/usr/lib # 这一步对于没有的人用的,我这个版本已经创建好了 cp /usr/local/fastdfs/fastdfs-6.08/client/libfdfsclient.so /usr/lib # 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了 mkdir -p /home/fastDFS_data/client # 修改配置文件修改内容查看图5】 vim /etc/fdfs/client.conf

image

图5 Client需要修改的参数

测试是否安装成功

  1. 查看进程是否开启

    @H_502_118@netstat -unltp|grep fdfs

    image

  2. 上传一个文件

    @H_502_118@fdfs_test /etc/fdfs/client.conf upload /home/img/123.jpg # 如果成功会跳出一大堆,其中重要的是能够出现以下内容 \> example file url: ~H~ttp://马赛克/group1/M00/00/00/ag5p7mLbzt-AV2bbAADg_skRKOk283_big.jpg # 最后需要确认下文件是否上传 cd /home/fastDFS_data/storage/data/00/00/ ll # ok我们看到我们上传文件已经保存在当中了

小结

至此安装fastDFS全部过程已经结束。如果你想修改端口22122与23000 都是可以通过tracker配置文件和storage配置文件进行修改的不是固定的。

Nginx服务安装

为啥安装

Web服务使用的是Http或Https协议,这个协议fastDFS识别不了。需要专门有个东西来作为解释器来帮他翻译字节码文件。FastDFS作者提供了一个解释器为fastDFS-Nginx。所以需要安装Nginx

安装初始环境

@H_502_118@#安装PCRE、zlib、openssl #yum install -y pcre pcre-devel;yum install -y zlib zlib-devel;yum install -y openssl openssl-devel; yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel

配置解释器fastdfs-Nginx

删除local标签

@H_502_118@# 解压文件 tar -zxvf fastdfs-Nginx-module-1.22.tar.gz # 修改配置文件 vim /usr/local/fastdfs/fastdfs-Nginx-module-1.22/src/config #修改内容为 将/usr/local/xxx ==> /usr/xxx # vim=> 表示当前属于vim语法 vim=>:%s/local\///g vim=>:wq

image

修改配置文件

@H_502_118@# 将配置文件拷贝到之前的配置文件目录 cp /usr/local/fastdfs/fastdfs-Nginx-module-1.22/src/mod_fastdfs.conf / etc/fdfs/ # 修改配置文件 vim /etc/fdfs/mod_fastdfs.conf

image

安装Nginx

@H_502_118@# 解压Nginx tar -zxvf Nginx-1.22.0.tar.gz # 进入niginx文件夹 cd /usr/local/fastdfs/Nginx-1.22.0/ # 输入配置命令 这里一定要注意格式建议先准备个记事本编辑好然后复制粘贴进去 #./configure --add-module=[你的fastdfs-Nginx的src的绝对路径] ./configure --add-module=/usr/local/fastdfs/fastdfs-Nginx-module-1.22/src # 等待一堆not found # 编译 make # 出现以下内容安装成功 # 评论区说这里容易出错,解释说换成1.16版本以下就能成功 # 但是建议先找出错原因是在不行再换 > make[1]: Leaving directory '/usr/local/fastdfs/Nginx-1.22.0' # 安装 make install # 进入安装目录 cd /usr/local/Nginx/conf # 修改配置文件 配置文件见下方 vim Nginx.conf @H_502_118@# 在原有的server里面随便找个空单,直接添加下面这句话就行了 server { # 如果访问路径为/group1/M00就将他直接转发给fastdfs-Nginx处理而不是服务器处理 location ~/group1/M00{ ngx_fastdfs_module; } } @H_502_118@# 启动Nginx cd /usr/local/Nginx/sbin/ ./Nginx # 查看服务是否启动 ps -aux | grep Nginx > Nginx: master process > Nginx: worker process # 访问下之前的路径发现通过外网可以连接到对应的文件

笔者出现的问题

没有出现worker线程或日志打印ERROR - file: ../tracker/fdfs_shared_func.c, line: 474, host "tracker" is invalid, error info: UnkNown host
解决方法

  1. /etc/fdfs/ 文件夹下没有mime.types 将fastDFS解压包下conf里面的mime.types复制到/etc/fdfs/
  2. 没有修改mod_fastdfs.conf配置文件,我就是粗心大意忘记保存了。

Https转型

将传输的协议设置为加密协议

安全组

image

防火墙

@H_502_118@firewall-cmd --zone=public --add-port=443/tcp --permanent systemctl restart firewalld

证书安装

@H_502_118@# 首先准备好证书,笔者是阿里云的证书,直接下载Nginx即可 # 进入Nginx的conf目录,创建cert文件夹。然后将下载好的证书上传上去 cd /usr/local/Nginx/conf/ mkdir cert # 解压文件 # 如果没有unzip先安装 yum install unzip unzip 马赛克_Nginx.zip # 编辑Nginx文件 配置内容如下 vim /usr/local/Nginx/conf/Nginx.conf @H_502_118@# ————————————————————————————此教程来源于阿里云官方教程———————————————————————————— # ————————————————————————————这些可以直接复制过去然后根据备注修改———————————————————————————— #以下属性中,以ssl开头的属性表示与证书配置有关。 server { #配置HTTPS的认访问端口为443。 #如果未在此处配置HTTPS的认访问端口,可能会造成Nginx无法启动。 #【需要修改】如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 listen 443 ssl; #【需要修改】需要将yourdomain替换成证书绑定的域名。 server_name yourdomain; root html; index index.html index.htm; # 【需要修改】 注意cert-file-name修改成你的证书的完整名称 我的是 数字_域名_Nginx ssl_certificate cert/cert-file-name.pem; ssl_certificate_key cert/cert-file-name.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。 ssl_prefer_server_ciphers on; location / { root html; #Web网站程序存放目录。 index index.html index.htm; } # 这里是你的fastFDS服务 # 如果访问路径为/group1/M00就将他直接转发给fastdfs-Nginx处理而不是服务器处理 location ~/group1/M00/{ ngx_fastdfs_module; } # 这一坨我建议带上 这样可以重定向一个认的页面 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # ————————————————————————————可选项———————————————————————————— # 如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点添加以下rewrite语句 # Nginx自带一个80 我的建议是直接覆盖全部只留下这些 server { listen 80; # 【需要修改】需要将yourdomain替换成证书绑定的域名。 server_name yourdomain; rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 location / { index index.html index.htm; } }

如果重启Nginx服务时收到报错,您可以使用以下方法进行排查:

  • 收到the "ssl" parameter requires ngx_http_ssl_module报错:您需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module配置。
  • 收到"/cert/3970497_demo.aliyundoc.com.pem":BIO_new_file() Failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/cert/3970497_demo.aliyundoc.com.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)报错:您需要去掉证书相对路径最前面的/。例如,您需要去掉/cert/cert-file-name.pem最前面的/,使用正确的相对路径cert/cert-file-name.pem。

    类似问题有很多可能,几乎都是格式不正确。根据提示改就行``

之后就是重新编译安装的过程

@H_502_118@# 第一步一定是查看Nginx是否启动,并直接杀死Nginx线程。这里不关闭后面可能会出现成功了但是没完成 # 成功的特殊壮举。因为已经配置了上面部分,自带关闭会报错还是使用kill方便 # 根据work与master的端口号进行kill。 ps -aux|grep Nginx # 杀死进程后进入你的Nginx路径中 cd /usr/local/fastdfs/Nginx-1.22.0/ # 重新编译与安装 # 注意--add-module=后面的路径要和你fastdfs-Nginx位置相同 # 注意--prefix=/usr/local/Nginx 不是--prefix=/usr/local/Nginx/ 看的那篇文章坑死人了 ./configure --prefix=/usr/local/Nginx --add-module=/usr/local/fastdfs/fastdfs-Nginx-module-1.22/src --with-http_ssl_module make make install # 进入Nginx安装后的目录 cd /usr/local/Nginx/sbin/ # 启动Nginx ./Nginx # 返回进程号 查看是否正常启动。如果不是两个进程查看上面http部分安装的可能问题。但是 # 一路看下来应该不会再出错了 > Nginx: master process > Nginx: worker process # 最后再浏览器上访问 https://域名 出现以下图完美成功

修改tracker、storage、client配置文件

@H_502_118@# 进入配置文件目录 cd /etc/fdfs/ # 修改 将http.server_port设置为443 这里不再阐述怎么修改 #重启服务 fdfs_trackerd /etc/fdfs/tracker.conf restart;fdfs_storaged /etc/fdfs/storage restart # 查看是否开启 netstat -unltp|grep fdfs # 看见两个都是开启的,尝试下上传文件 fdfs_test /etc/fdfs/client.conf upload /home/img/123.jpg # 上传成功,配置没有问题。尝试访问返回的图片,将开头改成https://域名//group1.... # 完美显示

到这里你已经完美实现了搭建FastDFS服务。芜湖!!!!!!!!!!

删除FastDFS服务

开个玩笑,之前以为服务有问题删除了准备重装,谁知道是自己搞错了。写都写了懒得删了

@H_502_118@# 停止服务 service fdfs_trackerd stop;service fdfs_storaged stop; # 查看pid ps -ef | grep fdfs # 杀死进程 xxxx是你查询的结果 kill xxxx # 删除本地存储的配置和日志路径 这个是你配置文件里面的路径。 # 注意删除的范围 rm -rf /home/fastDFS_data/* # 剩下就是疯狂删除 # 删除认的安装目录 即你的解压的文件在哪里。 rm -rf /etc/fdfs # 剩下的几乎大家都是一样的,应该都没有动过。可以直接运行。直接删除全部 rm -rf /usr/bin/fdfs_*;rm -rf /usr/bin/stop.sh/rm -rf /usr/bin/restart.sh;rm -rf /usr/include/fastdfs;rm -rf /usr/include/fastcommon;rm -rf /usr/lib64/libfdfsclient*;rm -rf /usr/lib/libfdfsclient*;

通过Java操作FastDFS

来到熟悉的代码环节,首先是依赖的注入。

官方的那个导不进去 另一个又各种安全漏洞。所以最后还是选这个

@H_502_118@<!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java --> <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </dependency>

首先需要准备一个配置文件。取名为xxxx.conf即可。我这里取名为fdfs.conf。配置的内容如下

@H_502_118@# 超时时间 connect_timeout = 10 network_timeout = 30 # 编码字符集 charset = UTF-8 # tracker 服务器的 IP 和端口 tracker_server = 你的tracker地址:22122

配置号后将改文件放置在你的resources文件夹下即可

image

之后就是直接粘贴上我的工具包。直接通过调用方法使用即可

@H_502_118@/** * 该类用于FastDFS服务的操作工具类 * @author musiro * @version 0.1 * @date 2022/7/24 */ @Slf4j public final class FastDfsutil { private static final StorageClient CLIENT; /** * 禁止实例化 */ private FastDfsutil() {} static { try { ClientGlobal.init("fdfs.conf"); TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group); TrackerServer trackerServer = trackerClient.getConnection(); StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer); CLIENT = new StorageClient(trackerServer, storeStorage); } catch (IOException | MyException e) { throw new RuntimeException(e); } } /** * 获取客户端信息 * @return 客户端信息 */ private static StorageClient getClientInfo(){ return CLIENT; } /** * 上传文件[无法分段上传] * @param fileName 文件名--不需要带后缀 * @param ext 文件后缀 * @param bytes 二进制文件 * @return 参数 * <ul> * <li>结果[0]: 组名 例如:group1</li> * <li>结果[1]: 保存服务器的位置 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg</li> * </ul> * @throws InterruptedException * @throws MyException * @throws IOException */ public static String[] upload(String fileName,String ext,byte[] bytes) throws MyException, IOException { //获取连接 StorageClient connection = getClientInfo(); //设置文件介绍 NameValuePair[] pair = new NameValuePair[3]; pair[0] = new NameValuePair("fileName",fileName); pair[1] = new NameValuePair("fileExt",ext); pair[2] = new NameValuePair("fileSize",String.valueOf(bytes.length)); //上传文件 String[] strings = connection.upload_file(bytes, ext, pair); //返回具体需要的参数 return strings; } /** * 此方法只适用于本地测试使用,Springboot方法可以使用另一个方法 * @param path 图片路径 * @param ext 文件 * @param fileName 文件名称 * @return * <ul> * <li>结果[0]: 组名 例如:group1</li> * <li>结果[1]: 保存服务器的位置 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg</li> * </ul> * @throws MyException * @throws IOException */ public static String[] upload(String path,String ext,String fileName) throws MyException, IOException { //获取连接 StorageClient connection = getClientInfo(); //设置文件介绍 NameValuePair[] pair = new NameValuePair[3]; pair[0] = new NameValuePair("fileName",fileName); pair[1] = new NameValuePair("fileExt",ext); pair[2] = new NameValuePair("fileSize",Long.toBinaryString(new File(path).length())); //上传文件 String[] strings = connection.upload_file(path, ext, pair); //返回具体需要的参数 return strings; } /** * 文件下载 * @param groupName 组名 例如:group1 * @param path 完整路径 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg * @return 文件流 * @throws InterruptedException * @throws MyException * @throws IOException */ public static byte[] download(String groupName,String path) throws InterruptedException, MyException, IOException { //获取连接 StorageClient connection = getClientInfo(); //下载文件 byte[] res = connection.download_file(groupName,path); //返回文件流 return res; } /** * 删除文件 * @param groupName 组名 例如:group1 * @param path 完整路径 例如:M01/00/00/rBNTRGGKX7aEG67qAAAAAIpTlYQ431.jpg * @throws InterruptedException * @throws MyException * @throws IOException */ public static void delete(String groupName,String path) throws MyException, IOException { //获取连接 StorageClient connection = getClientInfo(); //下载文件 connection.delete_file(groupName,path); } }

参考文献

  1. 在Nginx或Tengine服务器上安装证书
  2. Fastdfs 卸载
  3. 手把手带你安装FastDFS及与SpringBoot整合【推荐食用】
  4. Centos7.x 搭建FastDFS并通过Nginx配置http或https访问

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐