前情提要
今早凌晨四点被热醒,起来了以后就没睡着,想着闲着也是闲着,就用手机把昨天搞坏的树莓派防火墙也整理了一波,借着这个契机又顺便把博客系统也弄了一下,回忆起了很多十年前搞博客的趣事,因而开篇记载下这些陈年往事。
树莓派
大概在2016年,当时还在读高一,天天在学校机房里不务正业,那时候agar.io风靡一时,以至于后来国内都开始抄袭出了《球球大作战》的同款游戏。那阵子我和几个同学天天在公服挂学校的名字玩这个游戏,有时还能干到榜一。如今时过境迁,agar在屏蔽了中国IP以后又慢慢降低了人气,再到现在已经完全停服。
当时的玩法已经不满足于在公服玩,我开始在网上寻找是否有开私服的方案,目的是为了上电脑课的时候能开个私服让班上同学也能一起玩。后来还真有个大佬弄了一个,但直接跑又跑不起来,我就试着给他发了一封email,没想到这位来自台湾的大佬还真帮我看了一下,后来一来二去就成了网友,认识了一下发现也就是同龄人,但他的计算机知识储备已经远超于我。
有天我跟他交流了下博客站点的部署方案,他给我介绍了如何用树莓派+NoIP在家里部署好自己的博客,给刚踏入计算机领域半只脚的我听得大受震撼。所以我就斥巨资220块钱买来了一台树莓派3B。刚开始几天因为SD卡不适配的问题刷了好几天的系统,怎么都开不了机,后来意识到是卡的问题以后又换了一张金士顿的灰卡,效果立竿见影,刷了一大堆有的没的系统,ubuntu、windows,甚至有些号称可以把树莓派当游戏主机和路由器的系统也全都试过,但受限于树莓派的硬件问题,这些系统大多都不太好使,最后还是刷回了树莓派的官方定制debian。
大家喜闻乐见的指令rm -rf /
我也在树莓派上试过,它会首先询问是否确认要删除,如果确认的话要用它指定的特殊指令来删除才能行。删除过程很顺利,基本能删的都会删干净,删完以后就是板砖了,除了界面和还在内存里的部分还能看和动,任何指令都运行不了。
博客系统
最开始写博客大概是在2015年左右,昨天还翻了一下博客园的注册时间,15年10月份注册,最开始是为了记录下自己学习算法的一些理解以及平时做题的题解,后来逐渐变成了生活感悟记录,再后来就逐渐淡出了自己的视野。但是记录的形式上却一直在探索。
最开始在博客园(cnblog)上写博客,在目睹了博客园这么多年来经历的几次生存危机以后,感觉它的市场份额已经逐渐让给了CSDN。在博客园写了没多久以后,我们机房的小伙伴就开始探索如何自建博客系统,那是最早接触前端的时间点,还犹记得某天在记事本里写下<input />
,在浏览器打开页面就能看到输入框的兴奋感。
如果对cnblog的危机感兴趣的话可以参考下述链接:
https://www.cnblogs.com/cmt/p/14003277.html
https://www.cnblogs.com/cmt/p/14585828.html
https://www.cnblogs.com/cmt/p/17520031.html
https://www.cnblogs.com/cmt/p/18302049
https://www.cnblogs.com/cmt/p/18341478
后来步入机房学长的后尘,开始转学PHP,在这期间接触了wordPress,时至今日,似乎wordPress依然是社区博客系统里的首选。当然,了解了博客系统的原理,我们肯定不满足于本地部署,也就是在这种“好奇心驱动学习,学习理解后又带来更多好奇心”的正反馈下,逐渐学会了如何把服务部署上云,理解了计算机服务运行的大致原理。
域名和主机
大概也是在2016年前后,那时候阿里云正在对个人用户市场进行大规模推广,新注册的用户可以免费使用2年主机,但那时候也不懂什么是主机、域名、服务器,只是一味地申请。申请到手后就发现主机只给了一个ftp的上传链接和一个能访问到根目录到公网IP地址,它能做的仅有处理PHP请求和静态资源请求。最开始捣鼓这玩意的时候只是摸索出了可以把HTML模版上传上去,然后用IP地址访问到这些资源。后来发现这样做除了每次有修改都得手动修改文件代码再上传以外,还无法完成动态添加内容以及翻页等功能,进一步的,就开始探索如何实现动态的站点,一直到这,就学到了PHP和MySQL数据库。
学会了如何制作一个站点以及数据库与前台的交互以后,自然而然的希望自己的站点能像百度一样有个特定域名可以访问,带着这份好奇开始学习域名。最先寻求的免费方案就是tk域名,这个顶级域名至今仍然是免费的,但是它的免费时长是有限的,过期续用要缴费,事实上这也是各大域名托管商赚钱的手段,以低价甚至免费引诱你入坑,后续逐年涨价,而用户往往做成业务以后不会再更改域名,也就会一直续着了。这个站点的域名就从最开始的30一年一路涨到现在的95一年,但现在应该很难注册到5位纯英文的com域名了。后来又了解过很多顶级域名,印象最深的是moe域名需要有edu教育邮箱才能注册,但后来读大学以后对这方面也冷却了热情,并没有再做进一步了解。大学有天偶然接触到一个新的知识,就是这些IP、MAC、域名,都是由国际级别的组织进行统一管理,通常这些组织总部都设立在美国,合法的域名托管商实际上也是要到他们那里注册获得授权才能经营托管域名的活动,如果有兴趣了解域名相关的可以访问:https://www.icann.org/zh
,官网有一份全球的合法域名托管商的清单。
早年阿里云收购了万网,还记得当时访问他们的站点域名是wanwang.aliyun.com
,万网本来是做域名起家的,我猜测是阿里云想搞一块这个业务,但是又不想从0开始,干脆就收购了万网。后来万网的概念也被阿里云弱化了,如今已经很难找到万网的痕迹。注册了域名又需要备案,前前后后花了半个多月到一个月,阿里云还邮寄了一块蓝色布,上面用白色字体写满了“阿里云计算”,顶着蓝色布拍一张照,上传到阿里云备案系统,然后就是等待工信部的审核,通过以后就会得到一个备案号。工信部要求合法的站点必须在页面底部悬挂备案号,并且超链接到工信部的网站,所以如果你发现境内站点有不满足这一要求的,通通按违法站点理解。
另外上线了站点以后还有SEO的问题,如何提高网站权重,让站点不但能被检索到,而且还要显示在搜索结果的顶部。一般就是通过设置一些关键字,和他人相互添加友情链接,主动暴露站点并通知搜索引擎的爬虫等方式完成。
内网穿透
如果在家里弄好了树莓派作为服务器,那么如何对公网暴露服务,以便于其他人能在外部访问到你的站点呢?答案就是获得一个公网IPv4的IP地址。这个事情并不容易,作为新手来说,当时的我以为路由器上的WAN IP就是公网IP,但很快我就发现,同小区的其他宽带环境下可以访问到该站点,但只要切换到流量就无法访问到。之后我就知道了IPv4地址是紧缺的,一般来说非必要的情况下,服务提供商并不会给你分配一个公网IP,而是分配一个区域性质的局域网IP。但我也说了,这是非必要的情况下,查了一些资料以后发现,其实服务提供商提供公网IP是义务,所以我直接打了电信的人工客服,要求他给我分配一个IPv4的公网IP地址,电信当然也没有墨迹,直接就给我标记成了公网IP,重启了光猫以后就拥有了一个公网IP地址,但运营商通常对于IPv4的80和443端口都是管控的,所以也只能很挫的通过带特定端口号的形式去访问站点。
为了解决这一问题,我也和台湾的网友交流了一下,他表示在台湾地区的中华电信申请一个公网IPv4地址一年需要缴纳几千上万的费用,因而他并没有获得一个IPv4,而是通过内网穿透的方式实现的。大致的原理如下:
- 租一台价格相对较低的云服务器,通常都会分配一个公网IP,并且在上面挂一个服务,代理并转发所有到达该机子的请求
- 局域网的树莓派去拨通该服务,形成一条通信通道,并且等待服务器转发来的请求
- 将域名绑定到云服务器的公网IP上
这种方式通常被称为“反向代理”,如果对上述感兴趣的可以参考github社区里的frp
项目或者直接使用花生壳的方案,顺带一提,很多路由器上其实是有花生壳的配套插件的。那为什么这个方案叫做内网穿透呢?我的理解是通过这种方式,所有请求绕开了链路上的层层防火墙直达了机子,例如通过这种形式就不会被服务商屏蔽80和443端口,也不会被路由器上的防火墙拦截之类的。
公网IPv6
近期又重新拾起了树莓派,主要是想用软件的方式对自己生活的一些琐碎进行管理,例如美食、旅游、阅读、健身、读书、资产等等这些,将他们整合到一个平台上来使用。了解到家里的宽带直接分配了公网IPv6以后,就选择了这一方式,因为IPv6目前也不屏蔽80和443,所以访问非常通畅。但部分网络环境并不支持IPv6,所以也通过了反向代理的方式支持了一下IPv4,因此如果你的网络环境支持IPv6,那么在你访问本站点的时候就会走内地网络直达我的树莓派;否则会走反向代理的方式多绕一次,访问速度大概率也会下降很多。
有些人可能对域名如何解析到IPv6不太了解,在域名解析那里有几种常用的方式,通常解析IPv4的时候用的是A记录,而解析IPv6可以用AAAA记录。你可能还需要担心IPv6地址变化的问题,事实上社区里也有方案可以完成国内常见云服务的DDNS自动上报解析,具体可以查询ddns-go
项目。
结语
细数下来,感觉对于计算机的学习和理解都是循序渐进且有迹可循的,学习路径大致是:JAVA -> C++ -> OI算法 -> 运维 -> JS,毕业前能选择的路好像也挺宽的,不知道为什么稀里糊涂的就做了前端,现在每天在微信做点前端倒也还算凑合,只是毕业以后对很多技术上的学习热情都被磨灭了,编程在我这成为了一项实现自己想法的工具,而我现在对编程的探索更像是在摸索它能应用在什么产生价值的领域。