你现在看到的这个页面,存放在我家里的路由器里。速度还可以吗?请反馈给我。
前段时间我已经成功地把博客网站架设到一部闲置的安卓手机里,那部手机只是屏碎了,本着物尽其用的原则,我丝毫没怀疑它1G内存、MT6589 1.2GHz四核的CPU足够应付一个wordpress博客程序,结果表现却很差劲,尽管测试静态页面、PHP探针速度都不错,但真正把网站部署上去才发现慢得和蜗牛有一拼。
我妈也要上网,几天前我花79块买了一台百度路由器,准备把旧的换下来给她用。给新路由器刷完了开源的openwrt路由器系统,我就琢磨想把网站部署在路由器里,毕竟现在使用Linode在日本机房的VPS,每月要花10美元,一年也要七、八百元。事到如今,一分钱也要省出来……经过几天的研究,成功实施了。
以下内容非技术兴趣的朋友请略过,直接看文章结尾。
在路由器上搭建网站,考虑四个方面的问题:
- 路由器存放网站的空间问题
- 路由器的web服务环境问题
- 宽带上网带来的动态域名解析问题
- 联通宽带屏蔽了80端口的问题
一、网站空间问题
百度路由器刷了最新的openwrt固件后只剩下1M多的容量,远远不够存放一个网站,首先要解决这个问题。
这个路由器宣传的一个卖点就是可以利用原系统中的百度云脱机下载,提供了一个USB接口,于是找出一个16G的U盘插上去,准备把网站文件放U盘里。
方法是先给U盘分区,再格式化成Linux格式,然后挂载到系统上,并设置开机自动挂载。
分区的目的是分出一部分空间作为swap交互空间,实际意义可能不大,但openwrt允许挂载swap,那就不妨分出一块,或许对性能提升有所帮助。
以root用户ssh到路由器,执行如下操作:
cfdisk delete new 输入15000,确认 new 确认 选择第二项,选择菜单type,输入82确认,分区就分好了。
接下来是格式化:
mkfs.ext4 /dev/sda1 mkswap /dev/sda2
分好区,下一步完成挂载,openwrt提供了方便的挂载功能。
登录路由器web管理,点击【挂载点】菜单,把自动出现的挂载项目打勾后【保存&应用】即可。如下图:
二、路由器web服务环境
由于惯性思维,首先就想给路由器安装nginx、mysql、php。正要下手的时候,想到路由器的配置还没有那部手机高,如果还是安装同样的环境,估计还是存在原来的性能问题,网站搭建在手机上的性能瓶颈究竟在哪儿,我还没有深入研究,在没有得出结果之前,路由器肯定不能再继续这样干。
这一步陷入了僵局,考虑了很久用什么环境来支持php和数据库。最后灵机一动,没有什么比静态网站很节省资源了吧?貌似得到这个答案很容易,但真是费了不少脑细胞。
于是就开始探索静态化,用CMS在本地生成静态文件上传到路由器?有点杀鸡用牛刀。搜了一番,发现现在的博客主又“高大上”了,还发明了“像黑客一样写博客”的口号,其实无非就是轻型的静态化后发布在像github一类可以托管page文件的网站上,这样的工具有Jekyll、Octopress、Pelican、Hexo等,对比了一番使用了台湾小伙儿开发的Hexo。
现在只需要一个静态的web服务软件就可以了,到底是装nginx还是lighttd,对比的过程中又想到,现在openwrt使用的luci管理界面肯定是运行在一个web服务软件上,到系统进程中一看,原来用的是uhttpd,那只需要在它基础上配置就可以了,不需要安装新软件。
总结在服务环境的这个问题上,抛弃了动态网站的支持,利用自带软件实现。
三、DNSPOD动态域名解析
家里装的10M联通宽带,使用PPPoE拨号,路由器断电或掉线重拨后都会导致ip发生变化,ip变化后,域名必须更新A记录到新的ip上,这一步我采用DNSPOD动态域名解析。方案简单但过程同样坎坷。记录成功结果如下:
在dnspod api页面中,复制AnripDdns v0.3脚本。删除注释,并修改dnspod的用户邮箱和密码,以及要解析的域名,我的是zgw.me,子域名ip。上传到路由器的/usr/sbin目录,设置权限为755,ssh终端中vi编辑,去掉每行结束的^M符。
运行脚本后登录dnspod域名管理,发现zgw.me下的ip已被成功更新为本次拨号分配到的外网ip。
配置定时任务,登录路由器web管理,点击【系统】-【计划任务】,在文本框中输入
0-59 * * * * /usr/sbin/dnspod
提交。这样域名解析的脚本每分钟会运行一次,判断本地ip有没有发生变化,如有就去更新dnspod的记录。
至此,动态域名解析也成功搞定。
四、80端口被封的解决方式
宽带封了80、8080等端口,不只联通,别的ISP运营商也都屏蔽了,这一点上没有好的方法,只能把端口换掉,我换成了1983,我出生的年份。我不确定北京联通宽带有没有封https,即443端口,在尝试给uhttpd配置ssl时遭受了无尽的挫折,最后放弃了。所以我最终放到路由器上博客的访问地址为:http://zgw.me:1983。
uhttpd的配置方法:
root用户ssh到路由器,执行vi /etc/config/uhttpd
在结尾添加代码
config uhttpd blog list listen_http 0.0.0.0:1983 option home /home/wwwroot nodirlist yes
重启uhttpd服务:/etc/init.d/uhttpd restart
设置路由器防火墙,开放1983端口,点击【网络】-【防火墙】-【通信规则】,在“打开路由器端口”中输入1983,添加后【保存&应用】。
把hexo生成的网页文件,上传到路由器中,打开浏览器已可以正常访问。遗留的一个问题是解析不了中文的url,留待下一步处理。
至此,个人博客从linode vps中的wordpress迁移到hexo静态化并部署到家里路由器上的工作正式结束。本文是成功部署后的第一篇文章。
这个过程中,我一直在想我究竟拥有什么样的技能,能在社会生存领域里换取到财富。我一直不是专门从事技术的,但是一个普通互联网项目所需要的从头到尾的技术或多或少都懂一些,而我现在所做的工作是产品经理。
总体上貌似会得挺杂,现在中医我也略懂一二,软性的知识像管理理论等也比较完善。可是我究竟能做些什么呢?没有掌握一门硬技术,在急需金钱的阶段里非常尴尬,做不了兼职。
杂七杂八学了这么多东西是图什么,又变不了现,难道能理解为如同不断折腾一样,学习的过程也会有快感?这句话太磕碜人了,就和学霸说的一样。
以解决一个具体问题为目标,如某症状的辨证论治、在路由器上搭建一个网站等,方法和思路其实是相通的。
2015年1月6日更新:前一天已经又把网站放置在公网VPS上了。放在路由器上速度完全没问题,就是更新起来麻烦,生成后还得上传,最关键的是端口不能用默认的80,所以玩玩就放弃了。