阿里云Centos离线搭建FastDFS+Nginx文件服务器[图文详解+资源提供+问题解决]

       自大学期间搭建FastDFS已有两年之久,回头看原有的文档,图片都丢了,也算是CSDN的老传统了。国庆期间在家又重新搭建了一次,比较简单,全程用时3H,部分敏感信息已打码但不影响实操,希望对大家有所帮助。

    此次我的服务器进行了一次重装,如果你的电脑已经具备GCC,YUM环境请从第三节开始。一般大家的都具备。

目录

1.安装YUM

yum资源包

执行安装指令

2.安装GCC

3.安装FastDFS

3.1 安装libfastcommon

3.2 安装fastdfs-master

3.3 安装fastdfs-nginx-module

4.配置Nginx

5.启动服务并修复错误

tracker启动

storage启动

6.验证代码示例


文件整体目录结构如下图,所有资源下载链接:GitHubCSDN(优先这个,全一些,GitHub大于25M的上传不了)

1.安装YUM

  • yum资源包

    • 对应Github里面的yum
  • 执行安装指令

    • 解压yum资源包

  • 执行上述红框之中的指令,进入到指定的文件路径下,执行下述指令
./configure --enable-checking=release --enable-languages=c,c++,disable-multilib
rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm	
rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
rpm -ivh yum-3.2.29-81.el6.centos.noarch.rpm  
rpm -ivh yum-plugin-fastestmirror-1.1.30-41.el6.noarch.rpm
  •  验证一下,如下图即成功

 

2.安装GCC

  • 首先查看对应当前Liunx的Glibc版本,我的是在安装时候提示的需要2.14

  • 也可通过指令查看支持最高版本

strings /lib64/libc.so.6 | grep GLIBC
  • 指令结果如图

  • 拿出所有glibc里面的文件
  • 执行安装指令(我在这新建了一个glibc文件夹存放所有rpm)

  •  执行安装指令
rpm -ivh *.rpm --nodeps --force

  • 部分没有100%不影响 
  • 安装gcc离线版【对应Github里面的:gcc离线安装包文件夹】(我是新建一个和glibc平行的文件夹gcc_local)

  • 注意:删除里面原有的glibc文件,一共两个

  • 执行安装指令

  •  验证


以上完成GCC,YUM环境离线版本安装,在线版本更简单,大家可以自行百度


3.安装FastDFS

  我们需要使用的四个核心文件:

3.1 安装libfastcommon

  • 解压libfastcommon并进入

  • 执行 ./make.sh 指令

 

  • 执行 ./make.sh install 

3.2 安装fastdfs-master

  • 返回 /etc 路径,创建文件夹,返回到fastdfs路径并拷贝配置文件

  • 修改tracker.conf  storeage.conf和client.conf配置,是 /etc/fastdfs/下面的

  • 创建对应的文件夹

  • 修改storage.conf  三个地方

1.日志存放​​​​​​

2.文件存放

3.tracker IP:对应文件服务器地址,端口对应上面tracker.conf中的端口

  • 修改client.conf两个地方,基本同上

3.3 安装fastdfs-nginx-module

  • 修改mod_fastdfs.conf,在解压文件src中

  • storage要创建对应的文件夹,方法路径同上面tracker一致
  • 复制mod_fastdfs.conf到前面的 /etc/fastdfs路径下

 

4.配置Nginx

  • 配置nginx的conf文件,添加一组server

5.启动服务并修复错误

  • 启动tarcker,storage,报错

  • 错误出现原因:未能绑定最新依赖,更新依赖即可

  • 涉及指令
ldd /usr/bin/fdfs_trackerd

ll /usr/local/lib/libfastcommon.so

ll /usr/lib/libfastcommon.so

rm -rf /usr/lib/libfastcommon.so

ldd /usr/bin/fdfs

ldd /usr/bin/fdfs_trackerd

/sbin/ldconfig

tracker启动

/usr/bin/fdfs_trackerd /etc/fastdfs/tracker.conf

storage启动

/usr/bin/fdfs_storaged /etc/fastdfs/storage.conf

6.验证代码示例

   /**
	 * 上传附件到文件服务器
	 * @param file	附件
	 * @param confFileName	配置文件
	 * @return	文件名称/group/具体路径
	 */
public static String upload(MultipartFile file, String confFileName) {
		
		try {
			String fileName = file.getOriginalFilename();
			String suffix = fileName.substring(fileName.lastIndexOf(".")+1);
			ClientGlobal.init(confFileName);
			// 创建TrackerClient对象
			TrackerClient trackerClient = new TrackerClient();
			// 创建TrackerServer对象
			TrackerServer trackerServer = trackerClient.getConnection();
			// 声明一个StorageServer对象,null
			StorageServer storageServer = null;
			// 获得StorageClient对象
			StorageClient storageClient = new StorageClient(trackerServer, storageServer);
			// 调用StorageClient对象上传文件
			String[] strings = storageClient.upload_file(file.getBytes(), suffix, null);
			
			String url = "";
			for (String str : strings) {
				url += str + "/";
			}
			// 返回格式:文件名称/group/具体路径
			url = fileName + "/" + url.substring(0,url.lastIndexOf("/"));
			return url;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

    /**
	 * 附件下载
	 * @param fileName	文件名称
	 * @param confFileName	配置文件
	 * @return	
	 */
	public static byte[] download(String fileName, String confFileName)
	{
		try
		{
			ClientGlobal.init(confFileName);
			
			TrackerClient tracker = new TrackerClient();
			TrackerServer trackerServer = tracker.getConnection();
			StorageServer storageServer = null;

			StorageClient storageClient = new StorageClient(trackerServer,
					storageServer);
			// 截取 Activiti.bmp/group1/M00/00/00/CgSRYl1Sl4-APEogABIW_tEAGGc078.bmp
			String file_name = fileName.substring(fileName.indexOf("/")+1);
			String group_name = file_name.substring(0, file_name.indexOf("/"));
			String remote_file = file_name.substring(file_name.indexOf("/")+1);
			byte[] b = storageClient.download_file(group_name,remote_file);
			return b;
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
  • 配置文件每个人都不一样,我的是如下:
    connect_timeout = 2
    
    network_timeout = 30
    
    charset = UTF-8
    
    http.tracker_http_port = 80
    
    http.anti_steal_token = no
    
    http_secret_key = test20191006
    
    tracker_server = 10.X.X.X:22122

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章