ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FastDFS服务器安装以及使用

2022-07-24 19:35:39  阅读:181  来源: 互联网

标签:fastdfs FastDFS nginx usr conf 服务器 fdfs 安装


前提介绍

  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

安装初始环境

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

安装libfastcommon

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

#解压
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

#解压
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

防火墙配置

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

# 开启防护墙
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

# 创建一个存储路径 这个路径随意,用于存储。配置的时候需要用到这个路径。注意了
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

# 将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. 查看进程是否开启

    netstat -unltp|grep fdfs
    

    image

  2. 上传一个文件

    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

安装初始环境

#安装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标签

# 解压文件
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

修改配置文件

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

image

安装Nginx

# 解压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
# 在原有的server里面随便找个空单,直接添加下面这句话就行了
server {
	# 如果访问路径为/group1/M00就将他直接转发给fastdfs-nginx处理而不是服务器处理
	location ~/group1/M00{
		ngx_fastdfs_module;
	}
}
# 启动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

防火墙

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

证书安装

# 首先准备好证书,笔者是阿里云的证书,直接下载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
# ————————————————————————————此教程来源于阿里云官方教程————————————————————————————
# ————————————————————————————这些可以直接复制过去然后根据备注修改————————————————————————————
#以下属性中,以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。

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

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

# 第一步一定是查看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配置文件

# 进入配置文件目录
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服务

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

# 停止服务
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

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

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

<!-- 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。配置的内容如下

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

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

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

/**
 * 该类用于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访问

标签:fastdfs,FastDFS,nginx,usr,conf,服务器,fdfs,安装
来源: https://www.cnblogs.com/musiro/p/16512013.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有