2026-01-02 13:11:19
抽着空肝一下年终总结,不知道写些什么,跟前几年没有特别大变化的就不写了,主要写写变化
2025 年,我把大量精力投入在可长期运行的个人与小团队技术基础设施上, 围绕私有化部署,我持续实践并输出,然而只坚持了 2 个月左右。年中开始,AI 成为新的重点方向,也是从 Cursor 换成到 Claude Code 的开始,期间将博客系统升级了一波,2025 年初说的给奶爸提 PR 一直鸽着 😂。
由于 umami 受框架漏洞影响,不得不升级,数据兼容性问题,12 月之前的数据基本都没了。


从谷歌广告分析了一下,还是主站真人多些,人人都是广告屏蔽大师哈哈哈。
公众号 缘生小助手 也成功突破 1000 人关注,希望今年来带来更大的突破。
在 NotebookLM 支持中文播客之前,我一直都在使用微信读书。今年满打满算只读完了 4 本书,还有 20 多本只是读过部分,这里介绍两本我觉得还很 OK 的书:
26 年还是打算继续看一些经济学和工程类的书籍,大环境目前还是你懂的,多了解些还是很有必要的。
今年主要玩了缺氧,玩了 385 局

今年主要以 youtube 为主,大会员到期了,不想给叔叔送钱了
基本都是下饭剧为主,重温了大明王朝 1566
23 年度不总结,曾说过 过去一年是比较煎熬的一年,也是 AI 智能觉醒元年,可能也是这未来几年中最好的一年。
经过 10 月份短暂的休息后,11 月开启了新的征程,全力拥抱 AI,截止 1 月 1 日,Token 消耗费用已经超 4000$ 了,大家都比较清楚哈,跨领域的挑战,真实和虚构,刨根问底时,一句您说的对,我确实没阅读您提供的资料。
说个不简单的: 用时差不多两个月的时间,重构了几年前的项目,之前是 3 个人的活,现在是 1 个人和 3 个 AI 黑奴的活(Claude、Gemini、Codex), 整整 800 次提交,也算是一场比较完美的答卷了。
在漫长而又短暂的一年中,生活不过多了一些艰难度过的坎坷与波折。
求满几时满,知止方为止
2025-12-17 22:40:12

由 copilot.microsoft.com 生成
本文将介绍使用 Caddy 和 acme.sh 配置 Let's Encrypt 为 IP 地址签发 SSL 证书
国内大概率个人是用不了的,即使现在没限制。如果你的 IP 已经备案了,那另说。
正常没啥需要,如果 1.2.4.8 在我手上那就好了。
最新版本 2.10 版本是支持的,貌似只支持 ipv4, ipv6 没签发成功
1.2.4.8 {
tls {
issuer acme {
profile shortlived
}
}
respond {remote_host}
}
可以使用我提供的镜像
ghcr.io/ysicing/caddy2:latest
ysicing/caddy2
# 国内
ccr.ccs.tencentyun.com/k7scn/caddy2
如果遇到证书已经生成,但是访问还有有问题,需要在全局配置里添加一下
{
debug
# admin off
default_sni 1.2.4.8
}
使用 acme.sh 需要满足几个条件, 因为 IP 证书目前只支持通过 http-01 和 tls-alpn-01 方式进行验证
acme.sh --issue -d <ip地址1> -d <ip地址2> -w <默认网站根目录> --server letsencrypt --certificate-profile shortlived --days 5
Let's Encrypt 的 IP 证书有效期只有 160 小时(差不多 6.5 天),同时 acme.sh 需要更短的时间来进行检查更新证书,所以可以设置 --days 5 参数,让它 5 天检查并更新一次,你也可以设置 3 或 4。

ip 证书
2025-12-14 21:36:18

作为资深 MinIO 用户,经历过 MinIO 一系列操作,从砍掉网关模式,砍掉控制台,到维护模式。老实说,我个人认为这类开源产品很难实现商业化。这种不断收缩能力边界的变化,对使用者来说影响是实实在在的。并不是功能不好,而是你已经把它当作基础设施依赖了,却发现它的产品路线在变, 这也是我开始认真考虑 MinIO 之外的选择的直接原因
为啥选择 RustFS,经过大量讨论与实践,RustFS 逐渐成为那个改动最小、适配最易的首选替代品,深度兼容 MinIO 的 API 与架构。
本次主要迁移了一个大盘鸡备份 MinIO, 方便操作直接使用 compose 部署
services:
minio:
image: ccr.ccs.tencentyun.com/k7scn/minio:2025
container_name: minio
restart: always
environment:
- MINIO_ROOT_USER=Fah0quaixei0
- MINIO_ROOT_PASSWORD=wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
- MINIO_DEFAULT_BUCKETS=backup
ports:
- '100.90.80.15:9000:9000'
- '100.90.80.15:9001:9001'
volumes:
- '/data/minio:/bitnami/minio/data'
rustfs:
image: ccr.ccs.tencentyun.com/k7scn/rustfs:latest
container_name: rustfs
restart: always
environment:
- RUSTFS_ACCESS_KEY=Fah0quaixei0
- RUSTFS_SECRET_KEY=wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
ports:
- '192.168.94.15:9000:9000'
- '192.168.94.15:9001:9001'
volumes:
- '/data/rustfs/data:/data'
- '/data/rustfs/logs:/logs'
注意 RustFS 的日志目录,不确定官方文档和示例有冲突(/logs 或者 /app/logs), 其实影响不大。
docker compose up -d
chown -R 10001:10001 /data/rustfs/data /data/rustfs/logs
docker compose down -v
docker compose up -d
其他的都和 MinIO 没啥区别,登录控制台创建 Bucket
可以直接使用 MC 操作
mc alias set rustfs http://192.168.94.15:9000 Fah0quaixei0 wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
测试直接使用 restic 测试
export RESTIC_REPOSITORY=s3:http://192.168.94.15:9000/backup/test
export AWS_ACCESS_KEY_ID=Fah0quaixei0
export AWS_SECRET_ACCESS_KEY=wi0iez3gaaZoghohCai5zeedeenatooxunoh8AhwangeiPho8Obahja
export RESTIC_PASSWORD=eexeeWie1ri
直接备份测试
restic init
restic backup /data/mariadb --tag mariadb
repository 7d5b008d opened (version 2, compression level auto)
found 2 old cache directories in /root/.cache/restic, run `restic cache --cleanup` to remove them
no parent snapshot found, will read all files
[0:01] 100.00% 1 / 1 index files loaded
Files: 205 new, 0 changed, 0 unmodified
Dirs: 8 new, 0 changed, 0 unmodified
Added to the repository: 10.385 MiB (730.814 KiB stored)
processed 205 files, 124.408 MiB in 0:10
snapshot fed84173 saved
从目前来看没啥问题,可以先跑一段时间再看看。也可以使用 mc mirror 等工具将存量数据从 MinIO 迁移至 RustFS
开源的魅力,就是你永远有选择的余地。
2025-12-11 22:50:34

在我之前的文章 Tailscale Peer Relay 实战指南,让内网穿透更稳更快中,我介绍了如何通过在 Tailnet 内配置一台网络条件良好的设备作为中继,来优化内网穿透体验。最近 Tailscale 官方对 Peer Relay 做出了重要更新,尤其是 新增支持 Static Endpoints,这是一次值得关注的变化。
新增 Static Endpoints
官方定位调整
权限与安全控制
src: *),否则可能导致所有设备都走中继,增加延迟。配置与验证方式
启用命令保持一致:
tailscale set --relay-server-port=40000
ACL 中新增写法:
{
"grants": [
{
"src": ["tag:restricted-devices"],
"dst": ["static:relay.example.com:40000"],
"app": { "tailscale.com/cap/relay": [] }
}
]
}
验证方式:除了 tailscale ping,还可以用
tailscale status | grep peer-relay
来确认连接是否走中继。
典型应用场景
禁用
tailscale set --relay-server-port=""
这次更新的最大亮点就是 Static Endpoints 的支持,让 Peer Relay 从“设备中继”走向“固定中继”,更适合企业和高吞吐场景。同时,官方也明确了 Peer Relay 的定位——它是 DERP 的补充,而不是替代。
如果你之前已经部署过 Peer Relay,现在可以考虑在云端或数据中心配置一个 Static Endpoint,让整个 Tailnet 的中继更加稳定和可控。
2025-12-06 01:17:27

最近 Next.js 官方发布了 CVE-2025-66478 安全公告(详情可见官方链接)。由于 Umami 采用 Next.js 构建,因此同样受到本次漏洞影响
好消息是:Umami 官方已经发布新版本修复漏洞
同时需要注意:Umami 从 v3 起彻底移除 MySQL 支持,统一切换为 PostgreSQL
如果你仍在使用 MySQL 版本,强烈建议你尽快升级并迁移数据,避免暴露在风险中
我已经同步好了官方镜像, 替换直接升级,由于 v2 版本没有打 patch 只能升级到 v3 才能解决
- ghcr.io/umami-software/umami:mysql-latest
- ccr.ccs.tencentyun.com/k7scn/umami:mysql-latest
Umami v3 确保数据的一致性,废弃了对 mysql 的支持,统一采用 PostgreSQL。本步骤参考官方文档 install-umami-with-a-postgresql-database 实践。
升级真是一件糟糕的体验,如果你之前是使用 MySQL,不建议升级,直接重装 v3
官方要求迁移前 MySQL 结构必须达到 v2.19.0,否则执行迁移脚本会失败
你可以通过升级镜像确保数据库 schema 是最新的
MySQL: mysql://user:password@host:port/dbname
PostgreSQL: postgresql://user:password@host:port/dbname
bitnami 操作也很蜜汁。如下示例,对应 ip 密码自行修改
services:
postgresql:
image: h.ysicing.net/bitnami/postgresql
container_name: postgresql
ports:
- '100.90.80.10:5432:5432'
volumes:
- '/data/postgresql:/bitnami/postgresql'
environment:
- POSTGRESQL_DATABASE=umami
- POSTGRESQL_USERNAME=user
- POSTGRESQL_PASSWORD=password
- POSTGRESQL_POSTGRES_PASSWORD=password_root
restart: always
mysqldump --no-create-info --default-character-set=utf8mb4 --quick --skip-add-locks -uroot -h100.90.80.10 -poAkahz4ahvei1oReing6oh5ubaen1veV umami > umami.sql
具体参考流程可以参考 部署轻量数据统计分析 umami
官方镜像 ghcr.io/umami-software/umami:postgresql-v2
国内镜像 ccr.ccs.tencentyun.com/k7scn/umami:postgresql-v2
替换一下镜像地址和环境变量
mysql 环境变量为
- env:
- name: DATABASE_URL
value: mysql://root:[email protected]:3306/umami
- name: HASH_SALT
value: ezee4eGhalaishiphese8yaiphomon
- name: DATABASE_TYPE
value: mysql
image: ccr.ccs.tencentyun.com/k7scn/umami:mysql-latest
pg 环境变量为
- env:
- name: DATABASE_URL
value: postgresql://ysicing:[email protected]:5432/umami
- name: HASH_SALT
value: ezee4eGhalaishiphese8yaiphomon
image: ccr.ccs.tencentyun.com/k7scn/umami:postgresql-v2
等初始化完成,关闭服务,避免重复初始化数据库(避免影响下面流程)
使用 DataGrip 连接 umami 数据库,执行下面的 sql,这两个表数据将从 mysql 的数据中获取
truncate table "_prisma_migrations";
truncate table "user";
效果如下
[2025-12-05 22:24:47] 已连接到 umami
[2025-12-05 22:24:47] umami> truncate table "_prisma_migrations"
[2025-12-05 22:24:47] 在 10 ms 内完成
[2025-12-05 22:24:47] umami> truncate table "user"
[2025-12-05 22:24:47] 在 11 ms 内完成
使用上面的备份数据 umami.sql
22:22 ➜ ~ ls -alh umami.sql
-rw-r--r-- 1 ysicing staff 99M 12 5 22:09 umami.sql
将反引号替换为双引号,使其与 PostgreSQL 兼容, 如果 macOS 执行有问题,在 Linux 搞下。操作前可以备份一下,避免搞坏了
sed -i 's/`/"/g' umami.sql
macOS
sed -i '' 's/`//g' umami.sql
sed -i '' 's/\\"/"/g' umami.sql
sed -i '' "s/\\\\'/'/g" umami.sql
sed -i '' "s/Xi'an/Xi''an/g" umami.sql
sed -i '' "s/Lu'an/Lu''an/g" umami.sql
sed -i '' "s/Ma'anshan/Ma''anshan/g" umami.sql
sed -i '' "s/Rui'an/Rui''an/g" umami.sql
sed -i '' "s/Yu'an/Yu''an/g" umami.sql
sed -i '' "s/Bo'an/Bo''an/g" umami.sql
sed -i '' "s/Tai'an/Tai''an/g" umami.sql
sed -i '' "s/Cao'an/Cao''an/g" umami.sql
sed -i '' "s/Chang'an/Chang''an/g" umami.sql
sed -i '' 's/ENGINE=[^ ]*//g' umami.sql
sed -i '' 's/AUTO_INCREMENT/[generated always as identity]/g' umami.sql
sed -i '' 's/unsigned//g' umami.sql
sed -i '' '/_prisma_migrations/d' umami.sql
可以手搓如下,我这里直接使用 DataGrip
psql -U username -d mydb < umami.sql
由于 MySQL → PostgreSQL 差异巨大,需要执行大量替换操作。报错太多,决定放弃升级改成使用 v3 版本, 还是重装方便
由于兼容性问题太多,我最终选择放弃 v2 的 MySQL → PostgreSQL 迁移,转而直接部署 全新的 Umami v3。
v3 镜像地址:
官方:ghcr.io/umami-software/umami:postgresql-latest
国内同步:ccr.ccs.tencentyun.com/k7scn/umami:postgresql-latest
v3 使用体验更流畅、性能也更好,而且完全修复了此次 Next.js 漏洞。
Umami 因 Next.js 漏洞受到影响
如果你还在运行旧版本,请尽快升级,避免站点暴露在风险中!我今天至少已经看到 10+ 站点被入侵挂马了。
2025-12-02 22:35:49

很早之前我出的,然后又被我收到了,现在又闲置了,打算出了
老牌 IDC 了,工单响应速度极快,即使凌晨 15 分钟接单。
Platinum8259CL*2
128GB DDR4
1TB NVMe SSD
续费 358/月
带宽上限 50Mbps (上行是 50Mbps,下行是 150Mbps)
防护峰值 400Gbps
迁移至宁波电信需在账单日进行且该机器为十堰活动款,迁移至宁波地区您的续费价格将会上调至 398 元,需要实名的。
12.19 到期, 一口价 300,需要自备实名账号,有意可以私聊我。