本人比较爱看“免费的”网文小说,但是这类小说的网页往往挂着很多外链广告,这些广告会遮挡文字 或是 让人不小心点击 或者 必须 点击后才能继续看。尤其是不适合出现在公共场合的广告。上下班路上通勤时长较长的情况下,那么多人挤在地铁上,没准别人无意扫了一眼你的手机屏幕,就看到了页面上不小心弹出的私密广告。即使你不在乎,但是想看个小说,每次点下一页的时候必须先点一下广告,也很烦人的。
为了解决这个烦人的问题,本人自己写了个爬虫,代码放到了自己的阿里云服务器上。由于小说还在连载中,需要每天都爬一遍,为了省事儿,就写了个 crontab 每天一爬。
之前爬取程序出了问题,为了调试,在本地环境中进行了代码调整。调完后,发布到线上发现程序执行失败了。经过一番检查发现是mysql链接问题。因为本地开发环境用的是php7.x 版本,而阿里云上用的还是php5.x。本地调试造成了版本php代码的版本兼容问题。
于是就想着升级下阿里云上的php版本。官网下载php8的源码,编译安装。make过程中有报错,按照提示更新了各种依赖后,出现了一个内存不足的bug。内存不足怎么解决?为了升级php,扩容阿里云配置?那不得多花钱吗。。。本身买阿里云只是为了学习以及测试用,买的是最低配最便宜的 ——大家都不富裕,生活都很简洁这点应该都能理解!
网上搜索有没有解决办法,还真有!说是使用虚拟内存能够解决,按照网上的教程创建了swap,结果make 一条以后直接停住不动了。 试了很多次还是不行!
扩展虚拟内存行不通,能不能用其他方式?
想到本地环境是用的docker-desktop,当年自学 docker 的时候也在阿里云上搭建过。就想能不能把本地的镜像直接方阿里云的docker里,然后阿里云上改用docker容器跑php7。
想到就干,将本地运行中的docker容器进行进行备份、归档,然后拉到云服务器上load。nginx配置中修改php的端口,将php项目文档的路径与容器路径进行对应挂载(第一次忘了挂载路径,造成php报找不到文件的错误:filed not found)。重启nginx后,打开 https://www.2pea.com/ 发现页面空白。
查找原因是因为 geoip 扩展没有安装。之前由于总是有国外ip请求服务器,为了屏蔽他们,专门安装了geoip进行ip过滤,如果是国外ip请求,直接返回“中国邢台欢迎您!”(这里吐槽下geoip库免费版的已经停止维护了,所以geoip屏蔽的可能并不准确)。这次从本地拿的php7镜像里面没有geoip扩展,造成相应函数不可用的错误。
安装了geoip扩展后,再打开 https://www.2pea.com/ ,发现还是不行!继续查,发现还有redis链接问题。为了安全,redis没有开通远程链接功能,从容器里访问云服务器上的redis服务访问不到。于是将redis加了密码,设置成可远程访问。 再打开 https://www.2pea.com/ ,啧,nice!