在django項目中搭建分佈式圖片服務器fastdfs

FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。
FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。
搭建流程:

一,安裝

安裝libfastcommon:

 wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz

安裝FastDFS

wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz

安裝Nginx

wget http://nginx.org/download/nginx-1.15.2.tar.gz

安裝fastdfs-nginx-module

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz

解壓後,先配置libfastcommon和FastDFS
文件是用C語言寫的,所以我們還需要cd到解壓後的文件目錄中執行

./make.sh
./make.sh install

二,配置tracker

編譯成功後, cd 進入/etc/fdfs目錄中,可以看到3個帶.sample後綴的模板配置文件,我們先修改tracker.conf.sample 爲tracker.conf
裏面進行如下修改:

base_path=/home/xx/fdfs/tarcher   #tracker存儲data和log的跟路徑,必須事前存在
port=23000  #tracker默認23000
http.server_port=80 #使用http服務器的端口。

三,配置Storage

同上,修改storage.conf.sample爲storage.conf。
裏面進行如下修改:

base_path=/home/xx/fdfs/storage   #storage存儲data和log的跟路徑,必須提前創建好
port=23000  #storge默認23000,同一個組的storage端口號必須一致
group_name=group1  #默認組名,根據實際情況修改
store_path_count=1  #存儲路徑個數,需要和store_path個數匹配
store_path0=/home/xx/fdfs/storage  #配置存儲路徑,若有多個存儲節點可繼續配置store_path1.。。
tracker_server=192.168.8.33:22122 #配置本storage監聽的tracker的機器的ip和port

配置完後啓動:
最好寫絕對路徑,不然會出現找不到文件的錯誤
fdfs_storaged /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start

四,配置nignx

進入nginx目錄

配置加載fastdfs-nginx-module模塊

–prefix=/usr/local/nginx指的是指定安裝nginx後的文件路徑,
add-module=/home/fastdfs-nginx-module-1.20/src/指的是fastdfs-nginx-module的src子文件夾的路徑。

./configure --prefix=/usr/local/nginx --add-module=/home/fastdfs-nginx-module-1.20/src/

由於版本問題會出現的錯誤:

XXXXX......error: common_define.h: No such file or directory

需vi fastdfs-nginx-module-1.20/src/config
修改下面兩行代碼,然後再進行配置:

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

配置完後進行編譯:

make
make install

出現Leaving directory ‘/home/python/nginx-1.15.2’ 可以忽略。

配置mod-fastdfs.conf:

把 fastdfs-nginx-module-1.20/src/下的mod_fastdfs.conf 文件放到fdfs目錄下。

cd fastdfs-nginx-module-1.20/src/
cp mod_fastdfs.conf /etc/fdfs

進行如下修改:

base_path=/home/xx/fdfs
tracker_server=192.168.8.33:22122 #tracker的地址
url_have_group_name=true #url是否包含group名稱
storage_server_port=23000 #需要和storage配置的相同
store_path_count=1  #存儲路徑個數,需要和store_path個數匹配
store_path0=/home/xx/fdfs/storage #文件存儲的位置

配置nginx

cd /usr/local/nginx/conf/
vi nginx.conf

server {
    listen       80;
    server_name  localhost;
    location ~/group[0-9]/{
        ngx_fastdfs_module;
    }
    location / {
        root   html;
        index  index.html index.htm;
    }
     error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }

拷貝相關依賴

cd /usr/local/src/fastdfs-5.11/conf
cp mime.types http.conf /etc/fdfs/

五,配置FastDFS啓動客戶端

cd /etc/fdfs
cp client.conf.sample client.conf

修改如下:

base_path=/home/xx/fdfs/tracker  //tracker服務器文件路徑
tracker_server=192.168.8.33:22122 //tracker服務器IP地址和端口號
http.tracker_server_port=80 # tracker服務器的http端口號,必須和tracker的設置對應起來

六,植入django項目中

安裝依賴
下載路徑:https://github.com/jefforeilly/fdfs_client-py
pip install fdfs_client-py-master.zip
配置參數django的setting.py

#設置Django的文件存儲類
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'
#設置fdfs使用的client.conf文件路徑(把fdfs文件目錄下的client.conf文件拷貝到項目中)
FDFS_CLIENT_CONF='./fdfs/client.conf'
#設置fdfs存儲服務器上ngix的IP和端口號
FDFS_URL='http://192.168.8.33:80/'

封裝存儲文件到fdfs行爲(修改django文件上傳行爲):
torage.py

from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
from django.conf import settings
class FDFSStorage(Storage):
    def _open(self,name,mode='rb'):
        pass
def _save(self,name,content):
    #創建一個Fdfs_client對象
    client=Fdfs_client(settings.FDFS_CLIENT_CONF)
    #上傳文件到fast dfs系統中
    res=client.upload_by_buffer(content.read())
    if res == None:
        raise Exception('上傳 失敗')
    filename = res.get('Remote file_id')
    return filename
def exists(self, name):
    '''django判斷文件名是否可用'''
    return False
def url(self, name):
    '''返回訪問文件的url路徑'''
    return settings.FDFS_URL+name

至此服務器fastdfs的植入完成。
在前端獲取圖片的時候則直接使用
例:

<img src="{{ books.image.url }}"></a>

{{ books.image.url }} =http://192.168.8.33:80/+文件存儲的唯一標誌。

參考自:
https://www.cnblogs.com/handsomeye/p/9451568.html

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