centos7安裝fastdfs經過nginx代理以及java客戶端

  • 1、下載安裝依賴
    • 1.1 下載依賴、解壓
    • 1.2 安裝libfastcommon
    • 1.3 安裝fastdfs
    • 1.4 編輯fastdfs配置
    • 1.5 安裝 nginx-module
    • 1.6 配置nginx
  • 2、Java客戶端上傳文件
    • 2.1 引入依賴
    • 2.2 編寫客戶端上傳單元測試
  • 3、FastDFS原理

1、下載安裝依賴

1.1 下載依賴、解壓

下載libfastcommonfastdfsfastdfs-nginx-modulenginxjava

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz -SO libfastcommon.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz -SO fastdfs.tar.gz
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz -SO fastdfs-nginx-module.tar.gz
wget http://nginx.org/download/nginx-1.10.3.tar.gz
複製代碼

解壓資源nginx

tar -zxvf xxx.tar.gz
複製代碼

1.2 安裝libfastcommon

## 進入libfastcommon解壓目錄
./make.sh
./make.sh install
複製代碼

1.3 安裝 fastdfs

## 進入fastdfs解壓目錄
./make.sh
./make.sh install
複製代碼

安裝好後,程序是在/usr/bin目錄下git

## 查看fdfs_trackerd命令位置
which fdfs_trackerd
複製代碼

配置文件是在/etc/fdfs目錄下,可是都是模板,咱們拷貝下fastdfs解壓目錄下conf下的配置github

cp ${base_path}/fastdfs-5.11/conf/* /etc/fdfs
複製代碼

而後再把/fastdfs-nginx-module/src/下的mod_fastdfs.conf配置文件也拷過去
(這個是重點,若是沒拷過去可能致使nginx啓動沒有worker進程)web

cp ${base_path}/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
複製代碼

1.4 編輯fastdfs配置

編輯跟蹤器配置vim /etc/fdfs/tracker.confspring

# 跟蹤器運行端口,默認就行,不用改
port=22122
# fastdfs存儲日誌和文件的目錄
base_path=/home/www/fdfs

# 跟蹤器向外暴露的端口,一下子nginx要代理這個端口
http.server_port=9270
複製代碼

編輯存儲器配置vim /etc/fdfs/storage.confvim

# 儲存器所屬的組
group_name=group1

# 儲存器運行端口
port=23000

# 跟上面那個base_path一致便可
base_path=/home/www/fdfs

# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist 意思是這個目錄必須存在,不存在就得建立,否則啓動不了
store_path0=/home/www/fdfs
#store_path1=/home/www/fdfs2

# tracker服務器,雖然是同一臺機器上,可是不能寫127.0.0.1。這項配置能夠出現一次或屢次,寫公網ip
tracker_server=132.232.48.200:22122

# the port of the web server on this storage server,這個不知道幹嗎的,先不改
http.server_port=8888
複製代碼

編輯客戶端配置 vim /etc/fdfs/client.confsegmentfault

# 也跟上面同樣吧,這個配置看狀況配就好了,我這個是簡單點配置一下
base_path=/home/www/fdfs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address,
# 同樣的配置跟蹤器的地址
tracker_server=132.232.48.200:22122
#HTTP settings
#這個配跟蹤器的剛剛那個http端口
http.tracker_server_port=9270
複製代碼

編輯 mod_fastdfs.conf vim /etc/fdfs/mod_fastdfs.conf 暫時還不知道幹什麼用的,應該跟nginx-module有關係,不配就報錯, 通常nginx啓動沒有worker進程可能就是由於這個配置有問題安全

# the base path to store log files
# 不知道幹啥的,不改就是
base_path=/tmp

# FastDFS tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
# 同樣的追蹤器的地址
tracker_server=132.232.48.200:22122
# tracker_server=132.232.48.201:22122 這個若是有多個跟蹤器,就複製一下這個

# url是否能夠包含group這個關鍵字,這個要改爲true,否則會404
url_have_group_name=true  

# the port of the local storage server
# the default value is 23000
# 配的存儲器的端口
storage_server_port=23000

# the group name of the local storage server
# 組名,我猜是nginx轉發須要用的。。。
group_name=group1

# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
# 同樣的提示,必須存在,並且要更剛剛的儲存器配置的同樣的地址
store_path0=/home/www/fdfs
#store_path1=/home/yuqing/fastdfs1
複製代碼

如今咱們再來建立一下剛剛沒有建立的base_pathbash

mkdir -p /home/www/fdfs
複製代碼

啓動一下

# 啓動
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
複製代碼

查看一下是否是啓動成功 netstat -anp | grep fdfs

有這兩個說明基本ok

測試上傳一下 fdfs_test /etc/fdfs/client.conf upload /home/www/dximg/test.jpg
語法是 fdfs_test {client.conf客戶端配置路徑} upload {file_path文件路線}

此時能夠看到已經有地址返回了,不過這個時候還訪問不了。再繼續配置

1.5 安裝 nginx-module

這一步最坑爹,不過仍是得繼續
首先咱們進入nginx的源碼目錄的src下面
若是已經裝了nginxnginx -V查看配置

--prefix這後面一段都複製一下,由於我已經安裝了 fdfs-nginx-module
因此已經有了 --add-module=/home/www/fastdfs/fastdfs-nginx-module-1.20/src
這個是咱們一下子要添加進去的 語法是 --add-module={模塊解壓的src目錄下}
如今複製剛剛那一段而後執行

./configure --prefix=/usr/local/nginx --pid-path=/usr/local/nginx/run --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-http_image_filter_module --with-debug --add-module=/home/www/fastdfs/fastdfs-nginx-module-1.20/src
複製代碼

這句話看我的的配置執行,而後再繼續

make
# 報錯
Fatal error: can't create objs/addon/src/ngx_http_fastdfs_module.o: Permission denied In file included from /home/xxxx/caibh/fdfs-package/fastdfs-nginx-module-1.20/src/common.c:26:0, from /home/xxxx/caibh/fdfs-package/fastdfs-nginx-module-1.20/src/ngx_http_fastdfs_module.c:6: /usr/include/fastdfs/fdfs_define.h:15:27: fatal error: common_define.h: No such file or directory # 解決 # 修改fastdfs-nginx-module的src/config文件 $ cd {源碼下載目錄}/fastdfs-nginx-module-1.20/src $ vim config # 修改一下兩項: ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/" # 從新運行執行一下 ./configure --prefix=/usr/local/nginx --pid-path=/usr/local/nginx/run --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-http_image_filter_module --with-debug --add-module=/home/www/fastdfs/fastdfs-nginx-module-1.20/src # 再繼續 make # 網上說不能執行會覆蓋如今的,我執行發現覆蓋沒啥問題, # 他會把你以前的配置命令什麼的拷貝一下在同級目錄下生成一些 nginx.old這樣的備份 make install 複製代碼

啓動一下nginx /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
而後看看是否是啓動成功了ps -ef|grep nginx,若是沒有worker多半是配置有問題

1.6 配置nginx

server
     {
         listen 9270;

        location ~/group([0-9])/ {
            ngx_fastdfs_module;
        }
    }

複製代碼

重啓幾個服務一下

fdfs_trackerd /etc/fdfs/tracker.conf restart
fdfs_storaged /etc/fdfs/storage.conf restart
nginx -s stop
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
複製代碼

這個時候再訪問剛剛上傳返回的地址應該是能夠的了(前提是剛剛的22122, 23000, 9270, 8888幾個端口都開放一下,什麼安全組,iptables)

2、Java客戶端上傳文件

2.1 引入依賴

<dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.7</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        
複製代碼

2.2 編寫客戶端上傳單元測試

# ===================================================================
# 分佈式文件系統FDFS配置
# ===================================================================
fdfs:
  so-timeout: 1501
  connect-timeout: 601
  thumb-image:             #縮略圖生成參數
    width: 150
    height: 150
  tracker-list:            #TrackerList參數,支持多個
    - 132.232.48.200:22122
  pool:
    #從池中借出的對象的最大數目(配置爲-1表示不限制)
    max-total: -1
    #獲取鏈接時的最大等待毫秒數(默認配置爲5秒)
    max-wait-millis: 5000
    #每一個key最大鏈接數
    max-total-per-key: 50
    #每一個key對應的鏈接池最大空閒鏈接數
    max-idle-per-key: 10
    #每一個key對應的鏈接池最小空閒鏈接數
    max_idle_per_key: 5

複製代碼
import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;

/**
 * 導入FastDFS-Client組件
 *
 * @author tobato
 *
 */
@Configuration
@Import(FdfsClientConfig.class)
// 解決jmx重複註冊bean的問題
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class ComponetImport {

}
複製代碼
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.upload.FastFile;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashSet;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class FastdfsClientApplicationTests {

    @Autowired
    private FastFileStorageClient client;

    @Test
    public void contextLoads() throws FileNotFoundException {
        File file = new File("C:\\Users\\Administrator\\Desktop\\666.jpg");

        StorePath storePath = client.uploadFile(new FastFile(
                new FileInputStream(file), file.length(), file.getName().substring(file.getName().lastIndexOf(".") + 1), new HashSet<>()
        ));
        String fullPath = storePath.getFullPath();
        log.info("path --> " + fullPath);
    }

}

複製代碼

運行返回地址了就ok

3、原理

先掛個別人的 juejin.im/entry/5b7c1…

搭建參考:segmentfault.com/a/119000001…
Java客戶端:github.com/tobato/Fast… FastDFS架構 github.com/tobato/Fast…

相關文章
相關標籤/搜索