自大學期間搭建FastDFS已有兩年之久,回頭看原有的文檔,圖片都丟了,也算是CSDN的老傳統了。國慶期間在家又重新搭建了一次,比較簡單,全程用時3H,部分敏感信息已打碼但不影響實操,希望對大家有所幫助。
此次我的服務器進行了一次重裝,如果你的電腦已經具備GCC,YUM環境請從第三節開始。一般大家的都具備。
目錄
文件整體目錄結構如下圖,所有資源下載鏈接:GitHub,CSDN(優先這個,全一些,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