树莓派 | Apache2 + Webdav搭建NAS并映射至公网全流程踩坑记录

前言

个人很喜欢看电影也很喜欢收集电影,所以搞了2T的硬盘专门用来存搜罗到的电影。后来发现有个搭配树莓派的webdav服务,感觉很牛逼很方便,遂动手开搞。
在动手的过程中遇到了很多坑,特此记录并帮助大家规避。
中间会有很多小白向内容,冗杂的说错的恳请各位大佬指正或使用快捷键alt +f4开喷。

第零步:设备

¥158:Raspberry Pi 2B(无包装) + HDMI线 + 8G卡 + 七七八八
¥21.8:电源 + 线 + 壳

因为买的树莓派是无包装的9成新(好像),所以价格很便宜。第一次动手搞,本着贫穷节俭的思想,买了一个比较老的版本,用起来也没什么问题。

透明树莓派

第一步:Apache2 服务

Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python解释器编译到服务器中。

这次通过apache2实现webdav,所以理论上第一步是在树莓派上安装Apache2服务器:
sudo apt-get install -y apache2
但是!这里就会出现第一个坑,错误提示大概是:

Reading package lists... Done
Building dependency tree      
Reading state information... Done
...
Do you want to continue? [Y/n] y
Err:2 http://mirrordirector.raspbian.org/raspbian stretch/main armhf xrdp armhf 0.9.1-9
  404  Not Found [IP: 93.93.128.193 80]
Err:1 http://101.110.118.74/mirrordirector.raspbian.org/raspbian stretch/main armhf xorgxrdp armhf 0.9.1-9                                                  
  Could not connect to 101.110.118.74:80 (101.110.118.74), connection timed out
E: Failed to fetch http://101.110.118.74/mirrordirector.raspbian.org/raspbian/pool/main/x/xxx.deb  Could not connect to 101.110.118.74:80 (101.110.118.74), connection timed out
E: Failed to fetch http://mirrordirector.raspbian.org/raspbian/pool/main/x/xxx.deb  404  Not Found [IP: 93.93.128.193 80]
 
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

这里比较好懂,重点留意最后一句就能理解是要更新apt-get了,那么就按照提示升级就好
apt-get update
但是!!!这里又会出现第二个坑!错误提示大概是这样的:

...
已下载 54.3 MB,耗时 3分 10秒 (285 kB/s)                                                                                                                                
E: Failed to fetchhttp://mirrors.opencas.cn/raspbian/raspbian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2q-1~deb9u1_armhf.deb  Could not connect to mirrors.opencas.cn:80 (2001:cc0:2020:4075::211)  - connect (101: Network is unreachable)
E: Failed to fetchhttp://mirrors.opencas.cn/raspbian/raspbian/pool/main/o/openssl/libssl1.1_1.1.0j-1~deb9u1_armhf.deb  Could not connect to mirrors.opencas.cn:80 (2001:cc0:2020:4075::211)  - connect (101: Network is unreachable)
E: Failed to fetchhttp://mirrors.opencas.cn/raspbian/raspbian/pool/main/o/openssl/openssl_1.1.0j-1~deb9u1_armhf.deb  Could not connect to mirrors.opencas.cn:80 (2001:cc0:2020:4075::211) - connect (101: Network is unreachable)
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

简单的来说,就是各种超时,原因就是因为源在墙外,需要换成墙内的,方法:

  1. sudo vi /etc/apt/sources.list
  2. 用#注释第一行,并替换为以下其中任一,这两个分别是中科大和清华的源,速度没问题,也基本不用担心不同步的问题
#中科大
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi 
#清华
deb https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
  1. 保存退出
  2. sudo vi /etc/apt/sources.list.d/raspi.list
  3. 同上方法替换,依旧是熟悉的二选一
#中科大
deb https://mirrors.ustc.edu.cn/archive.raspberrypi.org/ stretch main ui
#清华
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

到这里安装Apache2的坑基本都遇到了,现在就只要按照流程更新apt-get和安装Apache2就可以了:

apt-get update
sudo apt-get  install  -y apache2

第二步:开启Webdav服务

WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GETPOSTHEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制

按说在Apache2中对WebDav协议的支持只有很简单的两句话:

#注意要切换至用户目录不然可能会报错
cd ~
sudo a2enmod dav
sudo a2enmod dav_fs

哇前面的第一步搞得那么麻烦这个两句话就可以搞定了吗...等等你刚刚说了按说?!

对的你没有猜错,这里可能会出现第二步的第一个错误:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
...

解决方法:

  1. sudo vi .bashrc
  2. 在最后一行加入export LC_ALL=C
  3. 执行source .bashrc

为什么这么做?
看了这篇文章了解了下locale,上面报的warning意思大概可以归纳为
-LC_ALL变量的值unset
-LC_CTYPE和LC_MESSAGES的值设置的可能有问题

解决完成之后再执行开启Apache2中对WebDav协议的支持的那两句命令就应该没有什么问题了,之后就是创建共享目录、添加账户与权限和修改配置文件。

#开启对WebDav协议的支持
cd ~
sudo a2enmod dav
sudo a2enmod dav_fs

# 创建共享目录并修改权限
sudo mkdir -p /var/www/webdav
sudo chown -R www-data:www-data  /var/www/webdav

# 创建WebDav的访问用户数据库,顺便创建用户`pi`
sudo htpasswd -c /etc/apache2/webdav.password pi
# 创建guest用户
#sudo htpasswd /etc/apache2/webdav.password guest

# 修改用户数据库访问权限
sudo chown root:www-data /etc/apache2/webdav.password
sudo chmod 640 /etc/apache2/webdav.password

# 打开默认配置文件
sudo vim /etc/apache2/sites-available/000-default.conf

# 全部替换为以下内容(记得先备份):

Alias /webdav  /var/www/webdav

<Location /webdav>
 Options Indexes
 DAV On
 AuthType Basic
 AuthName "webdav"
 AuthUserFile /etc/apache2/webdav.password
 Require valid-user
 </Location>

# 重启Apache2服务器
sudo systemctl restart apache2
# 或
sudo /etc/init.d/apache2 reload

这时候就可以浏览器打开http://树莓派ip地址/webdav并输入账号密码,如果看到如下页面,就表示webdav服务成功开启了!

You did it!

第三步:公网访问

要实现公网访问,首先需要一个公网ip,关于这一步在网上有很多讨论,几个要点总结如下:

  • 电信比移动好申请;
  • 大城市比二三线城市好申请;
  • 通用话术:家里有小孩需要装监控,大概率能过;
  • 雷区话术:要搭建个人网站,这个千万不要说,不然会被追着问各种杂七杂八的问题;
  • 如果就是不给/装傻怎么办?根据网上老哥的说法,硬肛就完事儿了。一级一级往上肛,最后可以一直告到网信办(?)就会在一周内解决。

作者坐标sz,用的是电信,打给10000号说要公网ip,直接就给办了,一两个小时就有了。

公网IP验证方法

  1. 登进路由器,在网关信息里看WAN口ip
    WAN IP
  2. ipip.net看它给出的你的ip地址是多少;
  3. 如果两个都一样,那恭喜你的公网IP搞到手了。

需要额外注意的一点是,这个ip地址会随着你的路由器重启之类的操作而重置,这个问题会在后面通过白嫖购买域名解析的方法解决。

在获得公网ip之后,可以通过端口映射使自己在公网也能访问到自己的webdav服务,以下按照我的具体情况展开,如果条件不符或能够更简便的操作(如TPLINK的路由器甚至可以直接搞一个二级域名,酸了)可以直接跳过。

我的路由器是电信给的光猫,具体型号是ZXHN F650。操作端口映射需要光猫的超级管理员权限,账号密码是telecomadmin/nE7jA%5m,具体情况因人而异,如果不对的话可以打电话给电信让他联系负责维修你周围片区的师傅,然后商量一下他应该就会告诉你的。

登进超级管理员账户后,点击应用 - 高级NAT设置 - DMZ设置,如下图

流程1

在DMZ主机IP地址内填上你的树莓派的IP地址,点击保存然后再点击第二行的虚拟服务器设置
流程2

填好你的外部端口、客户端IP地址(树莓派的ip地址)、内部端口(80,因为webdav用的是Apache所以使用80端口)然后点击保存。

现在再在浏览器访问http://你的公网ip:你填的外部端口号/webdav就会发现

惊不惊喜,意不意外

嗯?怎么回事?难道我们配错了吗?
不是的!这里完全就是电信的锅!根据研究表明,问题根本就出在这个电信光猫的DMZ是暴力映射,导致你在内网环境下用公网访问它就懵圈了,其实这个时候只要掏出手机用4G访问,大概率就是成功的。

如果在非内网环境下访问也成功了,那么恭喜你,第三步基于哈批电信光猫的端口映射公网IP访问你也成功搞定了!

----- 未完待续 -----

以下文章在本次实现过程中给予了我巨大帮助与部分问题的思路,特此记录并感谢:
❖ Ubuntu安装WebDav文件共享服务器(NAS)
玩树莓派(raspberry pi) 2/3 raspbian的遇到的一些问题
树莓派—raspbian软件源(全)
解决perl: warning: Setting locale failed.
中国电信光猫路由模式端口映射问题记录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容