FTP的搭建過程,以及遇到的坑
在之前的部落格中,我有說到,我最喜歡用Yum線上安裝的方式安裝軟體,簡單省事兒。現在看來,也不盡然,關鍵是,無法快速找到我要的檔案,整個whereis 也很累。所以,現在覺得,還是乖乖的整個壓縮包,自行安裝比較和我心意。
首先,要用到的壓縮包列表:
安裝步驟概況:
1,安裝執行環境包libevent工具包
2,安裝libfastcommon工具包
3,安裝Tracker服務
4,安裝storage服務
5,安裝Nginx提供HTTP服務
5.1,需要重新編譯Nginx,所以需要處理fastdfs-nginx-module外掛(簡單)
詳細安裝步驟:
友情提示:最好是把需要的壓縮包聚集到一個目錄下,然後解壓的時候,在一個自己知道的地方,沒什麼別的意思或者深意,只是為了自己方便找一些檔案,然後操作檔案的時候快一點。(你要是寫半天的cp或者rm,結果發現寫不出目錄,就呵 呵影響心情了)
1,安裝執行環境包libevent工具包
這一步是極其簡單粗暴的,一行命令:yum -y install libevent
2,安裝libfastcommon工具包
1, 解壓縮: tar -zxvf 壓縮包所在位置
2, ./make.sh
3, ./make.sh install
4, 把/usr/lib64/libfastcommon.so檔案向/usr/lib/下複製一份
備註:編譯安裝的時候,注意一下當前所在檔案的位置。 不跟我這個猴子派來的DB學習,當前,我可是在根目錄下執行./make.sh,還傻傻鬧不懂,為毛不成功
3,安裝Tracker服務
1、解壓縮2、./make.sh
3、./make.sh install
安裝後在/usr/bin/目錄下有以fdfs開頭的檔案都是編譯出來的。
配置檔案都放到/etc/fdfs資料夾
4、把/root/FastDFS/conf目錄下的所有的配置檔案都複製到/etc/fdfs下。
5、配置tracker服務。修改/root/FastDFS/conf/tracker.conf檔案。
重啟使用命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
4,安裝storage服務
1-4,同tracker服務安裝過程(如果在同一臺機器上安裝,則直接進行第5步)/usr/bin/fdfs_storaged/etc/fdfs/storage.confrestart
友情提示:在啟動storage服務的時候,時間相對長一點,但不會太長,如果過了好幾分鐘還沒有執行通過,孩子,你該看日誌檔案了。比如說,我在安裝的時候,storage服務一直沒有起來,也沒有建立相應的資料data資料夾,結果是因為我tracker伺服器配置出錯。還有防火牆埠的配置出錯。 日誌檔案寫得很明白。 7,測試服務:配置檔案/etc/fdfs/client.conf,要修改的地方有兩處:1,base_path=/home/fastdfs/client(客戶端日誌儲存路徑) 2,tracker_server=IP : 22122(tracker伺服器地址)5,安裝Nginx提供HTTP服務
備註:Nginx安裝過程省略,搞不定的,留言! 1,解壓fastdfs-nginx-module外掛 2,修改/root/fastdfs-nginx-module/src/config檔案,把其中的local去掉。3,重新配置Nginx
./configure \
--prefix=/var /nginx \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/nginx/client\
--http-proxy-temp-path=/var/nginx/proxy\
--http-fastcgi-temp-path=/var/nginx/fastcgi\
--http-uwsgi-temp-path=/var/nginx/uwsgi\
--http-scgi-temp-path=/var/nginx/scgi\
--add-module=/usr/local/fastdfs-nginx-module/src
附錄:最開始的config配置
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:上邊將臨時檔案目錄指定為/var/temp/nginx,需要在/var下建立temp及nginx目錄
4、make
5、makeinstall
6、把/root/fastdfs-nginx-module/src/mod_fastdfs.conf檔案複製到/etc/fdfs目錄下。編輯四個地方:1,base_path=/tmp(日誌存放路徑) 2,tracker_server=IP:22122(tracker伺服器地址) 3,url_have_group_name=true 4,store_path0=/home/fastdfs/storage (圖片儲存路徑,注意和storage服務配置相對應)7、配置nginx
在nginx的配置檔案中新增一個Server:
server {
listen 80;
server_name 192.168.101.3;
location /group1/M00/{
#root /home/FastDFS/fdfs_storage/data;
ngx_fastdfs_module;
}
}
8、將libfdfsclient.so拷貝至/usr/lib下
cp/usr/lib64/libfdfsclient.so /usr/lib/
9、啟動nginx
附:使用的基本程式碼
1,FastDFSClient
package taotao.utils;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
/**
* Created by Angelina on 2017/6/7.
*/
public class FastDFSClient {
private TrackerClient trackerClient = null;
private TrackerServer trackerServer = null;
private StorageServer storageServer = null;
private StorageClient1 storageClient = null;
public FastDFSClient(String conf) throws Exception {
if (conf.contains("classpath:")) {
String url = this.getClass().getResource("/").getPath();
url = url.substring(1);
conf = conf.replace("classpath:", url);
}
ClientGlobal.init(conf);
trackerClient = new TrackerClient();
trackerServer = trackerClient.getConnection();
storageServer = null;
storageClient = new StorageClient1(trackerServer, storageServer);
}
public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
return storageClient.upload_file1(fileName, extName, metas);
}
public String uploadFile(String fileName, String extName) throws Exception {
return storageClient.upload_file1(fileName, extName, null);
}
public String uploadFile(String fileName) throws Exception {
return storageClient.upload_file1(fileName, null, null);
}
public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
return storageClient.upload_file1(fileContent, extName, metas);
}
public String uploadFile(byte[] fileContent, String extName) throws Exception {
return storageClient.upload_file1(fileContent, extName, null);
}
public String uploadFile(byte[] fileContent) throws Exception {
return storageClient.upload_file1(fileContent, null, null);
}
}
2,應用例項
@Value("${IMAGE_SERVER_BASE_URL}")
private String IMAGE_SERVER_BASE_URL;
@Override
public PictureResult uploadPic(MultipartFile picFile){
PictureResult result=new PictureResult();
//check the picture
if (picFile.isEmpty()){
result.setError(1);
result.setMessage("the file not found");
return result;
}
//upload the picture to the server
try{
//get the file's extension
String originalFilename=picFile.getOriginalFilename();
String extName=originalFilename.substring(originalFilename.lastIndexOf(".")+1);
FastDFSClient client=new FastDFSClient("classpath:properties/client.conf");
String url=client.uploadFile(picFile.getBytes(),extName);
//stitching the URL
url=IMAGE_SERVER_BASE_URL+url;
result.setError(0);
result.setUrl(url);
}catch(Exception e){
e.printStackTrace();
}
return result;
}