前言

  目前项目是tomcat单机部署的,图片、视频也是上传到tomcat目录下,关键是此项目的主要内容还就是针对图片、视频的,这让我非常担忧;文件服务器的应用是必然的,而且时间还不会太久。之前一直有听说fastdfs,但一直没去认真琢磨他,最近才开始去研究它,今天只是去搭建一个简单的单机版,集群版后续再出;至于架构、原理什么我就不写了,网上资料非常多。

环境准备

  系统:Centos6.7

  fastdfs:到https://github.com/happyfish100下载,都下载最新的:fastdfs-master、libfastcommon-master、fastdfs-nginx-module-master,避免版本问题

  Linux终端工具:xshell、xftp

Linux ip:192.168.1.207

fastdfs安装

上传相关包到/opt下,如图

  安装zip、unzip

[root@fastdfs2 opt]# yum install -y unzip zip

解压fastdfs-master.zip

[root@fastdfs2 opt]# unzip -o fastdfs-master.zip -d /usr/local

编译安装fast

[root@fastdfs2 opt]# cd /usr/local/fastdfs-master

[root@fastdfs2 fastdfs-master]# ./make.sh

报错:./make.sh: line 146: perl: command not found

安装perl

[root@fastdfs2 fastdfs-master]# yum -y install perl

再运行./make.sh,报错:make: cc:命令未找到

安装gcc

[root@fastdfs2 fastdfs-master]# yum install gcc-c++

再运行./make.sh,仍出现如下错误:

    缺少libfastcommon中的相关基础库

安装libfastcommon

解压libfastcommon-master.zip

[root@fastdfs2 fastdfs-master]# cd /opt

[root@fastdfs2 opt]# unzip -o libfastcommon-master.zip -d /usr/local

安装libfastcommon

[root@fastdfs2 opt]# cd /usr/local/libfastcommon-master/

[root@fastdfs2 libfastcommon-master]# ./make.sh

[root@fastdfs2 libfastcommon-master]# ./make.sh install

再装fastdfs

[root@fastdfs2 local]# cd /usr/local/fastdfs-master/

[root@fastdfs2 fastdfs-master]# ./make.sh

[root@fastdfs2 fastdfs-master]# ./make.sh install

拷贝配置文件

将fastdfs安装目录下的conf下的文件拷贝到/etc/fdfs/下

[root@fastdfs2 fastdfs-master]# cp -r conf/* /etc/fdfs/

自此fastdfs安装完成了,接下来配置trackerd和storaged,并启动它们。

  fdfs可执行命令

  [root@fastdfs2 fdfs]# ll /usr/bin/fdfs*

-rwxr-xr-x. 1 root root 210899 6月   8 21:00 /usr/bin/fdfs_appender_test
-rwxr-xr-x. 1 root root 210868 6月 8 21:00 /usr/bin/fdfs_appender_test1
-rwxr-xr-x. 1 root root 198740 6月 8 21:00 /usr/bin/fdfs_append_file
-rwxr-xr-x. 1 root root 198044 6月 8 21:00 /usr/bin/fdfs_crc32
-rwxr-xr-x. 1 root root 198735 6月 8 21:00 /usr/bin/fdfs_delete_file
-rwxr-xr-x. 1 root root 199112 6月 8 21:00 /usr/bin/fdfs_download_file
-rwxr-xr-x. 1 root root 198960 6月 8 21:00 /usr/bin/fdfs_file_info
-rwxr-xr-x. 1 root root 211836 6月 8 21:00 /usr/bin/fdfs_monitor
-rwxr-xr-x. 1 root root 762687 6月 8 21:00 /usr/bin/fdfs_storaged
-rwxr-xr-x. 1 root root 212997 6月 8 21:00 /usr/bin/fdfs_test
-rwxr-xr-x. 1 root root 212618 6月 8 21:00 /usr/bin/fdfs_test1
-rwxr-xr-x. 1 root root 329821 6月 8 21:00 /usr/bin/fdfs_trackerd
-rwxr-xr-x. 1 root root 199076 6月 8 21:00 /usr/bin/fdfs_upload_appender
-rwxr-xr-x. 1 root root 203766 6月 8 21:00 /usr/bin/fdfs_upload_file

配置并启动trackerd

修改trackerd.conf

不改也可以,但是要保证/home/yuqing/fastdfs路径存在

[root@fastdfs2 fdfs]# cd /etc/fdfs/

[root@fastdfs2 fdfs]# vi tracker.conf

将base_path=/home/yuqing/fastdfs改成base_path=/data/fastdfs

创建trackerd数据、日志目录

[root@fastdfs2 fdfs]# mkdir -p /data/fastdfs

启动trackerd

[root@fastdfs2 fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

查看trackerd进程,如下图:

    说明trackered已经启动起来;其实也可以查看日志:/data/fastdfs/logs/trackerd.log,来判断trackerd是否正常启动起来。

配置并启动storaged

修改storage.conf

[root@fastdfs2 fdfs]# cd /etc/fdfs/

[root@fastdfs2 fdfs]# vi storage.conf

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

store_path0=/home/yuqing/fastdfs改为:store_path0=/data/fastdfs/storage

tracker_server=192.168.209.121:22122改为:tracker_server=192.168.1.207:22122,这个ip改成自己的

创建storaged数据、日志目录

[root@fastdfs2 fdfs]# mkdir -p /data/fastdfs/storage

启动storaged

[root@fastdfs2 fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

查看storaged进程,如下图:

    说明storaged已经启动起来;其实也可以查看日志:/data/fastdfs/logs/storaged.log来判断storaged是否正常启动起来。

上传图片测试

本地(win环境)安装fastdfs连接驱动

从https://github.com/happyfish100/fastdfs-client-java下载源码,我下载的是zip包,解压后目录如下图:

    maven本地安装:mvn clean install

    

    当然也可以用ant构建:ant clean package

  书写测试代码

    代码结构如图

    fdfs_client_mine.conf:

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890 tracker_server = 192.168.1.207:22122

FastdfsClientTest.java:

package com.lee.fastdfs.test;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.junit.Test; import java.io.FileNotFoundException;
import java.io.IOException; public class FastdfsClientTest { //客户端配置文件
public String conf_filename = "fdfs_client_mine.conf";
//本地文件,要上传的文件
public String local_filename = "G:\\IdeaProjects\\fastdfs\\src\\main\\resources\\mygirl.jpg"; //上传文件
@Test
public void testUpload() { for(int i=0;i<10;i++){ try {
ClientGlobal.init(conf_filename); TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null; StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
NameValuePair nvp [] = new NameValuePair[]{
new NameValuePair("item_id", "100010"),
new NameValuePair("width", "80"),
new NameValuePair("height", "90")
};
String fileIds[] = storageClient.upload_file(local_filename, null,
nvp); System.out.println(fileIds.length);
System.out.println("组名:" + fileIds[0]);
System.out.println("路径: " + fileIds[1]); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
} }

上传图片:mygirl.jpg

执行测试代码,当输出如下信息时,表示上传成功:

2
组名:group1
路径: M00/00/00/wKgBz1salX-AKZMdAABHO7x65CM183.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-ATR4PAABHO7x65CM553.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-AKFyFAABHO7x65CM038.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-ASse4AABHO7x65CM705.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-AKUn7AABHO7x65CM247.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-AdT4cAABHO7x65CM342.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-AR0V0AABHO7x65CM992.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-AMpoLAABHO7x65CM691.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-AcjanAABHO7x65CM587.jpg
2
组名:group1
路径: M00/00/00/wKgBz1salX-Ab8qnAABHO7x65CM687.jpg

    我们到服务器上看看,图片确实已经上传了,如下图:

    由于现在还没有和nginx整合无法使用http下载。

FastDFS 和nginx整合

fastdfs-nginx-module安装

解压

[root@fastdfs2 00]# cd /opt

[root@fastdfs2 opt]# unzip -o fastdfs-nginx-module-master.zip -d /usr/local

拷贝配置文件

[root@fastdfs2 opt]# cd /usr/local/fastdfs-nginx-module-master/src

[root@fastdfs2 src]# cp mod_fastdfs.conf /etc/fdfs/

编辑配置文件

[root@fastdfs2 src]# cd /etc/fdfs/

[root@fastdfs2 fdfs]# vi mod_fastdfs.conf

base_path=/tmp改成:base_path=/data/fastdfs

tracker_server=tracker:22122改成:tracker_server=192.168.1.207:22122

url_have_group_name = false改成:url_have_group_name = true;#url中包含group名称

store_path0=/home/yuqing/fastdfs改成:store_path0=/data/fastdfs/storage

nginx安装

nginx依赖包安装

[root@fastdfs2 fdfs]# cd /opt

[root@fastdfs2 opt]# yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

解压nginx

[root@fastdfs2 opt]# tar -zxvf nginx-1.13.12.tar.gz

安装nginx并添加fastdfs模块

[root@fastdfs2 opt]# cd nginx-1.13.12

[root@fastdfs2 nginx-1.13.12]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src

[root@fastdfs2 nginx-1.13.12]# make

[root@fastdfs2 nginx-1.13.12]# make install

检查nginx模块

[root@fastdfs2 nginx-1.13.12]# cd /usr/local/nginx/sbin/

[root@fastdfs2 sbin]# ./nginx -V

nginx version: nginx/1.13.12
uilt by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src

已经把fastdfs模块添加进去了。

配置nginx配置文件

[root@fastdfs2 sbin]# cd /usr/local/nginx/conf

[root@fastdfs2 conf]# vi nginx-fdfs.conf

内容如下,ip注意改成自己的:

events {
use epoll; worker_connections 1024;
}
http {
server {
listen 80;
server_name 192.168.1.207; location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
server {
listen 8888;
server_name 192.168.1.207;
location / {
root html;
index index.html index.htm;
}
}
}

  启动nginx

[root@fastdfs2 conf]# cd /usr/local/nginx/sbin/

[root@fastdfs2 sbin]# ./nginx -c /usr/local/nginx/conf/nginx-fdfs.conf

访问图片

文件路径在上面的上传图片的测试代码中有输入,我们进行拼装下:

http://192.168.1.207/group1/M00/00/00/wKgBz1salX-ATR4PAABHO7x65CM553.jpg

总结

  1、fastdfs相关包推荐直接到官网下载,能避免因为版本而造成的问题

  2、上传成功而访问却出现nginx:400问题,极有可能url_have_group_name = false没有改成:url_have_group_name = true;

  大家搭建的时候一定要细心再细心,也祝大家能够顺利的完成!(我是搭建了一段时间,中间各种小插曲)

详细的最新版fastdfs单机版搭建的更多相关文章

  1. FastDfs单机版搭建

    详细的最新版fastdfs单机版搭建 前言 目前项目是tomcat单机部署的,图片.视频也是上传到tomcat目录下,关键是此项目的主要内容还就是针对图片.视频的,这让我非常担忧:文件服务器的应用是必 ...

  2. (转)超详细单机版搭建hadoop环境图文解析

                        超详细单机版搭建hadoop环境图文解析   安装过程: 一.安装Linux操作系统 二.在Ubuntu下创建hadoop用户组和用户 三.在Ubuntu下安装 ...

  3. FastDFS:搭建文件管理系统

    文章转自:https://www.cnblogs.com/chiangchou/p/fastdfs.html#_label1 一.FastDFS介绍 FastDFS开源地址:https://githu ...

  4. docker安装fastdfs单机版

    docker search fastdfs INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/season/fas ...

  5. FastDFS 环境搭建

    原文地址:FastDFS 环境搭建 博客地址:http://www.extlight.com 一.前言 最近闲下来,整理了一下笔记,今天就分享一下 FastDFS 环境搭建吧. 二.介绍 2.1 Fa ...

  6. Flutter实战视频-移动电商-42.详细页_UI主页面架构搭建

    42.详细页_UI主页面架构搭建 详细分成六大部分拆分开 body里面用FutureBuilder异步加载. FutureBuilder里面的furure属性这里用一个方法,必须返回的也是future ...

  7. docker安装部署、fastDFS文件服务器搭建与springboot项目接口

    一.docker安装部署 1.更新yum包:sudo yum update 2.安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动 ...

  8. 超详细单机版搭建hadoop环境图文解析

    前言: 年前,在老大的号召下,我们纠集了一帮人搞起了hadoop,并为其取了个响亮的口号“云在手,跟我走”.大家几乎从零开始,中途不知遇到多少问题,但终 于在回家之前搭起了一个拥有12台服务器的集群, ...

  9. FastDFS单机搭建以及java客户端Demo

    http://blog.csdn.net/u012453843/article/details/69951920 http://blog.csdn.net/xyang81/article/detail ...

随机推荐

  1. How Xtuner E3 works for BMW 520d Diagnosis and initialization of CBS service

    Using Xtuner E3 to perform BMW 520d Diagnosis and initialization of CBS service in step by step proc ...

  2. [C#]GetFloat提示"指定的转换无效"

    数据库中没有double型,float就表示double值.sql server数据库字段类型与.net的数据类型的对应关系: real(数据库)<--> float(.NET)float ...

  3. Java:内部接口

    1.什么是内部接口 内部接口也称为嵌套接口,即在一个接口内部定义另一个接口.举个例子,Entry接口定义在Map接口里面,如下代码: public interface Map { interface ...

  4. boost--日期处理

    1.timer 不同于系统函数的timer()一般生成一个定时器,boost中的timer是一个计时器,以秒为单位,最小精度为毫秒,使用需要包含头文件"boost\timer.hpp&quo ...

  5. 用jstack自动化捕抓异常java代码脚本

    #!/bin/bashdate=` date +%y%m%d-%H%M`pid=`top -bn1 |grep java | awk '{print $1 "\t" $9}' |h ...

  6. cad.net 更改高版本填充交互方式为低版本样子

    /// <summary> /// 修改cui,双击填充 /// </summary> /// https://blog.csdn.net/hfmwu/article/deta ...

  7. Avoiding Common Networking Mistakes

    https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/Networkin ...

  8. Behavior Tree 用 Lua 实现一个最简行为树

    local function Traverse(node, ...) local t = node.type if t == SELECTOR then , #node do if Traverse( ...

  9. Swift5 语言指南(六) 字符和字符串

    甲串是一系列字符,如的或.Swift字符串由类型表示.可以通过各种方式访问a的内容,包括作为值的集合."hello, world""albatross"Stri ...

  10. C语言中volatile的作用和使用方法

    在程序设计中,尤其是在C语言.C++.C#和Java语言中,使用volatile关键字声明的变量或对象通常具有与优化.多线程相关的特殊属性. 通常,volatile关键字用来阻止(伪)编译器认为的无法 ...