经过很多曲折之后终于再度稳定下来,于是想起再把这个荒废了的博客做起来,也算是作为这段时间工作和开发的备忘吧。

当然首先记录一下的就是这次重启博客遇到的各种坑,这篇只能说是流水账吧,毕竟遇到的各种各样的问题里,技术问题反而师最少的。


自从我19年搭建了这个网站之后,其实它一直都在正常运行(只不过一直没有更新),但是某天突然网站挂了,到后台查才发现是因为之前某个未知的号码是备案复审的电话,我把他当作是骚扰电话拒绝了…所以导致我这年的备案复审没通过…

于是再启动网站的第一步就是重新备案,但是当我再次申请备案的时候,却被告知空壳主体无法备案。似乎是因为备案号分为两部分,一部分是注册人主体,另一部分是与之关联的网站,即使网站备案被注销,主体也不会注销,但是出于某些未知的原因,重新备案的网站无法关联到旧的主体,于是想要用这个主体再次备案只能先申请注销主体。但是…注销主体的申请又并不能在网上完成而是必须要线下申请…具体的流程各大云平台都有详细的指导文档

于是很无奈,只好按照流程,打印、填表、签字、画押,然后寄件到当地通信管理局,而且由于是线下申请所以并没有明确的完成日期…只能等待,我从寄件到再次申请备案差不多隔了一个月左右,以公共机构的办事效率来说这个时间应该是最保险的(

虽然麻烦但是好歹终于注销成功了,于是再次申请备案也就是熟悉的流程了。


备案成功之后终于可以开始着手网站的改造了。

这次我希望能尽可能的把所有服务迁移到Docker中运行,由Docker Compose统一管理和配置。这几年Docker用下来越用越喜欢,真正实现了我很多年以前想要的开发环境和生产环境完全一致的梦想。而有了Docker Compose之后,只要保存一份yml文件,无论换到哪个平台或机器都能一键完成开发配置,简直爽死了。

以前的网站本体虽然是搭建在Docker上的,但是RSShub和ttrss是直接构建的,于是正好借着升级这两个服务的机会顺便把它们一起搬进Docker里。

首先是RSShub,我之前依靠最原始yarn的启动方式,然后由screen命令另建窗口来管理的。好在官方一直都有提供Docker Compose的搭建配置,于是到官方的yml页去抄一份Docker Compose的配置表就好了。

然后是ttrss,由于这个服务本质上只是一个网站,所以其实一直以来我都是直接把它放到通用的http服务里。但是似乎官方也与时俱进的增加了Docker部署的版本,甚至Docker的版本就是官方推荐的方式,不得不说时代真是一直在变啊。不过就我个人而言我更加推荐这份Docker Compose配置

这份配置需要注意的地方是用如果用Nginx反向代理的话,其中代理的配置proxy_pass http://ttrssdev;,这里的的端口是容器内的端口,ttrss运行起来默认是在容器里的80端口,所以无论容器对外暴露出的端口是什么,在这里连接的时候只需要连接默认的80端口就可以了。另一点就是如果你像我一样是用RSShub自建的rss订阅服务,那么就需要单独在docker-compose.yml中配置ALLOW_PORTS为你RSShub的开放端口。


在一切搞定之后,我突发奇想的想要搞一个比较有趣的404页面,于是随手写了一个获取https://http.cat网站报错猫猫图的错误页面。

就在我洋洋自得的时候,Chrome突然给我跳了一个大大的红色。

不知出于什么原因Chrome把我的网站认定为了诈骗网站,望着满屏的红色,我陷入了沉思…究竟是哪里出了问题呢?虽然我猜测是由于这个错误页面导致的,但是直到现在我都没懂究竟是什么原因。这个可能被Google判定为诈骗网站的页面如下:

<div style="text-align: center;display: flex;justify-content: center;height: 800px;align-items: center;flex-direction: column;">
<h1>出错啦!</h1>
<img id="httpcodeimg" src="" />
</div>

<script>
function getUrlParam (name){
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r!=null) return unescape(r[2]); return null;
}

document.getElementById('httpcodeimg').src = "https://http.cat/" + getUrlParam('code');
</script>

或许能为后来人避坑……

不过好在的是Google提供了开发者管理的服务,登录这个网站,跟着它的步骤认证为网站的开发者然后就能到后台页进行申诉,审核速度非常快,一般只要网站真的没什么问题应该能在半小时以内解决。


刚巧就在这时我的网站突然整个的不能访问了,一开始我以为是因为Chrome封锁了我的网站,但是之后用Edge还有Firefox都是无法访问,无论访问哪个域名都是返回ERR_CONNECTION_RESET,即使是在服务器内用curl直接请求IP地址都无法访问返回Connect reset by peer

我尝试在服务器上运行tcpdump tcp port 443命令获取连接的详细信息,发现当浏览器发起请求的时候服务器其实已经接收到连接的请求了,但是出于某些原因没有应答。

这就让我有点犯难了。

我试着在本地用ipconfig /flushdns刷新dns,或者直接把dns服务器设置为腾讯云的dns服务器,也没有效果。

是否有可能是防火墙的问题呢?为了方便调试,我先把云服务后台的出入口安全组都设为全部开启,然后回到服务器中,执行iptables -L,其中的INPUT项就是服务器配置的允许访问端口,我的这INPUT项是空的,于是执行下面的命令添加配置:

# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

开启443、80、22端口就可以了,其他的都可以直接drop。

配置完之后再次尝试访问,失败!

接着继续在服务器上运行netstat -ntulp | grep 443查看端口是不是有正常启动,此时我发现了一点异常。正常的服务显示应该是像这样:

img

但是我看到第一项却是tcp6,一开始我还没怎么在意,但是仔细一细想,tcp6是否意味着这个端口实际上是走了ipv6协议呢?

于是我查了一下关闭服务器ipv6的方法,其实只需要再/etc/sysctl.conf文件中加入如下行:

# 禁用整个系统所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
# 禁用某一个指定接口的IPv6(例如:eth0, lo)
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1

然后reboot就可以了…但是这方法似乎没用(

于是只好用另外一种方法:编辑/etc/default/grub文件,添加配置项GRUB_CMDLINE_LINUX="ipv6.disable=1",然后执行命令sudo update-grub再重启系统就可以了。

虽然此时服务终于运行在ipv4上了,但是…emmm…还是无法访问…说实话,我有点崩溃了…

于是我祭出了遇事不决最强大法——重装!

这是之前把服务搬迁到docker的优势就显示出来了,我直接另开一个目录,然后clone这份我常用的配置,稍加修改yml文件,执行docker-compose up -d,接下来等待镜像构建完成就好了。

然而这也还是失败了,但是好消息是,经过我这一番折腾网站可以用IP地址直接访问了,这也算是成功的一大步吧(

这时有另一个小插曲,似乎由上面那份配置启动的PHP没有安装插件,奇怪的是我在别的机器上构建同样版本的镜像却没有这样的问题,在苦苦寻找之后我找到了这份Issue中的讨论,看其中的描述似乎是alpine的问题,默认php:7.4.27-fpm-alpine使用的是3.14版本的alpine,这个版本用docker-php-ext-install安装插件会返回Operation not permitted的错误而安装失败。于是我用php:7.4.26-fpm-alpine3.13构建镜像之后成功了,可是当我尝试用最新的php:7.4.30-fpm-alpine3.16失败了。

其实我猜测也许最有可能的原因是docker版本,我服务器中使用的是18.09.6版本的Docker,而其他机器上测试用的是20以上版本的Docker。不过在服务器上升级Docker引擎的版本会产生什么后果我也不是很清楚…此时已经是多事之秋了,为了防止事态进一步恶化现在还是先用最小的变动方式吧。

在用尽我所有手段之后,我最后还是决定放弃了…或许从一开始我就应该放弃的,像这样通过域名访问而失败的情况在排除了自身机器的所有错误之后,有很大概率是由于服务提供商法发生错误了。

于是我在腾讯云后台提交了工单,不得不说腾讯云的服务还是值得夸奖的,那天正是周五下午下班之前,但这份工单居然能在半个小时之内看到并解决,不得不说大大改善了心目中这些云服务提供商的形象。

虽然直到最后我也还是没能清楚的知道是什么原因导致这一次事故,但是不得不说还是在这次问题的排查中学到了很多东西。


于是终于一切完成,我也如愿以偿的重新开启了这个博客。

或许之后会慢慢的更新吧。

目前暂时的计划是先把最近在工作中设计的一些小玩具整理一下写出来,或许再之后这个博客除了技术相关的文章也会记录一些日常琐碎的东西。

生活中麻烦的事情不少,但是做自己喜欢的事情真的可以很好的放松心情,即使这些事情是像上面那样子琐碎的繁杂的甚至摸不着头脑的事情,但只要在做,还在前进,就会让自己感到快乐,至少可以大大的消磨在搬砖中产生的虚无心情吧。

分享一首最近很喜欢的词,共勉。

望江南·超然台作
苏轼 〔宋代〕

春未老,风细柳斜斜。试上超然台上看,半壕春水一城花。烟雨暗千家。
寒食后,酒醒却咨嗟。休对故人思故国,且将新火试新茶。诗酒趁年华。




Reference: