1. 程式人生 > >DIY一套NAS+私有云盤+下載機

DIY一套NAS+私有云盤+下載機

如果你家裡有多臺裝置需要聯網需要娛樂,你一定會或多或少遇到裝置碎片化帶來的煩惱。當然,已經有很多廠商包括新晉的小米、360在內的網際網路公司做了這個事情,給你搞個家庭儲存中心,基本能解決你的大部分需求。

但是,本著不折騰就會死的機翼安勁兒,咱自個來造個低成本低功耗的解決方案,成本680元,耗時2個小時左右。

NAS基礎設施搭起來

材料:先要有Raspberry Pi/路由器/破電腦等能裝Linux的裝置,適當容量的行動硬碟或SATA硬碟;
原理:在執行Linux的裝置上,掛載大容量硬碟,並利用Samba搭建NAS;
具體步驟之前有過教程,可移步:http://wemaker.cc/21

NAS

至此,如果你是嚴格按照教程部署,你的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

e-fly):

#!/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安卓版為例進行設定:

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路由……