TTRSS 迁移实战

news/2025/2/22 20:43:45/文章来源:https://www.cnblogs.com/east4ming/p/18731359

背景

几年前在云服务器上搭建了一套 TTRss + RssHub 集群, 用于阅读文章.

具体可以参见这篇文章: 使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss - 东风微鸣技术博客

近期云服务器要到期了, 刚好趁此机会将其从云上迁移到家里的 Homelab2 集群.

迁移是2025年2月22日上午做的, 结果非常顺利. 做完后太太还没起床呢, 那就再利用这段时间总结一下迁移过程.

内容有些流水账, 如果有疑问/建议欢迎交流.

技术栈

迁移前

  • K3s v1.23.10+k3s1
  • Ingress: 自带的 Traefik
  • 证书: cert-manager + DNSPod 插件
  • 存储:自带的 local-path
  • 备份: velero(只备份 manifests)
  • 域名: 后缀为 ewhisper.cn

迁移后

  • K3s: v1.31.5+k3s1
  • Ingress: Tailscale Operator
  • 证书: Tailscale Operator
  • 存储: rook-ceph
  • 备份: volsync
  • 域名:后缀为 west-beta.ts.net

综上, 其实不只是简单迁移, 还需要相应调整存储/网络相关配置.

这里的迁移场景非常具体, 只针对我的使用场景, 但是迁移的规划/步骤/思路可以供大家参考.

📝Notes:

我的完整迁移后代码位于: homelab2/apps/rsshub at master · east4ming/homelab2

本文出于长度考虑, 就不粘贴细节脚本/yaml了, 感兴趣的可以去 repo 查看.


迁移实战

1. 备份

1.1 K8s Manifests 备份

  • Deploy
  • Service
  • PVC
  • IngressRoute(Traefik)

已经通过 Velero 备份为 json 文件. 再通过脚本 kubectl-neat.sh 转换为 yaml 并移除不需要的字段.

📝Notes:

kubectl-neat.sh 用到了 kubectl krew 插件: neat

PVC 数据备份

  • redis 数据: dump.rdb
  • ttrss icons: 空. 无需备份.
  • ttrss postgresql 数据: 进入到容器中, 执行pg_dumpall -c -U postgres > export.sql

📚️Reference:
数据库更新或迁移|🐋 Awesome TTRSS

另外注意, 备份 Postgres 数据前可以先停止 ttrss Deployment.


2. 停机

原集群上, 停掉所有 Deploy, 停止所有服务.

3. 修改 Manifests

修改 Manifests 以适配新的 Homelab2 集群.

  • NS 添加 volsync.backube/privileged-movers 注解以启用 volsync特权备份功能
  • Deploy postgres 增加 initContainer 删除 PostgreSQL 数据库中的 lost+found 目录, 否则启动报错 (rook-ceph PV 特性导致必须作此调整)
  • Deploy ttrss 增加 initContainer 使用 busybox 镜像执行 chmod 命令,将 /var/www/feed-icons/ 目录的权限设置为 777
  • 修改 IngressRoute 的 Host.
  • 修改 depoly ttrss 中的 SELF_URL_PATH 为新的域名
  • 将 rsshub 和 ttrss 的 traefik IngressRoute 改为 Ingress 配置并调整域名
  • 将环境变量中的密码改为从 secrets 中获取(Secrets 添加到 .gitignore) (因为我的 repo 是public 的, 所以密码要避免暴露)

4. 手动部署

cd apps/rsshub
kubectl apply -f ns.yaml
kubectl apply -f deploy/ -f pvc/ -f secret/ -f service/ -f ingress/

5. 恢复数据

先停掉除了 Postgres 以外的所有 Deploy, 防止脏数据.

5.1. Postgres

先将 export.sql 复制到 Postgres PV 中.

再进入 Postgres pod 中执行以下命令恢复数据:

cat export.sql | psql -U postgres

5.2. Redis

dump.rdb 复制到 Redis PV 中. (还需要 chown)

6. 启动

启动所有 Deploy.

7. 修改 TTRss 供稿设置

登录 TTRss 域名: ttrss.west-beta.ts.net, 进入: 偏好设置 -> 供稿设置 -> 逐一查看, 将URLhttps://rss.ewhisper.cn... 修改为: https://rss.west-beta.ts.net...

8. 验证

  1. 验证 RssHub 是否正常
  2. 验证 TTRss 是否正常
    1. 登录 TTRss
    2. 阅读文章
    3. 验证是否可以正常订阅

9. 备份

  1. 备份 Postgres 数据

10. 纳入 ArgoCD 管理

因为 ArgoCD 不监控子目录的 yaml 文件, 所以需要将所有 yaml 文件都放在一个目录中.

使用脚本 move_and_rename.sh 执行调整, 调整后修改 .gitignore 文件并删除不再需要的空目录.

11. 并行一段时间后清理原集群

  1. node 回收
  2. DNS 记录清理
  3. 域名清理
  4. 原集群备份 s3 删除
  5. 其他杂项清理

总结

以上为本次 TTRss 迁移的总结, 详细步骤对各位没啥用. 但是希望迁移的规划/流程/思路可以提供价值.

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看Oracle的数据库表命令

在 Oracle 里 “数据库” 的概念和其他数据库系统有所不同,Oracle 一个实例通常对应一个数据库,但可以包含多个不同的模式(类似于其他数据库系统中的用户数据库)1. 查看数据库名称你可以在 SQL*Plus 或者 SQL Developer 等工具中执行如下 SQL 语句:SELECT name FROM v$dat…

Linux 中declare命令详解

Linux 中declare命令001、普通测试[root@PC1 dir1]# ls [root@PC1 dir1]# echo $var1[root@PC1 dir1]# var1="hello world" [root@PC1 dir1]# echo $var1 hello world [root@PC1 dir1]# var1=100.55 [root@PC1 dir1]# echo $var1 100.55 [root@PC1 dir1]# var1=100 […

《软件开发与创新课程设计》第一次课后作业——对学生选课系统的改进

(1)博客介绍 本文的学生选课系统的源码来自于csdn的一篇博客当中。该系统的实现语言以C++为主,本文的主要内容围绕该系统进行分析,并针对系统的主要问题进行一些修改或重构。 本篇如有问题存在,请各位读者多多指正! (2)学生选课系统分析 源代码如下: 点击查看代码 #de…

pikachu unsafe Fileupload

在上传点上传非法文件,提示上传文件不符合要求,且BP没有新的数据包产生,判断为客户端检查禁用浏览器JavaScript后刷新网页,再次上传文件,提示上传成功,文件路径为uploads/test.phpedge: 设置->Cookie和网站权限->所有权限->Javascript->禁用 Chorme:设置-&g…

rust学习十九.1、模式匹配(match patterns)

本章节大概是书本上比较特殊一个,因为它没有什么复杂的内容,通篇主要讨论模式匹配的语法。 一、两个名词a.可反驳 - refutable 对某些可能的值进行匹配会失败的模式被称为是 可反驳的(refutable) let Some(x) = some_option_value;如果 some_option_value 的值是…

大对数电缆打线顺序

5种线缆主色:白色、红色、黑色、黄色、紫色 5种线缆配色:蓝色、橙色、绿色、棕色、灰色 25对电话电缆色谱线序表30对电话电缆色谱线序 这里要特别说明下:30对的电话电缆要注意了,30对通信电缆里有2种白色的主色,大于25对了就一定要看标识线了!!有一小把是用“白蓝"…

01-springsecurity数据库登录

01 - SpringSecurity实现数据库登录 环境: springboot 3.4.2, springsecurity 6.4.2, mybatis 3.0.4springsecurity中的UserDetails接口用于表示用户信息, 包含用户名、密码等信息。UserDetailsService接口用于加载用户信息, 里边就这一个方法 public interface UserDetailsSer…

【喜与悲】- 2025.2.22 晚

下图为《Balatro》中的一张小丑牌:【喜与悲】喜与悲可以重新触发所有打出的人头牌,是重新触发家族中的一员。但其特性也决定了其强度方差极大,有配合则强度很高,没有配合则纯浪费小丑位。但很少有小丑能与其配合,而能与其配合的小丑大多单独拎出来又不强。更多时候其几乎只…

莫队算法学习笔记

莫队算法的发明者是一个叫做 莫涛 的人,所以被称为莫队算法,简称莫队。 英语 Mos algorithm。 使用场景 莫队算法常常被用来处理多次区间询问的问题,离线处理询问(必须满足!!!)。 插叙:离线是一种得到所有询问再进行计算的方法,是很重要的思想。 对于这种“区间询问”…

参数-返回值-局部变量-数组

参数和局部变量没有本质区别,都是栈中的数据 参数时在函数调用前分配的值,局部变量是在函数调用时分配的值 参数 ebp+* 局部变量 ebp-* 赋值的本质是把运算结果放到某个内存里数组: 一堆连续存储的等宽数据

详细介绍java的线程池状态

一、详细介绍java的线程池状态 Java 中的线程池状态是 ThreadPoolExecutor 类内部管理的一个重要概念。线程池的状态决定了线程池的行为,例如是否接受新任务、是否处理队列中的任务、是否中断正在执行的任务等。 线程池的状态通过一个 AtomicInteger 变量(ctl)来表示,该变量…

[Java SE] Java静态代码块与静态属性的执行顺序

序 重要结论先说结论,再去观察实验现象,印证结论。静态变量初始化和静态代码块的执行顺序是:按照它们在类中出现的顺序进行的。代码实验 实验1import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class JavaStaticTest {private final static String VAR = &qu…