CentOS7安装FastDFS并集成nginx

5 篇文章 0 订阅

前言:FastDFS 我也是第一次玩,在安装的过程当中我搜集了很多资料,整了很长时间。我发现百度上虽然有很多的资料,但是大多数资料讲解的都不是很详细,对于我这种菜鸟来说,有很多的困扰,到现在也没有弄明白。但是经过不懈的努力,终于是初步的把环境给搭起来了,经过初步测试,暂时没有发现问题,能正常使用,所以我想把这个过程详细的写下来,一是加强自己的记忆,二是以后忘记了也能翻出来看看,三是为了能够给像我一样的菜鸟提供一点参考意见。

首先,tracker 和 storage 可以装在同一台虚拟机上,也可以分开装在两台虚拟机上。
准备安装包:
① libfastcommonV1.0.7.tar.gz
② FastDFS_v5.05.tar.gz
③ nginx-1.8.0.tar.gz

开始安装!(基于CentOS7,我装了两台tracker、两台storage)

1. tracker 和 storage 公共部分的安装(tracker 和 storage 都是 FastDFS 的一部分,所以它们有一些共同的环境依赖,四台虚拟机都需要安装下面的环境)

1.1 安装 FastDFS 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc 环境。
安装命令:yum install gcc-c++
1.2 FastDFS 依赖 libevent 库,所以需要安装 libevent 。
安装命令:yum -y install libevent
1.3 ,libfastcommon 包含了 FastDFS 运行所需要的一些基础库,所以需要安装 libfastcommon 。

	1.3.1 将 libfastcommonV1.0.7.tar.gz 拷贝至/usr/local/下(没有的话自己去下载)
	1.3.2 cd /usr/local
	1.3.3 解压:tar -zxvf libfastcommonV1.0.7.tar.gz
	1.3.4 解压完成后,进入安装目录:cd libfastcommon-1.0.7
	1.3.5 编译:./make.sh
	1.3.6 安装:./make.sh install
	注意:libfastcommon 安装好后会自动将库文件拷贝至/usr/lib64下,由于 FastDFS 程序引用 usr/lib 目录所以需要将/usr/lib64 下的库文件拷贝至/usr/lib 下。
	要拷贝的文件如下:/usr/lib64/libfastcommon.so
	拷贝命令:cp /usr/lib64/libfastcommon.so /usr/lib/
1.4 FastDFS 安装(其实 FastDFS 安装好后就包含了 tracker 和storage ,而我们说的安装 tracker 和安装 storage 其实是对安装了 FastDFS 的虚拟机进行一些不同的配置)
	1.4.1 将 FastDFS_v5.05.tar.gz 拷贝至/usr/local/下(没有自己去下载)
	1.4.2 解压:tar -zxvf FastDFS_v5.05.tar.gz
	1.4.3 解压完成后,进入安装目录:cd FastDFS
	1.4.4 编译:./make.sh
	1.4.5 安装:./make.sh install
	1.4.6 安装成功后将安装目录下的 conf 目录下的文件拷贝到/etc/fdfs/下,需要拷贝的文件如下图

在这里插入图片描述
注意:无论你要装多少台 tracker 和 storage 都要走上面这几步,也就是每台虚拟机上面都要装这些东西。

2. 安装 tracker (其实 tracker 已经安装好了,现在是来配置 tracker ,你准备把哪台虚拟机作为 tracker 使用,就在哪台虚拟机上配置。我这里配置的是 192.168.43.168 和 192.168.43.242 两台虚拟机)

2.1 进入/etc/fdfs 目录:cd /etc/fdfs
2.2 拷贝一份新的 tracker 配置文件:cp tracker.conf.sample tracker.conf
2.3 修改 tracker.conf:vim ./tracker.conf
base_path=/home/yuqing/FastDFS
改为:
base_path=/home/FastDFS
配置 http 端口:
http.server_port=80
2.4 创建文件夹(/home/FastDFS 文件夹是不会自动创建的,如果不自行创建的话,fdfs_tracker 将无法启动):mkdir /home/FastDFS/
2.5 启动:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

启动的日志显示先停止 8180 进程(你的环境下不是 8180 了)再启动,如下图:在这里插入图片描述

注意:
①有可能你启动的时候没有任何日志输出,这个有可能是没有正常关闭造成的,你只需要再尝试启动一次就行了。启动成功了,就说明 tracker 没问题了。
②作为 tracker 的两台虚拟机一样配置就行。
③你在配置 tracker 的时候用到了两个端口 (22122、80),你得确保这两个端口是开放的,执行下图命令,ports 那一行就是你所有开放的端口,如果没有,那你得开放这两个端口在这里插入图片描述

3. 安装 storage(其实 storage 也已经安装好了,现在是配置 storage ,你想用哪台虚拟机做 storage ,那就在哪台虚拟机上进行配置。我这里配置的是 192.168.43.224 和 192.168.43.2 这两台虚拟机)

3.1 进入/etc/fdfs 目录:cd /etc/fdfs
3.2 拷贝一份新的 storage 配置文件:cp storage.conf.sample storage.conf
3.3 修改 storage.conf:vim ./storage.conf
需要修改的内容:
group_name=group1
base_path=/home/yuqing/FastDFS 改为:base_path=/home/FastDFS
store_path0=/home/yuqing/FastDFS 改为:store_path0=/home/fastdfs/fdfs_storage
#如果有多个挂载磁盘则定义多个 store_path,如下
#store_path1=.....
#store_path2=......
tracker_server=192.168.43.168:22122 #配置 tracker 服务器:IP
#如果有多个则配置多个 tracker
tracker_server=192.168.43.242:22122
#配置 http 端口
http.server_port=80
3.4 创建文件夹(/home/FastDFS 在上面已经创建过了,只需要再创建 /home/fastdfs/fdfs_storage 即可):mkdir /home/fastdfs/fdfs_storage/
3.5 启动:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

启动的日志显示先停止 56244 进程(你的环境就不是 56244 了)再启动,如下图:在这里插入图片描述
注意:
①有可能你启动的时候没有任何日志输出,这个有可能是没有正常关闭造成的,你只需要再尝试启动一次就行了。启动成功了,就说明 storage 没问题了。
②作为 storage 的两台虚拟机一样配置就行。
③你在配置 storage 的时候用到了两个端口 (23000、80),你得确保这两个端口是开放的,执行下图命令,ports 那一行就是你所有开放的端口,如果没有,那你得开放这两个端口;如果你的 tracker 和 storage 安装在一台服务器上的话,那必须要保证端口不能有冲突,这里就需要把 80 端口换成其他端口。在这里插入图片描述
④tracker 和 storage 都配置并启动好之后查看一下进程,确保没有问题即可。使用命令:ps -ef | grep fdfs ,出现如下图所示结果即可。
在这里插入图片描述

4. 安装 nginx (tracker 上不需要安装,只需要在 storage 上安装即可)

4.1 安装 nginx 所需要的环境
	4.1.1 安装 gcc 的环境。
	安装命令:yum install gcc-c++
	注意:这一步在安装 FastDFS 的时候做过,所以可以省略。
	4.1.2 nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。
	安装命令:yum install -y pcre pcre-devel
	4.1.3 zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。
	安装命令:yum install -y zlib zlib-devel
	4.1.4 OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux安装 openssl 库。
	安装命令:yum install -y openssl openssl-devel
4.2 安装 nginx
	4.2.1 把 nginx 的源码包 nginx-1.8.0.tar.gz上传到 /usr/local (源码包没有自己去下载)
	4.2.2 解压:tar -zxvf nginx-1.8.0.tar.gz
	4.2.3 解压完成后,进入安装目录:cd nginx-1.8.0/
	4.2.4 使用 configure 命令创建一 makeFile 文件(下面这是一个命令)
	./configure \
	--prefix=/usr/local/nginx \
	--add-module=/usr/local/fastdfs-nginx-module/src
	(注意:--prefix=/usr/local/nginx \ 这一行是指向nginx的启动目录,不需要更改,默认就行,目录/usr/local/nginx/ 没有自己创建一下。/usr/local/nginx-1.8.0 是nginx解压后的目录,但是/usr/local/nginx 是nginx的启动目录,默认是没有的,需要自己创建。 --add-module=/usr/local/fastdfs-nginx-module/src 这一行是指向 fastdfs-nginx-module 模块的src目录的,按照自己的情况进行更改就好,后面整合的时候会有,暂时不用关心。
	)
	执行上面这一条命令后可以看到 Makefile 文件,如图:

在这里插入图片描述

	4.2.5 编译:make
	注意:这一步如果报错的话,执行如下命令再重新执行 make 命令
			  ① yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel
			  ② ./configure
	4.2.6 安装:make install
	4.2.7 启动nginx 之前,上边将临时文件目录指定为/var/temp/nginx/client, 需要在/var 下创建此目录:mkdir /var/temp/nginx/client -p
	4.2.8 进入到Nginx目录下的sbin目录:cd /usr/local/nginx-1.8.0/sbin
	4.2.9 启动Nginx:./nginx
	4.2.10 启动后查看进程:ps -ef | grep nginx

在这里插入图片描述

	附赠:关闭 nginx 命令:./nginx -s stop
	    	重启 nginx 命令:./nginx -s reload

5. 整合 FastDFS 和 nginx

5.1 将 fastdfs-nginx-module_v1.16.tar.gz 上传到 storage 服 务 器 的 /usr/local/ 下(没有 fastdfs-nginx-module_v1.16.tar.gz 的话自己下载)
5.2 cd /usr/local/
5.3 解压:tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
5.4 解压完成后进入安装目录:cd fastdfs-nginx-module/src
5.5 修改 config 文件:vim config
修改内容:将/usr/local/路径改为/usr/  (有三处要改,改成下图所示)

在这里插入图片描述

5.6 将 fastdfs-nginx-module/src 下的 mod_fastdfs.conf 拷贝至/etc/fdfs/下:cp mod_fastdfs.conf /etc/fdfs/
5.7 修改 mod_fastdfs.conf 的内容:vim /etc/fdfs/mod_fastdfs.conf
修改内容:
base_path=/home/fastdfs
tracker_server=192.168.43.168:22122
tracker_server=192.168.43.242:22122
url_have_group_name=true 	#url 中包含 group 名称
store_path0=/home/fastdfs/fdfs_storage #指定文件存储路径
#如果有多个
5.8 将 libfdfsclient.so 拷贝至/usr/lib 下:cp /usr/lib64/libfdfsclient.so /usr/lib/
5.9 创建 nginx/client 目录:mkdir -p /var/temp/nginx/client
5.10 进入nginx的启动目录/usr/local/nginx,修改 nginx.conf :
 	   cd /usr/local/nginx/conf/
5.11 添加虚拟主机 :
	   	server {
		 listen 80;
		 
		 server_name 192.168.101.65;
		 location /group1/M00/{
			 root /home/FastDFS/fdfs_storage/data;
			 ngx-fastdfs-module;
		 }

如图:
在这里插入图片描述
说明:
server_name 指定当前虚拟机的 ip
location /group1/M00/:group1 为 nginx 服务 FastDFS 的分组名称,M00 是 FastDFS
自动生成编号,对应 store_path0=/home/FastDFS/fdfs_storage,如果 FastDFS 定义
store_path1,这里就是 M01。
ngx_fastdfs_module 是固定的,不用变。

6. 启动
1、启动tracker:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
2、启动storage:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
3、启动storage上的nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4、启动图片虚拟主机(本机上的) nginx

7. 测试

7.1 直接在虚拟机上测试

	FastDFS 安装成功可通过/usr/bin/fdfs_test 程序来测试上传、下载等操作。
	7.1.1 修改/etc/fdfs/client.conf :vim /etc/fdfs/client.conf
	修改内容:
	base_path=/home/fastdfs
	tracker_server=192.168.43.168:22122
	tracker_server=192.168.43.242:22122
	7.1.2 上传图片的命令格式:/usr/bin/fdfs_test 客户端配置文件地址 upload 上传文件
	比如将/home 下的图片上传到 FastDFS 中:
	/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/tomcat.jpg 
	7.1.3 上传成功后打印的日志如下

在这里插入图片描述

7.2 java 代码测试
7.2.1 创建一个简单的SpringBoot项目,目录结构如下
在这里插入图片描述
7.2.2 pom.xml

	<?xml version="1.0" encoding="UTF-8"?>
	<project xmlns="http://maven.apache.org/POM/4.0.0"
	         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	    <parent>
	        <artifactId>xc-framework-parent</artifactId>
	        <groupId>com.xuecheng</groupId>
	        <version>1.0-SNAPSHOT</version>
	        <relativePath>../xc-framework-parent/pom.xml</relativePath>
	    </parent>
	    <modelVersion>4.0.0</modelVersion>
	
	    <artifactId>test-fastdfs</artifactId>
	    <dependencies>
	        <dependency>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-starter-web</artifactId>
	        </dependency>
	        <!-- 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>
	        <dependency>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-starter-test</artifactId>
	            <scope>test</scope>
	        </dependency>
	        <dependency>
	            <groupId>org.apache.commons</groupId>
	            <artifactId>commons-io</artifactId>
	            <version>1.3.2</version>
	        </dependency>
	    </dependencies>
	
	</project>

7.2.3 fastdfs-client.properties

	fastdfs.connect_timeout_in_seconds = 30 #http连接超时时间
	fastdfs.network_timeout_in_seconds = 30 #tracker与storage网络通信超时时间
	fastdfs.charset = UTF-8 #字符编码
	fastdfs.tracker_servers = 192.168.43.168:22122,192.168.43.242:22122 #tracker服务器地址,多个地址中间用英文逗号分隔

注意:这里最好不要把注释写进配置文件,否则可能造成格式问题,导致程序抛异常。

7.2.4 测试类 TestFastDFS

	package com.xuecheng.test.fastdfs;
	
	import org.csource.common.MyException;
	import org.csource.fastdfs.*;
	import org.junit.Test;
	import org.junit.runner.RunWith;
	import org.springframework.boot.test.context.SpringBootTest;
	import org.springframework.test.context.junit4.SpringRunner;
	
	import java.io.File;
	import java.io.FileOutputStream;
	import java.io.IOException;
	
	/**
	 * @author Administrator
	 * @version 1.0
	 **/
	@SpringBootTest
	@RunWith(SpringRunner.class)
	public class TestFastDFS {
	
	    //上传文件
	    @Test
	    public void testUpload() {
	        try {
	            //加载fastdfs‐client.properties配置文件
	            ClientGlobal.initByProperties("config/fastdfs-client.properties");
	            System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
	            System.out.println("charset=" + ClientGlobal.g_charset);
	            //定义TrackerClient,用于请求TrackerServer
	            TrackerClient trackerClient = new TrackerClient();
	            //连接tracker Server
	            TrackerServer trackerServer = trackerClient.getConnection();
	            if (trackerServer == null) {
	                System.out.println("getConnection return null");
	                return;
	            }
	            //获取一个storage server
	            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
	            if (storageServer == null) {
	                System.out.println("getStoreStorage return null");
	            }
	            //创建一个storage存储客户端
	            StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
	            //本地文件的路径
	            String filePath = "D:\\pictures\\coffer.jpg";
	            String fileId = null;
	            //文件上传成功后会返回一个文件id
	            fileId = storageClient1.upload_file1(filePath, "jpg", null);
	            System.out.println("Upload local file " + filePath + " ok, fileid=" + fileId);
	        } catch (Exception ex) {
	            ex.printStackTrace();
	        }
	    }
	
	    //查询文件
	    @Test
	    public void testQueryFile() throws IOException, MyException {
	        //加载fastdfs‐client.properties配置文件
	        ClientGlobal.initByProperties("config/fastdfs-client.properties");
	        //定义TrackerClient,用于请求TrackerServer
	        TrackerClient trackerClient = new TrackerClient();
	        //连接tracker Server
	        TrackerServer trackerServer = trackerClient.getConnection();
	        if (trackerServer == null) {
	            System.out.println("getConnection return null");
	            return;
	        }
	        //获取一个storage server
	        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
	        if (storageServer == null) {
	            System.out.println("getStoreStorage return null");
	        }
	        //定义StorageClient,用于请求storage server
	        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
	        FileInfo fileInfo = storageClient.query_file_info("group1",
	                "M00/00/00/wKgrAl3CKQ2AdFzHAAMLFm7ARCE630.jpg");
	        System.out.println(fileInfo);
	    }
	
	    //下载文件
	    @Test
	    public void testDownloadFile() throws IOException, MyException {
	        //加载fastdfs‐client.properties配置文件
	        ClientGlobal.initByProperties("config/fastdfs-client.properties");
	        //定义TrackerClient,用于请求TrackerServer
	        TrackerClient trackerClient = new TrackerClient();
	        //连接tracker Server
	        TrackerServer trackerServer = trackerClient.getConnection();
	        if (trackerServer == null) {
	            System.out.println("getConnection return null");
	            return;
	        }
	        //获取一个storage server
	        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
	        if (storageServer == null) {
	            System.out.println("getStoreStorage return null");
	        }
	        //定义StorageClient1,用于请求storage server
	        StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
	        //根据文件id下载文件
	        byte[] result = storageClient1.download_file1("group1/M00/00/00/wKgrAl3CIluAG3syAAMLFm7ARCE883.jpg");
	        File file = new File("d:/1.png");
	        //使用输出流保存文件
	        FileOutputStream fileOutputStream = new FileOutputStream(file);
	        fileOutputStream.write(result);
	        fileOutputStream.close();
	    }
	
	
	}

后话:写了很久,希望能帮到有需要的人,如果发现有什么错误或者有什么遗漏的地方,希望指正一下。谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值