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
把各種映象的地址加上(沒有縮排的那幾個就是):
下面是從網上搜到的映象:
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