Linux | Ubuntu 16.04.4 透過docker安裝單機FastDFS

莫愆發表於2024-08-29

Ubuntu 16.04.4 透過docker安裝單機fastdfs

前言

很久沒有寫技術播客了,這是一件很不應該的事情,做完了事情應該有沉澱的。

我先說一點前情提要,公司的fastdfs突然就掛了,做過的操作就是日誌檔案太大了,所以把日誌檔案給刪了,理論上這個動作應該不影響程式執行才對。

然後tracker怎麼都啟動不起來了。會報下面這個錯誤。

file: tracker_service.c, line: 2079, client ip: 47.xxx.xxx.52, group_name: group1, new ip address 172.xxx.xxx.217 != client ip address 47.xxx.xxx.52

我的tracker和storage都部署在同一臺伺服器上,其中47開頭的是同一臺伺服器的公網IP,172開頭的是這臺伺服器的內網IP。

然後tracker、storage和client的配置檔案,我都改過一遍,都改成內網、都改成公網、一個是公網、一個是內網。反正就是不行。

不過我後來在搜尋後續答案的過程中有受到一點啟發,就是直接改一下host檔案,給ip隨便分配一個域名,這樣後期的配置都用域名,有可能可以解決這個問題。

因為儲存的資料都是從其他地方拉取過來的,只是過一個臨時的中轉,所以,裡面的資料丟了也無所謂,於是,我就想,我索性重新再裝一個fastdfs好了。

但是fastdfs並不能透過一個命令直接解除安裝,所以,我直接刪除了它相關的各種檔案。

但是有可能我刪的不是很乾淨,在我裝最新版本fastdfs的時候,編譯libserverframe的時候,報下面這個錯。

Makefile:59: recipe for target 'fdfs_monitor' failed

搜尋了一圈,提到這個問題的人並不多,然後我試了直接從git上clone程式碼的方式,去git上下載壓縮包再解壓的方式,都編譯不過去。

初步判斷是依賴庫的版本衝突了,或者有缺失。

這裡再提一個題外話,我們在使用make intall命令的時候,應該習慣性加上--prefix引數,配置檔案的安裝路徑,如下:

make install --prefix=/opt/application

如果不配的話,安裝後可執行檔案預設放在 /usr/local/bin,庫檔案預設放在 /usr/local/lib,配置檔案預設放在 /usr/local/etc,其它的資原始檔放在 /usr/local/share

安裝一時爽,解除安裝火葬場。

因為可能原因是版本衝突,然後我現在也解除安裝不乾淨了,於是我就想到了docker,docker是另外開闢出來的一個獨立的環境,不受當前主環境影響,而且伺服器上還有其他正在跑的服務,我也不可能重置伺服器。不得不說docker真是一個好東西啊,是哪個小天才發明的。

fastdfs映象選擇

fastdfs並沒有提供官方的映象,所以只能用網友們自主建立的。

https://hub.docker.com/search?q=fastdfs

收藏最多的是一個season的映象,不過,我看它的版本很老了,好像才1.2版,更新時間也是9年前了。所以我沒有用這個,我看到好幾篇文章裡都用的是delron的映象,所以我也用的這一個。當然這個也挺老了,6年前更新的。

但我急於解決問題,也沒有心思去好好研究和挑選了,總之,親測它單機好使,使用起來也比較方便,整合了nginx,可以直接透過瀏覽器訪問資源。

映象的拉取

如果你的這臺機器,之前沒有用過docker的話,還是一個老生常談的問題,你很有可能連線超時,然後拉取失敗,所以要配置映象。

如果你還沒有安裝過docker,也可以先安裝一下:

apt install docker.io

修改映象配置檔案 :

 vim /etc/docker/daemon.json

把各種映象的地址加上(沒有縮排的那幾個就是):

image-20240829094121066

下面是從網上搜到的映象:

DaoCloud	https://docker.m.daocloud.io
阿里雲	https://<your_code>.mirror.aliyuncs.com(阿里雲提供了映象源:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登入後你會獲得一個專屬的地址)
Docker映象代理	https://dockerproxy.com
百度雲	https://mirror.baidubce.com
南京大學	https://docker.nju.edu.cn
中科院	https://mirror.iscas.ac.cn

"https://yxzrazem.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"

來一份示例方便貼上

{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn",
        "https://ustc-edu-cn.mirror.aliyuncs.com/",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com"
    ]
}

重新載入配置,並重啟docker:

systemctl daemon-reload
systemctl restart docker

執行docker的tracker服務:

# 先建立資料夾,資料夾隨便定義,我這裡是為了方便,直接延用了別人播客的定義(其中-p是可以直接建立多級目錄)
mkdir -p /mydata/fastdfs/tracker
cd /mydata/fastdfs/tracker
# 執行docker命令
docker run -d --name tracker --network=host -v /mydata/fastdfs/tracker:/var/fdfs delron/fastdfs tracker
# 注意:tracker服務預設的埠為22122

執行docker的storage服務:

# 建立資料夾
mkdir -p /mydata/fastdfs/storage
cd /mydata/fastdfs/storage
# 執行命令
docker run -d --name storage --network=host  -e TRACKER_SERVER=x.x.x.x:22122 -v /mydata/fastdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
# 注意:其中TRACKER_SERVER中的ip要修改為你的Tracker服務所在的服務IP地址
# storage預設埠為23000

storage服務中預設安裝了nginx,埠為8888

服務測試

1.在/mydata/fastdfs/storage下上傳一張圖片,1.png

2.進入storage容器,上傳圖片

# 進入storage容器
docker exec -it storage bash

# 進入容器內資料夾
cd /var/fdfs/

#執行上傳命令
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 1.png

得到檔案路徑:group1/M00/00/00/rBA12WbOG4OAW8SKAAM9zD7woDQ406.png

3.瀏覽器訪問圖片:

http://47.xxx.xxx.52:8888/group1/M00/00/00/rBA12WbOG4OAW8SKAAM9zD7woDQ406.png

能訪問,說明上傳下載一切正常。

參考(未必全)

https://rqsir.github.io/2019/04/13/linux-make-install的安裝與解除安裝/

https://blog.csdn.net/weixin_50160384/article/details/139861337

https://www.cnblogs.com/likecoke/p/17495358.html

https://www.cnblogs.com/hequanbao/p/17035045.html

https://blog.csdn.net/zhouzaig/article/details/131412872

https://docs.tanmantang.com/docs/docker/FastDFS.html

相關文章