阿里雲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

 

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