天天看點

阿裡雲伺服器如何搭建圖檔伺服器?

網上雖然有不少資料,但是很多教程寫的并不完整,照着去做的時候會出現各種各樣的問題,在網上也搜不出個解決方式來, 其實主要都是版本的問題,之前一些版本引用的庫位置有問題,需要自己修改,我們還是自己整理一遍整個流程,用起來才放心.安裝的時候請按照相同的版本安裝,之前的一些版本确實是會出現不少問題的

伺服器:阿裡雲伺服器ECS

系統: Centos7

環境和依賴

按照後面标注的方式下載下傳或者安裝好需要的依賴

yum install -y  gcc-c++  #需要依賴gcc
yum install -y  pcre  #用于支援rewrite子產品   pcre-8.32-17

yum  install -y  libevent  #FastDFS依賴libevent庫 libevent-2.0.21-4.el7.x86_64

yum  install -y  zlib zlib-devel    #用于支援gzip子產品 zlib-1.2.7-17.el7.x86_64

libfastcommon-master.zip   #libfastcommon包含了FastDFS運作所需要的一些基礎庫。https://github.com/happyfish100/libfastcommon/releases

fastdfs-nginx-module-master.zip  # https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master

FastDFS版本:fastdfs-5.11.zip  #https://github.com/happyfish100/fastdfs/archive/V5.11.zip

Nginx版本:nginx-1.14.tar.gz : #官網下載下傳: http://nginx.org/en/download.html           

安裝依賴

可以yum 安裝的先直接yum 安裝

将所有下載下傳好依賴上傳至伺服器/download目錄

安裝libfastcommon

unzip libfastcommon-1.0.39.zip 
 mv libfastcommon-1.0.39 /usr/local/libfastcommon
cd /usr/local/libfastcommon/
./make.sh           #編譯
./make.sh install   #安裝
# 檢查确認/usr/lib64  和 /usr/lib 目錄下都生成了 libfastcommon.so (有些版本可能/usr/lib下不會生成)
ls /usr/lib64  | grep libfastcommon.so  
ls /usr/lib  | grep libfastcommon.so           

安裝tracker

FastDFS由跟蹤伺服器(tracker server)、存儲伺服器(storage server)和用戶端組成,

fastdfs的tracker 和storage其實用的是同一個服務,隻是配置檔案不同

Tracker是FastDFS的協調者,負責管理所有的storage server和group

storage server 負責存儲服務

cd /download
unzip  fastdfs-5.11.zip
 mv fastdfs-5.11 /usr/local/FastDFS
cd /usr/local/FastDFS/
./make.sh && ./make.sh install  #編譯之後接着進行安裝
#确認安裝成功,沒有報錯後,拷貝配置檔案到/etc/fdfs
cp /usr/local/FastDFS/conf/* /etc/fdfs/
#,進入/etc/fdfs 目錄, 如果沒有tracker.conf就拷貝一份tracker.conf.sample 去掉sample
cp tracker.conf.sample track.conf           

配置tracker.conf ;

vi track.conf  # 修改以下配置
#===============
base_path=/home/fastdfs  #基礎目錄,以後的data 和日志目錄都會放在此目錄下
http.server_port=80 #配置http服務端口,這個端口跟後面nginx的監聽端口對應           

建立目錄(目錄可能不存在)

mkdir /home/fastdfs           

啟動tracker,運作如下指令:

/usr/bin/fdfs_trackerd /etc/fdfs/track.conf restart
#檢查是否啟動成功:預設端口22122
ps -ef | grep fdfs  
#檢查/home/fastdfs下是否生成data / logs 兩個目錄
ls  /home/fastdfs/           

安裝storage

fastdfs的tracker 和storage其實用的是同一個服務,隻是配置檔案不同,我們隻需要使用storage的配置檔案啟動fastdfs即是storage服務

cd /etc/fdfs 
#如果沒有storage.conf  拷貝一份storage.conf.sample 命名為storage.conf
cp storage.conf.sample  storage.conf
#配置storage.conf
vi storage.conf  #修改如下配置
#===========================
group_name=group1 #配置組名,同一個組的storage 互為備份
base_path=/home/fastdfs #基礎目錄
#store存放檔案的位置(store_path), 可以配置多個, 記得建立路徑
store_path0=/home/fdfs_storage 
#如果有多個挂載磁盤則定義多個store_path,如下
#store_path1=.....
#store_path2=......

#配置tracker伺服器:IP,阿裡雲伺服器如果需要外部通路請配置公網ip, 不要使用私有ip
tracker_server=192.168.112.130:22122
#如果有多個tracker則配置多個tracker
#tracker_server=192.168.112.131:22122
#配置http端口
http.server_port=80
#==========完===========
#建立 /home/fdfs_storage 目錄
mkdir -p /home/fdfs_storage
#啟動storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
#檢視啟動是否成功
fdfs_monitor /etc/fdfs/storage.conf   #檢視fdfs狀态
ps -ef | grep fdfs
#檢視目錄是否建立,/home/fdfs_storage/data 應該會自動生成256個檔案夾
ls   /home/fdfs_storage/data           

測試上傳檔案

fastdfs自帶了測試用戶端,我們可以使用它測試搭建是否成功

cd /etc/fdfs
cp client.conf.sample  client.conf
vim client.conf  #修改如下配置
#=================
base_path=/home/fastdfs
tracker_server=192.168.112.130:22122
#=======完========
#準備一張圖檔進行測試
/usr/bin/fdfs_test /etc/fdfs/client.conf upload  /download/123.jpg
#一切正常的話會傳回圖檔位址等資訊
example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg
#檢查檔案是否存在(檔案名被存放在/home/fdfs_storage/data/00/00對應的目錄中),如果存在即是儲存  OK,此時還無法使用http下載下傳
cd  /home/fdfs_storage/data/00/00  #檢視是否存在wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg           

FastDFS 和Nginx整合

單獨的Fastdfs 對http支援不好,是以作為圖檔伺服器,我們一般都會整合Nginx來支援圖檔的http通路

#解壓 fastdfs-nginx-module 到 /usr/local目錄下;
cd /download
unzip  fastdfs-nginx-module-master.zip 
mv fastdfs-nginx-module-master  /usr/local/fastdfs-nginx-module
cd /usr/local/fastdfs-nginx-module/src           

修改config檔案,

#将檔案中的所有 /usr/local/ 路徑改為 /usr/ , 
#如果後面步驟中編譯nginx報錯把下面兩項做以下修改
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"           

拷貝配置檔案到/etc/fdfs

cp mod_fastdfs.conf  /etc/fdfs/
#修改 /etc/fdfs/mod_fastdfs.conf ;
vi /etc/fdfs/mod_fastdfs.conf
#======修改以下内容========
base_path=/home/fastdfs  #儲存日志的路徑
tracker_server=192.168.112.130:22122  #track_server配置的服務端口
url_have_group_name=true        #url中是否包含group名稱
store_path0=/home/fdfs_storage  #指定檔案存儲路徑(必須和storage.conf配置相同)           

檢查/usr/lib 和usr/lib64下是否有 libfdfsclient.so

ls  /usr/lib | grep libfdfsclient.so
ls  /usr/lib64 | grep libfdfsclient.so           

建立nginx/client目錄

mkdir -p /var/temp/nginx/client           

安裝nginx

tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/           

編譯nginx,加入fastdfs子產品, 如果之前裝過nginx, 需要重新安裝

#進入解壓目錄, 日志目錄可自己定義,主要是add-modoule
cd /usr/local/nginx-1.14.0
#添加子產品
./configure \
--prefix=/usr/local/nginx \
--add-module=/usr/local/fastdfs-nginx-module/src           

編譯并安裝

#在nginx1.14.0目錄下執行
make && make install           

編譯後在/usr/local下生成nginx 目錄

修改nginx 配置檔案

vi /usr/local/nginx/conf/nginx.conf
#======添加配置===========
 server {
              listen 80;
              server_name 192.168.112.130;
              location /group1/M00/ {
                  root /home/fdfs_storage/data;
                  ngx_fastdfs_module;
              }
         }           

啟動nginx

/usr/local/nginx/sbin/nginx 

#檢查是否啟動成功,不成功就去檢視錯誤日志/var/log/nginx/error.log
ps -ef | grep nginx           

關閉防火牆或者添加對應端口

systemctl stop firewalld.service           

再次上傳一張圖檔

/usr/bin/fdfs_test /etc/fdfs/client.conf upload  /download/123.jpg           

得到一個位址

example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg           

在浏覽器中通路該圖檔:

http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg           

如果能夠正常浏覽圖檔那就大功告成,

#檢視nginx 日志可以看到通路記錄
tail -f  -n 100 /var/log/nginx/access.log           

PS: nginx fastfds的安裝最坑的就是一些版本中動态連結的問題, 在使用之前一些版本的時候經常會出現各種問題,如果确實需要使用之前的版本可能就需要自己去改一些動态連結的指向了,如果沒有特别版本要求,使用本文的版本是沒有問題的

項目中如何使用fastdfs

使用方式比較簡單,我們就直接拿來一個示例代碼了

導入依賴(也可以自己去git編譯一個jar包出來)

<dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27.0.0</version>
        </dependency>           

配置檔案: fdfs.conf

# 連接配接tracker伺服器逾時時長
connect_timeout = 10
# socket連接配接逾時時長
network_timeout = 30
# 檔案内容編碼
charset = UTF-8
# tracker伺服器端口
http.tracker_http_port = 80
http.anti_steal_token = no
#密碼
http.secret_key = 123456
# tracker伺服器IP和端口(可以寫多個)
tracker_server = 192.168.58.128:22122           

測試代碼

public class FastdfsTest {

    @Test
    public void testUpload() throws Exception {

        //1、把FastDFS提供的jar包添加到工程中
        //2、初始化全局配置。加載一個配置檔案。
        ClientGlobal.init("F:\\wolf-shop\\src\\main\\resources\\fdfs.conf");
        //3、建立一個TrackerClient對象。
        TrackerClient trackerClient = new TrackerClient();

        //4、建立一個TrackerServer對象。
        TrackerServer trackerServer = trackerClient.getConnection();
        //5、聲明一個StorageServer對象,null。
        StorageServer storageServer = null;
        //6、獲得StorageClient對象。
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);

        //7、直接調用StorageClient對象方法上傳檔案即可。
        String[] result = storageClient.upload_file("F:\\redis_demo\\src\\main\\resources\\logo.png", "png", null);
        StringBuilder sb = new StringBuilder("http://192.168.112.130/");
        sb.append(result[0]).append("/").append(result[1]);
        System.out.println("圖檔通路位址: "+sb.toString());
    }
}           

項目中根據自己的實際使用情況抽取一個工具類用起來就友善了。

項目用到的阿裡雲産品:阿裡雲伺服器ECS

https://www.aliyun.com/product/ecs