FastDFS 的安装、测试【CentOS】

FastDFS 的安装、使用 【CentOS】

图片上传功能使用 FastDFS,图片上传成功之后,接下来的图片访问我们一般采用 Nginx,所以需要安装三个软件包。

  • Tracker 安装
  • Storage 安装
  • Nginx 安装

下载FastDFS及其他其他依赖库

提前下载需要的依赖库,上传到服务器/usr/local目录下备用

官网下载地址:
https://sourceforge.net/projects/fastdfs/files/
https://github.com/happyfish100/libfastcommon

1.FastDFS压缩包,本文作者使用版本为 fastdfs-6.06.tar.gz

2.libfastcommon库,本文作者使用版本为 libfastcommon-1.0.43.tar.gz

3.fastdfs-nginx-module库 ,本文作者使用版本为 fastdfs-nginx-module-1.22.tar.gz

Tracker 安装

FastDFS 依赖于C语言,因此需要安装gcc环境。

yum install gcc-c++

FastDFS还依赖于libevent 库以及FastDFS官方提供的libfastcommon库,需要从官网下载libfastcommon库。

安装libevent 库

yum -y install libevent

安装libfastcommon库

//将下载好的libfastcommon库压缩包拷贝至/usr/local下,
// 进入目录中
cd /usr/local
// 对其解压
tar -zxvf libfastcommon-1.0.43.tar.gz 
// 解压完进入文件夹中
cd libfastcommon-1.0.43
// 编译安装
./make.sh
./make.sh install

安装FastDFS

#解压FastDFS压缩包后进入目录
cd /usr/local
tar -zxvf fastdfs-6.06.tar.gz 
cd fastdfs-6.06
#编译安装
./make.sh
./make.sh install
#将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs目录下
cd conf/
cp ./* /etc/fdfs/
#进入 /etc/fdfs/ 目录下,vim打开 tracker.conf 文件
cd /etc/fdfs/
vim tracker.conf
#找到并修改以下属性:
#默认端口
port=22122
#元数据存储路径,注意更改用户名、目录要存在
base_path=/home/muxinna/fastdfs

启动Tracker

/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf start

Storage 安装

Storage 本身的安装和 Tracker 一致,命令基本一样,因为这里我将 Tracker 和 Storage 安装再同一台服务器上,所以不用再执行安装命令了(相当于安装了 Tracker 时已经安装了 Storage 了)。
如果你是配置单个服务器那么现在唯一要做的,就是进入到 /etc/fdfs 目录下,配置 Storage:

cd /etc/fdfs/
vim storage.conf
#找到并修改以下属性:
#修改自己的元数据路径,注意与之前配置一致
base_path=/home/muxinna/fastdfs
store_path0=/home/muxinna/fastdfs
#更改虚拟机/服务器 ip:port
tracker_server=192.168.202.133:22122

配置完成后,再次启动 Storage:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
Java本地客户端测试服务器软件环境:

新建Maven工程:

<dependency>
   <groupId>net.oschina.zcx7878</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0.0</version>
</dependency>

新建FastDFS 的配置文件 fastdfs-client.properties

fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
#暂时不使用FastDFS认证
fastdfs.http_anti_steal_token = false
#FastDFS认证秘钥,可自定义
fastdfs.http_secret_key = FastDFS123
fastdfs.http_tracker_http_port = 80
#Tracker服务器配置ip:port
fastdfs.tracker_servers = 192.168.202.133:22122
fastdfs.connection_pool.enabled = true
fastdfs.connection_pool.max_count_per_entry = 500
fastdfs.connection_pool.max_idle_time = 3600
fastdfs.connection_pool.max_wait_time_in_ms = 1000

新建Test.java

//最后调用 client 的 upload_file1 方法上传文件,第一个参数是文件路径,第二个参数是文件的扩展名,第三个参数是文件的元数据信息,这个方法的返回值,就是上传文件的访问路径,执行该方法


@Test
void contextLoads() throws IOException, MyException {
    //加载配置文件
    ClientGlobal.initByProperties("fastdfs-client.properties");
    //构造一个 TrackerClient 对象,接着再跟据这个对象获取到一个 TrackerServer,然后再创建一个 StorageClient1 实例。
    TrackerClient trackerClient = new TrackerClient();
    TrackerServer trackerServer = trackerClient.getConnection();
    StorageServer storageServer = null;
    StorageClient1 client1 = new StorageClient1(trackerServer, storageServer);
    //NameValuePair 中保存的就是文件的元数据信息,如果有的话,就以 key/value 的方式来设置,如果没有直接给一个 null 即可。
    NameValuePair pairs[] = null;
    //调用 client 的 upload_file1 方法上传文件
    //第一个参数是文件路径,第二个参数是文件的扩展名,第三个参数是文件的元数据信息,这个方法的返回值,就是上传文件的访问路径
    String fileId = client1.upload_file1("D:test.jpg", "jpg", pairs);
    System.out.println(fileId);
}

会生成以下打印日志即为上传成功:

group1/M00/00/00/wKj9gh6dokqASBDQATNK8J10-TU753.jpg

Nginx配置FastDFS

  • 这时我们就可以通过安装 Nginx 来完成访问图片的功能:
  • Nginx 的安装分为两个步骤:
    • 安装 Nginx
    • 在 Storage 下安装 fastdfs-nginx-module

下载 Nginx:

wget http://nginx.org/download/nginx-1.17.0.tar.gz

解压下载的目录,进入解压目录中,注意记住解压目录位置,后面还会需要。

在编译安装之前,需要安装两个依赖,并编译安装

#下载依赖
yum -y install pcre-devel
yum -y install openssl openssl-devel
#进入Nginx解压目录,省略
#编译安装
./configure
make
make install
#装好之后,默认安装位置:/usr/local/nginx/sbin/nginx

安装fastdfs-nginx-module:

cd /usr/local
tar -zxvf fastdfs-nginx-module-1.22.tar.gz 

将 /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf 文件拷贝到 /etc/fdfs 目录下,并修改文件配置:

cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
#修改ip:port
tracker_server=192.168.202.133:22122

url_hava_group_name=true

#注意与之前路径保持一致
store_path0=/home/muxinna/fastdfs

回到 nginx 安装文件的解压目录中,重新配置编译安装:

./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src
make
make install

修改Nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
#更改为root
user root;
worker _processes 1 ;

events {
	worker_connections 1024;
}

http {
	include  mime.types;
	default_type application/octet-stream;
	sendfile on;
	keepalive_timeout 65;
    server{
        listen 80;
        server_name localhost;
        #新加内容
        location  ~/group([0-9]) {
            root  /home/muxinna/fastdfs/data;
            ngx_fastdfs_module;
    	}
}

启动Nginx:

#首先进入 nginx 的目录中去
cd /usr/local/nginx/sbin/
#启动 nginx 
./nginx
#启动成功后的打印日志
ngx_http_fastdfs_set pid=20771

此时在浏览器中输入http://192.168.202.133/group1/M00/00/00/wKj9gh6dokqASBDQATNK8J10-TU753.jpg就可以看到上传的图片了。

如果访问http://192.168.202.133能够正常出现Nginx启动页,但是图片无法访问,显示404,以下为解决措施:

  • /etc/fdfs/storage.conf中http.server_port与/usr/local/nginx/conf/nginx.conf中的listen端口号一致,storage.conf中默认的端口是8888,nginx.conf中listen端口为80,建议更改storage.conf中默认的端口

  • 若修改为8888端口需要对8888端口开启防火墙,或者关闭服务器防火墙

  • nginx.conf 第一行 user nobody 修改为 user root 。

  • 保存,重启nginx服务 /usr/local/nginx/sbin/nginx -s reload

  • 检查是否开启22122端口,或者关闭服务器防火墙

Java客户端文件下载
//调用 download_file1 方法获取到一个 byte 数组,然后通过IO 流写出到本地文件
@Test
void download() throws IOException, MyException {
    ClientGlobal.initByProperties("fastdfs-client.properties");
    TrackerClient trackerClient = new TrackerClient();
    TrackerServer trackerServer = trackerClient.getConnection();
    StorageServer storageServer = null;
    StorageClient1 client1 = new StorageClient1(trackerServer, storageServer);
    byte[] bytes = client1.download_file1("group1/M00/00/00/wKj9gh6dokqASBDQATNK8J10-TU753.jpg");
    FileOutputStream fos = new FileOutputStream(new File("D:\\2.jpg"));
    fos.write(bytes);
    fos.close();
}

FastDFS令牌验证

此时任何用户都可以直接访问到我们服务器上的文件,极不安全,可以在上传时加上令牌验证。

服务器开启令牌校验:

vim /etc/fdfs/http.conf
#开启令牌校验
http.anti_steal.check_token=true
#与Java客户端秘钥配置一致
http.anti_steal.secret_key=Fast123

重启Nginx

/usr/local/nginx/sbin/nginx -s reload
Java客户端携带令牌访问
@Test
void getToken() throws UnsupportedEncodingException, NoSuchAlgorithmException, MyException {
int ts = (int) Instant.now().getEpochSecond();
String token = ProtoCommon.getToken(
    "M00/00/00/wKj9gF6dkA-AeHQ1AAAT8J10-TU507.jpg", 
    ts, 
    "FastDFS123"
);
StringBuilder sb = new StringBuilder();
sb.append("http://192.168.202.133")
.append("/group1/M00/00/00/wKj9gF6dkA-AeHQ1AAAT8J10-TU507.jpg")
.append("?token=")
.append(token)
.append("&ts=")
.append(ts);
System.out.println(sb.toString());
}

跟据 ProtoCommon.getToken 方法来获取令牌,

  • 第一个参数就是你要访问的文件 id,地址内不要包含 group。
  • 第二个参数是时间戳。
  • 第三个参数是密钥,密钥要和服务端的配置一致。

运行此方法,访问了控制台输出路径,如果此时将路径中的 token去掉,就会访问失败,默认展示的就是 Nginx 的默认404页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值