普通视图
-
Alliot's blog
- Docker 代理配置机制与作用域<p> Docker 中的代理配置存在多个作用层级, 不同配置方式影响的范围完全不同。本文基于官方文档,对各层代理机制梳理说明, 以便区分。
-
Alliot's blog
- 2025年底的安卓搞机备忘录<p> 在云服务高度绑定、系统权限不断收紧、厂商深度定制愈发封闭的今天,解锁 Bootloader、Root、刷 Rom 这些曾经被视为 Android 精神内核的操作,正在逐渐从“折腾的乐趣”变成“高风险行为”。马上 2026 年了,你还在玩 Android 机吗?
2025年底的安卓搞机备忘录
-
Alliot's blog
- ArgoCD部署应用出现metadata.annotations过大问题<p> 使用 Argo CD 部署 kube-prometheus-stack 的时候,出现 <code>the metadata.annotations is invalid: Too long: must have at most 262144 bytes</code> 的问题,导致整个 Application 出现 Sync Error。 这是由于Kubernetes 对于 metadata.annotations 字段总长度有限制,通常不能超过262144字节(256KB),而执行 <code>kubectl apply</code> 时会在 annotation 中加入 <code>last-applied-configuration</code>, 从而导致 annotation 过大无法 apply。
ArgoCD部署应用出现metadata.annotations过大问题
-
Alliot's blog
- M1 Mac安装低版本Node.js<p> 支持在 M1(Apple Sillicon) 平台上原生运行的 Node.js 最低版本为 16, 在这之前的版本要想在 M1 的 Mac 上运行,需要使用 Rosetta 2 转译运行。
M1 Mac安装低版本Node.js
-
Alliot's blog
- APC UPS更换电池校准容量<p> 前面<a href="/categories/%E7%BE%A4%E6%99%96%E5%85%A5%E9%97%A8%E5%88%B0%E8%BF%9B%E9%98%B6%E7%B3%BB%E5%88%97/">群晖系列</a>提到过,为了防止市电非预期断电导致数据丢失,我<a href="/post/synology-series-10#%E7%BB%93%E8%AF%AD">入了一台 UPS —— APC BR550g CN</a>, 一晃眼,已经服役近好几年了,续航时间也已经缩短到了5分钟以内, 很明显它的蓄电池已经到达了使用寿命, 趁清灰时机, 更换一下电池, 顺便校准一下容量。
APC UPS更换电池校准容量
-
Alliot's blog
- Cloudflare Tunnel前置代理支持<p> 赛博大善人的 Cloudflare Tunnel(前 Argo Tunnel) 只需要一个域名、一个 Cloudflare 帐号便可以将服务接入到 Cloudflare 的网络,提供了非常方便的内网穿透方式, 同时还提供了 ZeroTrust、防护等功能, 而这一切基本几乎都是免费的,相信看到此文的小伙伴已经薅上一段时间了,不过由于 Cloudflare Tunnel 官方的服务节点分布有限,在部分时空/场景下,Tunnel 连通性会面临一些挑战, 这时候要是能够通过前置代理去连接到 Tunnel 服务,问题便能得到解决,可惜<a href="https://github.com/cloudflare/cloudflared/issues/350#issuecomment-1706842883">官方目前并没打算支持这个特性</a>。
Cloudflare Tunnel前置代理支持
-
Alliot's blog
- CDN场景下配置Vaultwarden启用fail2ban<p> <a href="https://github.com/dani-garcia/vaultwarden">Vaulwarden</a> 是一个开源自托管的密码管理工具,这个项目使用 Rust 实现了一套 Bitwarden Server API, 很多小伙伴都用它来管理密钥与凭证。 本文将利用 <a href="https://github.com/fail2ban/fail2ban">fail2ban</a> 来实现在 CDN 场景下的防暴力破解。
CDN场景下配置Vaultwarden启用fail2ban
-
Alliot's blog
- 从指定路径更新雷池WAF证书<p> 雷池(SafeLine) 是长亭科技部分<del>开源</del>的一款 Web 防火墙,社区版本已经有较为完善的 WAF 功能,可以满足个人项目的基本 Web 防护需求。 不过目前(v5.2.0)雷池对于证书的操作,仅支持从 UI 导入或使用 <a href="https://letsencrypt.org/docs/challenge-types/#http-01-challenge">Let’s Encrypt 的 HTTP-01 验证方法</a> 来配置证书, 这对于使用 DNS 验证的短期证书用户来说非常不方便,可以看到社区有这样的需求的小伙伴还是挺多的: <a href="https://github.com/chaitin/SafeLine/issues/782">[建议] 证书增加使用路径导入方式 | Github issue</a>, 因此便写了个小脚本来实现这个需求。
从指定路径更新雷池WAF证书
-
Alliot's blog
- OpenV**手动指定路由规则<p> 我们在远程办公时通常需要通过内部 OpenV** 来访问公司内部的敏感系统, 默认情况下, OpenV** 会临时修改本地路由表,将所有流量都指向了 v**_gateway,导致一些本地规则被覆盖,甚至无法打开部分国内的网站,带来了很多不便。这里记录一下手动指定路由规则的配置,仅让指定的网段或域名走 gateway。
OpenV**手动指定路由规则
-
Alliot's blog
- 本地模拟CNAME解析<p> 众所周知,我们可以通过修改本地 hosts 文件来定义一个域名的指向,这个过程我们可以简单的理解为在本机创建了一个优先级很高的 DNS A 记录,实现了某种程度上的域名劫持, 利用这种特性我们可以实现诸如广告屏蔽、本地测试、别名等需求,但 hosts 机制仅仅能定义域名与 IP 对应关系, 并不能模拟其他的 Record 类型, 比如 CNAME 记录。
本地模拟CNAME解析
-
Alliot's blog
- 迎来船新版本的Hexo+NexT<p> 自从 2017 年使用 Hexo+NexT 作为博客框架以来,已经过去好几个年头。就如前面那篇<a href="/post/hexo-artalk-comment.html">hexo使用Artalk评论系统</a> 博客所言,由于 Alliot 之前对 NexT 主题与部分插件做了许多侵入式的魔改,基本没有对其做过日常的版本升级维护,因此,已经没有平滑升级的可能性。在一次插件失效的契机下,终于下定决心推倒重建。 本文记录了这一次重建的过程以及在维护模式上相比旧版本的改进。
迎来船新版本的Hexo+NexT
-
Alliot's blog
- 优雅的处理Git多帐号与代理问题<p> 在工作中,常常会容易遇到一台电脑用多个 Git 账号的场景,比如账号 company 账号是工作用的,而账号 personal 是自己个人用的。 由于 Git 本身并没有多账号的机制,导致我们在默认设置下无法很好的区分哪个仓库使用哪个账号。 同时,在某些众所周知的场景下,我们无法直接访问到 Github 仓库,需要走一层 proxy 来加速我们的代码拉取与推送速度, 本文将使用 SSH config 相对优雅的解决这些问题。
优雅的处理Git多帐号与代理问题
-
Alliot's blog
- 基于Terraform在AWS ECS中构建Jenkins持续集成体系之前我们旧的 Jenkins 集群跑在 AWS EC2 上,近期由于大量新增 Job 以及大量构建任务的并行,导致集群资源吃紧,不得不新增更多的 Slave 来应对。为了降低成本,同时获得更好的资源弹性,Alliot 打算基于 Terraform 在 AWS ECS 中构建新的 Jenkins 持续集成体系。容器提供了更细的资源粒度,拥有更好的资源弹性和资源利用率。
基于Terraform在AWS ECS中构建Jenkins持续集成体系
之前我们旧的 Jenkins 集群跑在 AWS EC2 上,近期由于大量新增 Job 以及大量构建任务的并行,导致集群资源吃紧,不得不新增更多的 Slave 来应对。为了降低成本,同时获得更好的资源弹性,Alliot 打算基于 Terraform 在 AWS ECS 中构建新的 Jenkins 持续集成体系。容器提供了更细的资源粒度,拥有更好的资源弹性和资源利用率。
-
Alliot's blog
- Terraform启用provider缓存我们在开始一个 Terraform 工程项目的时候,首先要做的就是 terraform init, 这个动作会在当前工作目录下创建 .terraform 目录,并联网下载项目所需要的 provider 到该目录下。 即便是多个项目使用的是同样的 provider,但每个工程项目仍然都有自己单独的 .terraform, 这不仅仅会浪费磁盘空间,还会花费很多不必要的时间去等待联网下载 provider,好在 Terraform 官方为我们提供了缓存目录。
Terraform启用provider缓存
我们在开始一个 Terraform 工程项目的时候,首先要做的就是 terraform init, 这个动作会在当前工作目录下创建 .terraform 目录,并联网下载项目所需要的 provider 到该目录下。 即便是多个项目使用的是同样的 provider,但每个工程项目仍然都有自己单独的 .terraform, 这不仅仅会浪费磁盘空间,还会花费很多不必要的时间去等待联网下载 provider,好在 Terraform 官方为我们提供了缓存目录。
-
Alliot's blog
- AWS ECS使用EBS作为Volume在 基于Terraform在AWS ECS中构建Jenkins持续集成体系 一文中, Alliot 采用了 EFS 作为 Jenkins 容器的数据卷,直接挂载了 /var/jenkins_home 目录。正如评论区提到的, 我们在使用 bursting 模式的 EFS 时,遇到了 IO 性能的问题, 虽然 master + slave 架构的 Jenkins 将构建任务分发到了 slave 节点,减少了 master 节点的压力,但是在启动构建任务时, master 节点依然会有大量的 IO 操作, 这个时候会导致 bursting 模式下的 EFS 瞬间打光 Credit 从而导致整个 master 挂掉。当然,我们可以使用 Provisoning 模式缓解性能问题,但其价格又非常贵,性价比不高。 好在从今年(2024)的一月开始, AWS ECS 的 Fargate 支持使用 EBS 卷作为 Volume 了。 目前官网的文档还比较分散,这里小记一些需要注意的点。
AWS ECS使用EBS作为Volume
在 基于Terraform在AWS ECS中构建Jenkins持续集成体系 一文中, Alliot 采用了 EFS 作为 Jenkins 容器的数据卷,直接挂载了 /var/jenkins_home 目录。
正如评论区提到的, 我们在使用 bursting 模式的 EFS 时,遇到了 IO 性能的问题, 虽然 master + slave 架构的 Jenkins 将构建任务分发到了 slave 节点,减少了 master 节点的压力,但是在启动构建任务时, master 节点依然会有大量的 IO 操作, 这个时候会导致 bursting 模式下的 EFS 瞬间打光 Credit 从而导致整个 master 挂掉。当然,我们可以使用 Provisoning 模式缓解性能问题,但其价格又非常贵,性价比不高。
好在从今年(2024)的一月开始, AWS ECS 的 Fargate 支持使用 EBS 卷作为 Volume 了。 目前官网的文档还比较分散,这里小记一些需要注意的点。
-
Alliot's blog
- Nginx搭建WebDAV服务迫于无法忍受现成的 NAS 系统的限制,Alliot 正在着手将最常用的一些服务剥离出来,方便迁移与定制, WebDAV 首当其冲, Alliot 在许多场景下的同步与备份都依赖它。 WebDAV 作为一种基于HTTP/HTTPS协议的网络通信协议,预想是非常简单的,然而在具体动手的过程中还是遇到了挺多坑,Obsidian 的 Remotely-save 便是其中一个。 本文将基于 Nginx/Tengine 手把手构建一个 WebDAV 服务。
Nginx搭建WebDAV服务
迫于无法忍受现成的 NAS 系统的限制,Alliot 正在着手将最常用的一些服务剥离出来,方便迁移与定制, WebDAV 首当其冲, Alliot 在许多场景下的同步与备份都依赖它。
WebDAV 作为一种基于HTTP/HTTPS协议的网络通信协议,预想是非常简单的,然而在具体动手的过程中还是遇到了挺多坑,Obsidian 的 Remotely-save 便是其中一个。
本文将基于 Nginx/Tengine 手把手构建一个 WebDAV 服务。
-
Alliot's blog
- 迎来船新版本的Hexo+NexT自从 2017 年使用 Hexo+NexT 作为博客框架以来,已经过去好几个年头。就如前面那篇hexo使用Artalk评论系统 博客所言,由于 Alliot 之前对 NexT 主题与部分插件做了许多侵入式的魔改,基本没有对其做过日常的版本升级维护,因此,已经没有平滑升级的可能性。在一次插件失效的契机下,终于下定决心推倒重建。 本文记录了这一次重建的过程以及在维护模式上相比旧版本的改进。
迎来船新版本的Hexo+NexT
自从 2017 年使用 Hexo+NexT 作为博客框架以来,已经过去好几个年头。就如前面那篇hexo使用Artalk评论系统 博客所言,由于 Alliot 之前对 NexT 主题与部分插件做了许多侵入式的魔改,基本没有对其做过日常的版本升级维护,因此,已经没有平滑升级的可能性。在一次插件失效的契机下,终于下定决心推倒重建。 本文记录了这一次重建的过程以及在维护模式上相比旧版本的改进。
-
Alliot's blog
- 优雅的处理Git多帐号与代理问题在工作中,常常会容易遇到一台电脑用多个 Git 账号的场景,比如账号 company 账号是工作用的,而账号 personal 是自己个人用的。 由于 Git 本身并没有多账号的机制,导致我们在默认设置下无法很好的区分哪个仓库使用哪个账号。 同时,在某些众所周知的场景下,我们无法直接访问到 Github 仓库,需要走一层 proxy 来加速我们的代码拉取与推送速度, 本文将使用 SSH config 相对优雅的解决这些问题。
优雅的处理Git多帐号与代理问题
在工作中,常常会容易遇到一台电脑用多个 Git 账号的场景,比如账号 company 账号是工作用的,而账号 personal 是自己个人用的。 由于 Git 本身并没有多账号的机制,导致我们在默认设置下无法很好的区分哪个仓库使用哪个账号。 同时,在某些众所周知的场景下,我们无法直接访问到 Github 仓库,需要走一层 proxy 来加速我们的代码拉取与推送速度, 本文将使用 SSH config 相对优雅的解决这些问题。