在本地搭建自己的私有云

 andlly   2018-07-10 23:45   118 人阅读  0 条评论

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):

[python] view plain copy
  1. #!/usr/bin/env python  

  2. #<strong style="color:black; background-color:#99ff99">-</strong>*<strong style="color:black; background-color:#99ff99">-</strong> coding:utf<strong style="color:black; background-color:#99ff99">-</strong>8 <strong style="color:black; background-color:#99ff99">-</strong>*<strong style="color:black; background-color:#99ff99">-</strong>  

  3.   

  4. import urllib2,urllib,json  

  5.   

  6. class Dns:  

  7.     #Dnspod账户  

  8.     _dnspod_user = '你的账户'  

  9.     #Dnspod密码  

  10.     _dnspod_pwd = '你的密码'  

  11.     #Dnspod主域名,注意:是你注册的域名  

  12.     _domain = 'cb.e<strong style="color:black; background-color:#99ff99">-</strong>fly.org'  

  13.     #子域名,如www,如果要使用根域名,用@  

  14.     _sub_domain = '@'  

  15.   

  16.     def getMyIp(self):  

  17.         try:  

  18.             u = urllib2.urlopen('http://members.3322.org/dyndns/getip')  

  19.             return u.read()  

  20.         except HTTPError as e:  

  21.             print e.read()  

  22.             return None;  

  23.   

  24.     def api_call(self,api,data):  

  25.         try:  

  26.             api = 'https://dnsapi.cn/' + api  

  27.             data['login_email'] = self._dnspod_user  

  28.             data['login_password'] = self._dnspod_pwd  

  29.             data['format'] ='json'  

  30.             data['lang'] =  'cn'  

  31.             data['error_on_empty'] = 'no'  

  32.   

  33.             data = urllib.urlencode(data)  

  34.             req = urllib2.Request(api,data,  

  35.                 headers = {  

  36.                     'UserAgent' : 'LocalDomains/1.0.0(roy@leadnt.com)',  

  37.                     'Content<strong style="color:black; background-color:#99ff99">-</strong>Type':'application/x<strong style="color:black; background-color:#99ff99">-</strong>www<strong style="color:black; background-color:#99ff99">-</strong>form<strong style="color:black; background-color:#99ff99">-</strong>urlencoded;text/html; charset=utf8',  

  38.                     })  

  39.             res = urllib2.urlopen(req)  

  40.             html = res.read()  

  41.             results = json.loads(html)  

  42.             return results  

  43.         except Exception as e:  

  44.             print e  

  45.   

  46.     def main(self):  

  47.         ip = self.getMyIp()  

  48.         dinfo = self.api_call('domain.info',{'domain' : self._domain})  

  49.         domainId = dinfo['domain']['id']  

  50.         rs = self.api_call('record.list',  

  51.             {  

  52.                 'domain_id': domainId,  

  53.                 'offset' :'0',  

  54.                 'length' : '1',  

  55.                 'sub_domain' : self._sub_domain  

  56.             })  

  57.   

  58.         if rs['info']['record_total'] == 0:  

  59.             self.api_call('record.create',  

  60.                 {  

  61.                     'domain_id' : domainId,  

  62.                     'sub_domain' : self._sub_domain,  

  63.                     'record_type' : 'A',  

  64.                     'record_line' : '默认',  

  65.                     'value' : ip,  

  66.                     'ttl' : '3600'  

  67.                 })  

  68.             print 'Success.'  

  69.         else:  

  70.             if rs['records'][0]['value'].strip() != ip.strip():  

  71.                 self.api_call('record.modify',  

  72.                 {  

  73.                     'domain_id' : domainId,  

  74.                     'record_id' : rs['records'][0]['id'],  

  75.                     'sub_domain' : self._sub_domain,  

  76.                     'record_type' : 'A',  

  77.                     'record_line' : '默认',  

  78.                     'value' : ip  

  79.                     })  

  80.             else:  

  81.                 print 'Success.'  

  82.   

  83. if __name__ == '__main__':  

  84.     d = Dns();  

  85.     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,留好在下一步备用。


本文地址:http://10tf.com/post/31.html
版权声明:本文为原创文章,版权归 andlly 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?