博客及相关服务部署更新

部署流程更新 众所周知,之前我的博客以及图片托管的服务是通过硬核的DNS分区域解析来实现流量的就近调度,而多个服务器之间的资源文件我一般使用syncthing来进行同步,这个方法显得比较粗糙,但是还挺有效的。最近折腾了下 cloudflare worker 感觉还不错,于是就把博客以及图片托管迁移到了 cloudflare worker 上来,这样一来可以白嫖到不错的全球加速(除中国大陆),而且使用 workers 进行部署可以省下不少的服务器资源。 这个就是我之前的发布工作流程 在这次部署流程更新后他变成了这样,博客由于是 public 代码仓库,所以我的自动构建直接使用了 github action,只要基于之前的配置改改加上 publish 到 cloudflare workers 的 step 就可以直接用了。 而静态文件托管的我一直是存在自建的 gitea 上面,所以配了个 drone 来执行自动 publish 到 cloudflare workers 的工作,总而言之也是挺香的。 5月1日更新 又更改了下,用上了 vercel 的服务,实测这个服务提供的 cdn 要比 cloudflare 在中国大陆访问的快些。 博客主题更新 博客主题也好久没有更新了,这次更新主要是加上了几个能够改进访问体验的 feature。 添加了首页巨幕以及文章头图图片下面的背景颜色,能够自定义在图片还没有加载出来之前显示的颜色 将博客底部版权信息部分的版本号放进了一个js里面,这样就减少了版本号修改时候需要修改的位置 将原来的文章无头图从几张图片中随机选择一张作为头图改成了随机选择一个颜色作为头图 颜色随机取值这里,是取值RGB都在 110-87之间的值,这里的颜色饱和度比较低,看起来比较舒服

2022-04-17 00:40:00 · 1 min · 49 words · johnpoint

博客迁移到cloudflare踩坑

好久不见,新年开始一直忙着毕业设计和实习找新的工作,一直没有空去将一些折腾过的东西记录成为博客,最近在写毕业设计的间隙终于对博客进行了一波优化,顺便写篇博客记录一下。 在过去的部署中,博客一直是采用多节点部署并且通过dnspod的分地区解析做流量调度,将流量解析到尽量近的节点来尽量保证博客访问的速度。而多个节点之间的博客文件同步一开始用的是定时任务从github上面更新,后来改成了使用syncthing进行同步,这种方法看起来比较蠢,但是也持续的保证了我的博客在这两年期间的顺畅访问。 最近在翻sukka大佬的博客过程中,看到了 cloudflare worker 可以联合 kv 存储用来部署静态网站,于是乎我就先将自托管的图片提供服务(就是一个存了图片的http服务),部署到了 cloudflare 上面,测试速度以及延迟也相当不错,所以就想彻底的把博客这一套东西完全迁移到 cloudflare 上面去。 这样就能保证我博客在我不主动折腾的情况下保证极高的可靠性以及相对不错的响应速度。 404页面异常 在 worker-site/index.js 文件中,有一段逻辑是控制在url无法获取到文件的时候返回 /404.html。但是一部署上去我就发现了不对劲,这个404页面直接源代码显示,并没有被浏览器渲染出来。 经过F12大法查看network的response知道返回的数据中缺少了个指定响应数据格式的header。 修复这个情况只需要在返回响应的时候加上相应的header即可,代码修改可以参考我提的PR 参考链接 将 Hexo 部署到 Cloudflare Workers Site 上的趟坑记录

2022-03-25 13:11:29 · 1 min · 28 words · johnpoint

2021 年度简报

...

2021-12-26 15:11:29 · 1 min · 69 words · johnpoint

使用 Zerotier 异地组内网

众所周知,世界上的 ipv4 地址已经快要枯竭 (错了就当我在瞎掰),所以在国内不是所有的运营商都拥有公网 IP 地址,同时还有许多奇奇怪怪的需求 (比如说想异地联机打红警之类的),想要实现异地组建内网的效果不得不要采取一些特别手段进行组网。其实异地组网的文章有不少,比如柠檬雨大佬的这篇文章 《异地也要玩局域网——使用N2N,实现异地服务器快速组建内网》,中间就用到了一个叫做 N2N 的软件来进行隧道的建立。但是吧,我在想用 N2N 进行组网的时候,遇到了不少问题,首先就是 windows 客户端 v2 版本的我只找到了一个网络博主自己编译的版本,而且国内服务器在获取客户端的时候非常慢。 其中一度不想折腾想着使用那些现成的局域网对战平台来进行游戏 (对就是浩方) 但是下载注册 (这个平台注册居然还要身份证,就离谱,虽然我是用生成的身份证号码注册的) 之后,登录这边一直卡死在 loading,无奈我只能再看看有没有其他的方案。 在一位 (非常非常非常想玩红警3的) 朋友的建议下,我去研究了下 ZeroTier 这个异地组网的解决方案,发现挺方便的。 但是问题来了,在我用上了 ZeroTier 之后,隧道倒是建立了,但是不知道为何,有两个节点相互 ping 不通

2021-11-24 16:25:00 · 1 min · 32 words · johnpoint

用于 gnet 的 Protocol buffers 编解码器

要写一个 TCP 服务端,实现处理在纯 TCP 流中传输的 Protocol buffers 数据。网络框架很早就选好了,用性能杰出的 gnet,问题是 gnet 的示例库里面没有直接解析纯 Protocol buffers 的编解码器,于是乎只能自己动手了… 协议分析 从 TCP 流里面传过来的是经过简单处理的 Protocol buffers 数据,他在数据的头携带了这个数据包的长度信息,像是这样 [ 头 ][ 数据 ][ 头 ][ 数据 ][ 头 ][ 数据 ][ 头 ][ 数据 ][ 头 ][ 数据 ] 调用 golang 的 proto 官方库中的 func DecodeVarint(b []byte) (uint64, int) 方法可以从数据中拿到两个值,分别是 数据的完整长度、标明数据长度的头信息的长度。 由于没有特定的协议在包与包之间进行明显的划分,所以得用他的头数据来进行分包。 解码器 // 储存连接内的相关信息 type DataStruct struct { fullLength int lenNumLength int fullData []byte } func (d *Codec) Decode(c gnet....

2021-09-17 18:30:00 · 4 min · 692 words · johnpoint

解决全屏背景图卡顿

早就在替换了新的主题后(也就是现在用的主题),发现主页滚动的时候特别的卡,但是在滚动部分没有背景图片的时候就不会掉帧,所以判断是背景图片的问题。 而在我替换掉了 fixed 属性之后就又不卡了,从而断定就是这个属性导致博客滚动的时候出现性能问题。 搜索资料发现了这篇文章 Fixed background image performance issue,遂按照其中的方式将背景设置为虚元素,那么在滚动的时候背景就不会频繁的进行重绘,从而解决了滚动到时候出现掉帧的问题,终于在鸽了半年之后让我的博客首页重回丝滑…

2021-07-28 11:44:00 · 1 min · 10 words · johnpoint

proto 通过字段名获取值

很久没有更新博客了,一方面是出去实习比在学校的时候忙,真的很多东西等着我去学,太可怕了,另一方面就是懒 protobuf 真是个好东西,就是在你不知道具体结构的时候想要拿到特定字段的值有点小麻烦,好不容易折腾出来了,写篇博客记录一下 func FindByName(name string, msg protoreflect.Message) (has bool, value protoreflect.Value, isList bool) { if name == "" { return false, *new(protoreflect.Value), false } msgDesc := msg.Descriptor() for i := 0; i < msgDesc.Fields().Len(); i++ { if msgDesc.Fields().Get(i).Kind() == protoreflect.MessageKind { sonMsg := msgDesc.Fields().Get(i) has, value, isList = FindByName(name, msg.Get(sonMsg).Message()) // type mismatch: cannot convert list to message if has { return has, value, isList } } if msgDesc.Fields().Get(i).Name() == protoreflect....

2021-06-11 15:48:00 · 1 min · 173 words · johnpoint

Linux 进程信息格式化

2021 年了,转头看了下自己的服务器面板,发现还是那个半成品的样子…于是在这三天改了下代码,加入了 v2 api 接口,这个接口主要使用 Websocket 进行通信,虽然说服务端的压力其实不是很大,但是使用轮询进行数据的更新不仅会看到一坨一坨的请求,对我的渣渣电脑来说也有些吃力了,不过这篇文章的内容不是这个,改天再开一篇文章记录一下。 进程查看其实是很早之前就想做进面板的功能之一,但是受限于并没有找到现成的 go 第三方或者官方库,所以就放了一放 (结果放了差不多一年),刚好这几天在改面板的代码,索性就顺手把它做了。 进程查看没有库可以调用,就只能通过调用系统命令来进行查看,一般来说我看进程会使用 ps -aux,但是对于面板来说,这里输出的数据有点太多以及有点太乱(太乱指的是输出的数据不是计算机友好型结构),然后看了下网上网友们五花八门的命令,左拼右凑之后,最后成品是用的 ps axc -o pid,user,stat,pcpu,pmem,command --sort -pcpu --no-header | sed 's/\ \+/\ /g' 最终得到的数据是没有表头、连续空格被替换成一个空格的数据,我感觉这就够了,其余的交给前端处理。 前端代码截取如下 let ps = server.Ps.split('\n'); ps.forEach(item = >{ if (item.split(" ").length > 3) { item = item.split(" ") if (item[0] === "") { item = item.slice(1, item.length) } let i = { PID: item[0], User: item[1], State: item[2], Pcpu: item[3], Pmem: item[4], Command: item....

2021-02-02 21:20:00 · 1 min · 79 words · johnpoint