DIY一套NAS+私有云盤+下載機
如果你家裡有多臺裝置需要聯網需要娛樂,你一定會或多或少遇到裝置碎片化帶來的煩惱。當然,已經有很多廠商包括新晉的小米、360在內的網際網路公司做了這個事情,給你搞個家庭儲存中心,基本能解決你的大部分需求。
但是,本著不折騰就會死的機翼安勁兒,咱自個來造個低成本低功耗的解決方案,成本680元,耗時2個小時左右。
NAS基礎設施搭起來
材料:先要有Raspberry Pi/路由器/破電腦等能裝Linux的裝置,適當容量的行動硬碟或SATA硬碟;
原理:在執行Linux的裝置上,掛載大容量硬碟,並利用Samba搭建NAS;
具體步驟之前有過教程,可移步:http://wemaker.cc/21;
至此,如果你是嚴格按照教程部署,你的NAS應該已經開始正常運轉,iOS、Android、Windows、Mac等不同系統都有連線NAS伺服器的應用,可自行度之。
變身雙向同步雲盤
NAS主要服務於同一區域網內的裝置,如果你想將你的NAS打造成可以外網訪問並進行資料同步的網盤,我們只需藉助FTP+動態域名解析即可實現。
A、配置FTP服務
接下來,我們使用vsftpd來搭建FTP服務(VSFTPD是一個開源的輕量級FTP伺服器程式),按照以下步驟進行配置:
sudo apt-get install vsftpd //安裝vsftpd伺服器 (約400KB) sudo nano /etc/vsftpd.conf //編輯vsftdp的配置檔案
在配置檔案中找到以下行,並設定為對應值:
anonymous_enable=NO //表示不允許匿名訪問 local_enable=YES //設定本地使用者可以訪問。 write_enable=YES //設定可以進行寫操作 local_umask=022 //支援斷點續傳
sudo service vsftpd restart //重啟vsftpd服務
OK,此時搭載有NAS的伺服器也已經具備FTP服務,現在可以使用瀏覽器訪問試試。此時,你的FTP依然只能在內網訪問,我們需要藉助動態域名解析服務實現外網訪問:
B、外網訪問設定(如果不需要外網訪問,此步非必須)
如果你還沒自己的域名,可以在網上申請各類免費得二級域名或直接在花生殼、3322上進行動態域名申請及配置。如果你有自己的域名,參照以下教程使用DNSPOD服務進行設定。先在DNSPOD註冊並新增域名,然後將你的域名DNS配置為DNSPOD的。之後,在linux上進行指令碼設定。確保你已經安裝了Python環境,然後新建Py指令碼,貼上如下程式碼(Via
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import urllib2,urllib,json
class Dns:
#Dnspod賬戶
_dnspod_user = '你的賬戶'
#Dnspod密碼
_dnspod_pwd = '你的密碼'
#Dnspod主域名,注意:是你註冊的域名
_domain = 'cb.e-fly.org'
#子域名,如www,如果要使用根域名,用@
_sub_domain = '@'
def getMyIp(self):
try:
u = urllib2.urlopen('http://members.3322.org/dyndns/getip')
return u.read()
except HTTPError as e:
print e.read()
return None;
def api_call(self,api,data):
try:
api = 'https://dnsapi.cn/' + api
data['login_email'] = self._dnspod_user
data['login_password'] = self._dnspod_pwd
data['format'] ='json'
data['lang'] = 'cn'
data['error_on_empty'] = 'no'
data = urllib.urlencode(data)
req = urllib2.Request(api,data,
headers = {
'UserAgent' : 'LocalDomains/1.0.0([email protected])',
'Content-Type':'application/x-www-form-urlencoded;text/html; charset=utf8',
})
res = urllib2.urlopen(req)
html = res.read()
results = json.loads(html)
return results
except Exception as e:
print e
def main(self):
ip = self.getMyIp()
dinfo = self.api_call('domain.info',{'domain' : self._domain})
domainId = dinfo['domain']['id']
rs = self.api_call('record.list',
{
'domain_id': domainId,
'offset' :'0',
'length' : '1',
'sub_domain' : self._sub_domain
})
if rs['info']['record_total'] == 0:
self.api_call('record.create',
{
'domain_id' : domainId,
'sub_domain' : self._sub_domain,
'record_type' : 'A',
'record_line' : '預設',
'value' : ip,
'ttl' : '3600'
})
print 'Success.'
else:
if rs['records'][0]['value'].strip() != ip.strip():
self.api_call('record.modify',
{
'domain_id' : domainId,
'record_id' : rs['records'][0]['id'],
'sub_domain' : self._sub_domain,
'record_type' : 'A',
'record_line' : '預設',
'value' : ip
})
else:
print 'Success.'
if __name__ == '__main__':
d = Dns();
d.main()
將以上程式碼儲存後,設定755許可權,執行即可。如需要定時檢測更新域名IP地址,可以將該指令碼檔案加入 /etc/crontab 進行定時執行任務。
至此,你的整個伺服器已經同時具備了內網的NAS,以及內網和外網的FTP服務。接下來,開始在你的各類終端上進行雙向網盤同步設定吧,本文以Android系統為例,其他系統的FTP同步教程請自行度之。
C、安卓手機資料同步
原理很簡單,找一個FTP的App,指定手機某個資料夾(一般都是相簿所在資料夾)自動同步到上文搭建好的NAS路徑中。相比使用百度雲等網盤同步,我們這樣做的優勢除了隱私性更強外,還能在本地WiFi網路內以極高的上行速率進行資料備份。
一處備份(從手機至NAS),多處共享(從NAS到Mac、PC、iPhone、iPad)。
本文以FtpSyncX安卓版為例進行設定:
第一步:新增伺服器,點選Add server,選擇FTP格式,設定好伺服器地址(建議填入以上文中的額動態域名,如不需要填入內網IP即可),填寫登入帳號和密碼;
第二步:設定要同步的兩端資料夾目錄,選擇Local Diectory設定手機上的資料夾,Remote directory設定NAS上對應的同步資料夾,建議新建一個。接下來設定同步型別,remote<=>local雙向同步、remote=>local NAS到手機單向同步、 local=>remote 手機到NAS單向同步,根據需要進行選擇。勾選上WiFi Only,只在WiFi下同步;
設定完成後開始同步看看效果吧。此軟體還可以設定同步時間間隔等高階引數。
搭建完美下載機
看了小米路由宣稱的1T硬碟和迅雷離線下載很心動?別急,咱也能。
Linux下可以實現BT下載的應用有很多,目前支援下載格式最多和最知名的是Aria2。相比以往的開源BT程式,Aria2不僅支援BT下載,還支援Http、Ftp、磁力連結等格式下載,當然,文章最後完美還附上了迅雷離線下載+Aria2的完美方案。
A、安裝並配置Aria2
在Linux終端內執行以下命令安裝Aria2程式:
sudo apt-get install aria2 //安裝Aria2
接下來配置Aria2的配置檔案,每行為一個單獨命令:
mkdir ~/.aria2 //新建資料夾 touch ~/.aria2/aria2.session //新建session檔案 nano ~/.aria2/aria2.conf //新建配置檔案
在aria2.conf配置檔案裡貼上以下程式碼,別忘記將裡邊的路徑替換為自己的:
dir=/home/cubie/Download //下載的預設目錄 disable-ipv6=true enable-rpc=true rpc-allow-origin-all=true rpc-listen-all=true #rpc-listen-port=6800 continue=true input-file=/home/cubie/.aria2/aria2.session //路徑要絕對路徑 save-session=/home/cubie/.aria2/aria2.session //儲存你的下載列表 max-concurrent-downloads=3
儲存並執行以下命令:
aria2c –conf-path=/home/cubie/.aria2/aria2.conf
如果沒有錯誤,Ctrl+C終止並繼續下一步,把aria2做成系統服務:
sudo nano /etc/init.d/aria2c
貼上內容如下:
#!/bin/sh ### BEGIN INIT INFO # Provides: aria2 # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Aria2 Downloader ### END INIT INFO case "$1" in start) echo -n "Starting aria2c" sudo -u cubie aria2c --conf-path=/home/cubie/.aria2/aria2.conf -D #sudo -u後面的是你正在使用的使用者名稱,因為我用的cubie,別忘記改成自己的 ;; stop) echo -n "Shutting down aria2c " killall aria2c ;; restart) killall aria2c sudo -u cubie aria2c --conf-path=/home/cubie/.aria2/aria2.conf -D #同上面的一樣,根據自己的使用者名稱改cubie ;; esac exit
儲存後退出,然後設定這個檔案的許可權為755:
sudo chmod 755 /etc/init.d/aria2c
測試Aria2服務是否可以啟動:
sudo service aria2c start
如果只顯示Starting aria2c,沒有其他錯誤提示的話就說明成功了。然後新增aria2c服務到開機啟動:
sudo update-rc.d aria2c defaults
由於Aria2不具備Web管理,所以需要使用第三方開發的開源程式Yaaw進行Web管理。先要確保你的Linux已經配置了Nginx或Apache等Web伺服器環境,關於Nginx的配置可參考此文:http://wemaker.cc/59,此處不再累述。
進入Web服務的檔案目錄,以Nginx為例:
cd /srv/www git clone http://github.com/wzhy90/yaaw
程式執行完成後,在瀏覽器中開啟http://IP地址或域名地址//yaaw,即看到Aria2的Web管理介面,此時一個支援BT、FTP、HTTP、磁力等格式的下載機已在完美運轉。點選右上角的設定項,在彈出的介面中找到Aria2 JSON-RPC Path,留好在下一步備用。
B、配置迅雷離線下載
這一步需要額外的程式支援,國內有高手開發出了Aria2結合迅雷離線的瀏覽器外掛,本文以Chrome為例設定。
開啟此連結,安裝Chrome瀏覽器擴充套件程式,然後登入迅雷離線的Web站(需要會員),點選頁面右上角的設定,在彈出的視窗中,找到Aria2 JSON-RPC Path項,將Yaaw中複製出來的URL貼上進去並儲存。接下來,試試在迅雷離線下一部片子,基本是秒下,然後點選“取回本地”旁的下拉按鈕,在選項中選擇Yaaw。回到你的Aria2 Web管理頁,是不是已經有一項任務躺在裡邊了?
至此,大功告成。咱也過上了想什麼時候下就什麼時候下、想在哪下就再哪下、想下啥就下啥、想在哪看就再哪看、想怎麼同步就怎麼同步的性福生活。
推薦方案:樹莓派B英國產+4G TF(255元)+ 1T硬碟 (400元) + 有源的USB Hub(25元)進行搭建,總成本680元左右。
預告:接下來會把樹莓派替換為一個802.11ac雙頻可刷OpenWRT的路由器,將整體成本和能耗降到最低。敬請期待我們帶來的路由器的解決方案。有了這神器,還等啥小米路由、360路由……