一、項目介紹
先附上項目Github地址https://github.com/82457097/CloudDisk;
這是我在網上找到的一個項目,覺得不錯就模仿着做了一下~
分佈式網絡雲盤,其中分佈式是指的分佈式存儲系統FastDFS,也是一個開源項目,沒有做很深的研究,大概瞭解了一下,可以看我的這篇博客介紹fastDFS分佈式文件系統介紹和安裝;然後在利用ngnix反向代理服務器,接收並處理用戶的請求,其中還使用了FastCGI+spawn-fcgi配合nginx工作;
然後呢還用到了MySQL和Redis數據庫,其中MySQL用於存儲文件的信息,Redis呢主要用於存儲用戶註冊登錄之類的鑑權信息,這一塊我還沒有實現~目前呢只實現了一些基本的文件上傳下載等功能。
二、項目架構
項目架構的話先看一張我扒來的圖吧~不是很清楚。
圖上的內容就是該項目的組網架構,主要工作流程是用戶通過瀏覽器(或者客戶端)發送操作請求到web服務器,也就是由nginx反向代理的web服務器。然後fastCGI+spawn-fcgi模塊創建進程來接收通過web服務器而來的用戶請求,並交由fastDFS文件系統處理,並返回處理後的結果給web服務器,web服務器再將結果展示給用戶。
三、項目準備
該項目需要一個Linux服務器,推薦阿里雲,環境搞壞了可以直接重裝系統,分分鐘就好了,很節約時間,哈哈~
我這裏只列一下需要安裝哪些組件,後面我會把整理好的安裝包全部傳到GitHub裏面~
- nginx version: nginx/1.16.1 (nginx可以直接去官網下載www.nginx.org,很方便,不過要注意一下版本,版本不能比1.16.1高)
- 關於nginx的介紹
- fastdfs (項目GitHub地址https://github.com/happyfish100)
- 關於fastDFS的介紹
- fastCGI (項目GitHub地址https://github.com/FastCGI-Archives/FastCGI.com)
- fastCGI的工作原理
- spawn-fcgi 下載地址http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz
- fastdfs-nginx-module 項目GitHub地址https://github.com/happyfish100/fastdfs-nginx-module
- MySQL apt或者yum就行
- Redis 同上
四、環境搭建
環境搭建這一塊,我之前的文章已經總結好了,按順序一個一個裝就行了~
- nginx安裝
- fastDFS安裝
- fastdfs-nginx-module安裝這個是重點!!!一定要配置好!!!
- fastCGI安裝
- spawn-fcgi安裝:下載好直接解壓./configure然後make和makeinstall就OK
- MySQL安裝
- Redis安裝
五、環境測試
搭建好環境之後,就可以測試一下環境是否沒有問題了。
- 我們要更改一下nginx配置文件測試fastcgi模塊
$ cd /usr/local/nginx/conf/
$ vim nginx.conf
- 加一個測試location
location /test {
fastcgi_pass 127.0.0.1:7890; //記住這個端口號7890
include fastcgi.conf;
}
- 然後編譯src中的test.c
$ gcc test.c -o test.cgi -lfcgi
- 然後用spawn-fcgi開啓test.cgi
$ spawn -a 127.0.0.1 -p 7890 -f ./test.cgi
- 然後打開網頁的測試一下 在瀏覽器輸入你的服務器IP/test就行,看看web服務器是否會返回消息~
- 然後再測試fastdfs-nginx-module模塊參照這個鏈接測試就行
六、文件上傳流程
fastDFS系統文件的上傳下載原理看這篇文章fastDFS分佈式文件系統文件上傳和下載流程;
下面這張圖是上傳文件的代碼流程~
七、文件上傳測試
因爲我不會寫前端界面,所以這裏的web界面使用網上找的現成的界面,只需要把它部署到nginx上面就好了,具體設置按照下面修改nginx.conf文件;
//在目錄/usr/local/nginx下創建一個work目錄,然後將zfFile2文件目錄拷貝進去,並在nginx配置文件裏更改location如下~
location / {
root work/zyFile2;
index demo.html;
}
location /upload {
fastcgi_pass 127.0.0.1:10003; //記住端口號 監聽的端口要和配置的一致
include fastcgi.conf;
}
配置好重啓nginx $ nginx -s reload
在瀏覽器輸入ip會得到如下功能界面,在這裏你就可以進行上傳操作了,但是之前你需要把src裏面的upload.cgi程序編譯出來~
然後$ spawn -a 127.0.0.1 -p 10003 -f ./upload.cgi
然後成功的操作就會和下圖一樣~數據庫也能找到相關文件的信息;
八、項目總結
做這個項目還是花了比較長的時間的,目前也只是完成了基本的上傳文件功能,其它功能待進一步開發,都不是什麼大的問題了;前期因爲缺乏經驗。搭環境遇到了無數的坑,但是有些坑踩過了之後,也是一種成長,省的以後在工作中再踩了~總體來說,做這個項目收穫還是比較大的,主要的收穫也不是編碼能力的提升,而是對項目的架構能力,瞭解了一些通用的項目架構框架,瞭解了許多開源組件的性能特點,也知道了如何去選擇合適的組件,針對什麼樣的業務場景,需要注意哪些點。。。