環境搭建(建議先備份一個系統快照)html
1. FastDFS是C語言編寫的,故要確保安裝了C編譯器 gcc,若是沒有gcc環境,須要安裝gcc:前端
yum -y install gcc gcc-c++java
2. 若要使用解壓命令(unzip),檢查是否安裝,若沒請自行安裝:nginx
yum -y install zip unzipc++
3. 安裝libenvent(fastdfs環境)git
yum -y install libeventgithub
4. 安裝libfastcommon環境【 fastdfs環境 (容易遇到坑)】spring
4.1 下載:libfastcommon-master.zip,能夠在百度搜下安裝包,剛開始在官網下載了libfastcommon_v1.04.tar.gz以後,在編譯安裝完後,再去FastDFS目錄中編譯安裝會報錯。vim
報缺乏文件建議從github中餘慶提供的 libfastcommon-master 中下載。windows
4.2 上傳到Linux服務器: 解壓縮 unzip libfastcommon-master.zip
4.3 cd libfastcommon-master
4.4 ./make.sh
4.5 ./make.sh install
5. 安裝FastDFS
5.1 下載 FastDFS_v5.08.tar.gz
5.2 上傳到Linux服務器: 解壓縮 tar -zxvf FastDFS_v5.08.tar.gz
5.3 cd FastDFS
5.4 ./make.sh
5.5 ./make.sh install
6. 驗證是否安裝成功
6.1 命令: ll /etc/init.d/ | grep fdfs
fdfs_storaged 是storage啓動腳本
fdfs_trackerd 是tracker啓動腳本
6.2 命令: ll /etc/fdfs/
client.conf.sample 是tracker的配置文件模板
storage.conf.sample 是storage的配置文件模板
tracker.conf.sample 是tracker的配置文件模板
7. 配置Tracker服務
7.1 cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
7.2 編輯文件 vim /etc/fdfs/tracker.conf
7.3 改變存儲數據的根路徑 base_path=/home/yangw/fastdfs_root/tracker (本身建立的路徑)
7.4 關閉防火牆 systemctl stop firewalld.service
7.5 啓動/中止tracker服務器 /etc/init.d fdfs_trackerd start/stop
7.6 也可使用 service fdfs_trackerd start/stop
7.7 設置開機啓動: chkconfig fdfs_trackerd on
8. 配置Storage服務
8.1 cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
8.2 編輯文件 vim /etc/fdfs/storage.conf
8.3 改變存儲數據的根路徑 base_path=/home/yangw/fastdfs_root/storage (本身建立的路徑)
改變第一個存儲目錄: store_path0=/home/yangw/fastdfs_root/storage (本身建立的路徑)
tracker服務器IP和端口: tracker_server=192.168.47.128:22122(你本身的tracker在哪臺服務器就寫哪一個IP地址)
8.4 關閉防火牆 systemctl stop firewalld.service
8.5 啓動/中止Storage /etc/init.d fdfs_storaged start/stop
8.6 也可使用啓停 service fdfs_storaged start/stop
8.7 chkconfig fdfs_storaged on
8.8 ln -s /home/yangw/fastdfs_root/storage/data/ /home/yangw/fastdfs_root/storage/data/M00 (建立軟鏈接)
9. 查看進程
ps -ef | grep fdfs
10. 安裝 fastdfs-nginx-module
10.1 下載 fastdfs-nginx-module_v1.16.tar.gz
10.2 解壓縮 tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
10.3 cd fastdfs-nginx-module/src
10.4 編輯 文件 vim config 使用底行命令:
:%s+/usr/local/+/usr/+g 將全部的/usr/local替換爲 /usr
10.5 cp mod_fastdfs.conf /etc/fdfs/
10.6 vim /etc/fdfs/mod_fastdfs.conf
connect_timeout=10 #客戶端訪問文件鏈接超時時長(單位:秒)
tracker_server=192.168.47.128:22122 # tracker服務IP和端口
url_have_group_name=true # 訪問連接前綴加上組名
store_path0=/home/yangw/fastdfs_root/storage # 文件存儲路徑
10.7 複製 FastDFS 的配置文件mime.types到/etc/fdfs 目錄
cd /home/yangw/software/sources/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
11. 安裝(首次) nginx
11.1 下載 http://nginx.org/en/download.html
11.2 解壓縮 tar -zxvf nginx-1.16.1.tar.gz
11.3 cd nginx-1.16.1
11.4 配置Nginx安裝包並指定fastdfs-nginx-model
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin --with-http_stub_status_module --with-http_ssl_module --add-module=/home/yangw/software/sources/fastdfs-nginx-module/src
#將bin文件放在該目錄 #http訪問支持 #https訪問支持 #指定模塊
11.5 編譯並安裝 make && make install
12. 配置nginx
12.1 cd /usr/local/nginx/conf
12.2 編輯文件 vim nginx.conf , 將原來的server {80...} 替換爲以下內容
server_name image.yangw.com;
# 監聽域名中帶有group的,交給FastDFS模塊處理
location ~/group([0-9])/ {
ngx_fastdfs_module;
}
13. nginx命令
/usr/local/sbin/nginx start 啓動;
/usr/local/sbin/nginx -s stop 中止
/usr/local/sbin/nginx -s reload 從新加載
/usr/local/sbin/nginx -v 查看版本
由於以前咱們已將命令設置到了path中,故能夠直接使用命令nginx 後面跟參數
14. hosts文件添加域名映射 並驗證
windows上操做的hosts,在windows系統的瀏覽器上運行效果
Java程序調用
咱們不使用餘慶提供的java客戶端,而是使用開源的加強版的FastDFS客戶端,支持SpringBoot2.1,支持縮略圖,支持鏈接池
咱們經過前端頁面上傳一個圖片,結果程序返回的圖片地址是
http://image.yangw.com/group1/M00/00/00/wKgvgF3lBQOARsxtAAFl-ayq-DA520.png
查詢服務器存儲狀況:
瀏覽器訪問: 明明文件上傳成功,卻報404.
通過多方查資料,發現須要在 /usr/local/nginx/conf/nginx.conf文件最開始處加 user root;便可經過!
編寫測試類運行(若是連不上,關掉防火牆再試)
1 package com.leyou.test; 2 3 import com.github.tobato.fastdfs.domain.fdfs.StorePath; 4 import com.github.tobato.fastdfs.domain.fdfs.ThumbImageConfig; 5 import com.github.tobato.fastdfs.service.FastFileStorageClient; 6 import org.junit.Test; 7 import org.junit.runner.RunWith; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.boot.test.context.SpringBootTest; 10 import org.springframework.test.context.junit4.SpringRunner; 11 12 import java.io.File; 13 import java.io.FileInputStream; 14 import java.io.FileNotFoundException; 15 16 @SpringBootTest 17 @RunWith(SpringRunner.class) 18 public class FastDFSTest { 19 20 @Autowired 21 //存儲客戶端工具類,它既不是FastDFS包的 22 private FastFileStorageClient storageClient; 23 24 @Autowired 25 //縮略圖 26 private ThumbImageConfig thumbImageConfig; 27 28 @Test 29 public void testUploadFile() throws FileNotFoundException { 30 //要上傳的文件 31 File file = new File("C:\\Users\\Administrator\\Desktop\\timg.jpg"); 32 //傳文件 33 StorePath storePath = storageClient.uploadFile(new FileInputStream(file), file.length(), "jpg", null); 34 //獲取服務器文件路徑(帶組名) 35 System.out.println("full path:" + storePath.getFullPath()); 36 //獲取服務器文件路徑(不帶組名) 37 System.out.println("path:" + storePath.getPath()); 38 } 39 40 @Test 41 public void testUploadThumbImage()throws FileNotFoundException { 42 43 //要上傳的文件 44 File file = new File("C:\\Users\\Administrator\\Desktop\\timg.jpg"); 45 //傳文件 46 StorePath storePath = storageClient.uploadImageAndCrtThumbImage(new FileInputStream(file), file.length(), "jpg", null); 47 //獲取服務器文件路徑(帶組名) 48 System.out.println("full path:" + storePath.getFullPath()); 49 //獲取服務器文件路徑(不帶組名) 50 System.out.println("path:" + storePath.getPath()); 51 //獲取縮略圖 52 System.out.println(thumbImageConfig.getThumbImagePath(storePath.getFullPath())); 53 } 54 55 }
什麼是FastDFS
2. 客戶端 能夠當作是咱們的上傳文件的程序
3. 服務端有兩個角色:
Tracker:
管理集羣, tracker也能夠實現集羣。每一個tracker節點地位平等。
做用:引導客戶端去哪臺服務器存儲數據,其實是客戶端與存儲服務器直接進行通訊的,並不須要經過Tracker進行中轉。
Storage:
須要鏈接tracker端,按期報告本身的狀況(是否活着,剩餘容量,負載狀況)
分爲多個組,每一個組之間保存的文件是不一樣的。每一個組內部能夠有多個成員,組成員內部保存的內容是同樣的,組成員的地位是一致的,沒有主從的概念。
卷一、卷二、卷n是能夠實現橫向擴容的,向裏面添加組服務器,且同一個組裏面的文件是同樣的,一臺服務器掛了,還有別的服務器能夠提供訪問。(實現高可用)
一臺服務器很忙,能夠將訪問分配給其餘服務器,實現負載均衡
5.文件下載流程(內部流程):
6. 客戶端上傳文件後存儲服務器將文件ID返回給客戶端,此文件ID用於之後訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名
如: group1/M00/00/00/wKgvgF3lBQOARsxtAAFl-ayq-DA520.png
附錄1 參考:
https://www.xuebuyuan.com/2188649.html
https://blog.csdn.net/qq_37495786/article/details/83896530
https://blog.csdn.net/qq_36639232/article/details/92699727
https://www.jianshu.com/p/b56e84912825
附錄2 CentOS7防火牆的相關操做:
centos7中的防火牆改爲了firewall,使用iptables無做用,開放端口的方法以下:
firewall-cmd --zone=public --add-port=80/tcp --permanent
返回success爲成功 --zone #做用域 --add-port=80/tcp #添加端口,格式爲:端口/通信協議 --permanent #永久生效
systemctl restart firewalld.service #重啓防火牆
systemctl stop firewalld.service #關閉防火牆
netstat -lntp #查看監聽(Listen)的端口
netstat -lnp|grep 8080 #檢查端口被哪一個進程佔用
附錄3 Centos7查看是否安裝了某個軟件
1, rpm包安裝的,能夠用 rpm -qa 看到,若是要查找某軟件包是否安裝,用 rpm -qa | grep "軟件或者包的名字"。
2, yum方法安裝的,能夠用yum list installed 查找,若是是查找指定包,命令後加 | grep "軟件名或者包名";
yum list installed gcc|grep gcc 若是沒有返回值則表示沒有安裝
3, 若是是以源碼包本身編譯安裝的,例如.tar.gz或者tar.bz2形式的,這個只能看可執行文件是否存在了,
上面兩種方法都看不到這種源碼形式安裝的包。若是是以root用戶安裝的,可執行程序一般都在/sbin:/usr/bin目錄下