1. 程式人生 > >FTP的搭建過程,以及遇到的坑

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檔案。
備註:自己看好自己相應檔案所在的位置,Vim tracker.conf 需要修改的內容(也說不上修改,只是和配置檔案對應):base_path=/home /yuqing /fastdfs 兩個選擇:一,將此路徑修改為自己指定的路徑;二、按照此路徑,在相應的位置,建立檔案目錄。(所以我說,也算不上是修改) 6、啟動tracker。/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
重啟使用命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

4,安裝storage服務

1-4,同tracker服務安裝過程(如果在同一臺機器上安裝,則直接進行第5步)
5,配置storage服務。修改/root/FastDFS/conf/storage.conf檔案 要修改的地方,有3處:1,base_path=/home/yuqing/fastdfs    2,store_path0=/home/yuqing/fastdfs(這是圖片儲存路徑,必須存在)   3,tracker_server=IP : 22122(指定tracker伺服器的ip及埠號,預設的埠為22122) 6,啟動storage服務。

/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;
    }