贰叁肆 - 2025年9月
type: channel
link: https://www.ersansi.top/index.php/2025/09/
description: 贰叁肆的博客
items: 搭建自己的记账系统
items: 使用restic对服务器进行备份
items: 部署navidrome，打造个人音乐库
items: win10系统精简保姆级教程
items: 修改 socket 缓冲区大小（rmem/wmem）优化frp上传
items: Robot Framework循环
items: 使用cloudflare代理后无法访问或者重定向过多解决方法

搭建自己的记账系统
type: item
date: 2025-09-24T16:21:00+08:00
description: 简介 系统名称：ezbookkeeping 这个系统是再github上开源的，完全免费，没有会员广告限制，所有数据全部存储在自己的服务器上 功能方面也是比较全面的，除了基础的收支记录，账户管理，报表等功能外，还支持账单一键导入，可以导入支付宝微信账单，也可以导入银行账单 项目/下载地址 项目地址：https://github.com/mayswind/ezbookkeeping 也可以前往资源库搜索下载，本站提供linux1.0.1版本下载 搭建环境 这个系统支持子啊windows、linux等系统上运行 我这边使用的是linux系统 第一步：下载ezbookkeeping 打开项目地址 点击顶部的标签 点击最新的版本号 找到适合自己处理器和系统的版本，右键复制链接地址 使用SSH连接到自己服务器，在/opt目录下创建一个新文件夹 mkdir /opt/ezbookkeeping 进入刚刚创建的文件夹 cd ezbookkeeping 使用wget命令下载 wget 刚刚复制的下载链接 wget https://github.com/mayswind/ezbookkeeping/releases/download/v1.0.1/ezbookkeeping-1.0.1-linux-amd64.tar.gz 解压下载的文件 tar -zxvf ezbookkeeping-1.0.1-linux-amd64.tar.gz 第二步：测试运行 解压出来后，可以看到有一堆文件，其中里面有个文件名为ezbookkeeping，这个就是这个系统的二进制运行文件，使用下面命令测试运行 ./ezbookkeeping server run 使用浏览器访问服务器地址加8080端口，如果正常的话会打开登录界面 第三步：设置开机自启 可以正常运行后就没问题了，接下来就是配置开机自启了 进入system服务 cd /etc/systemd/system 使用vi编辑器新建一个文件 vi ezbookkeeping.service 把下面内容复制站体进去，记得根据自己实际情况修改路径 [Unit] Description=ezBookkeeping Server After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/ezbookkeeping ExecStart=/opt/ezbookkeeping/ezbookkeeping server run Restart=on-failure StandardOutput=append:/opt/ezbookkeeping/log/ezbookkeeping.log StandardError=append:/opt/ezbookkeeping/log/ezbookkeeping.log [Install] WantedBy=multi-user.target 修改完成后保存并退出，然后授权可执行权限 刷新system配置文件 systemctl daemon-reload 启动 systemctl start ezbookkeeping 设置开机自启 systemctl enable ezbookkeeping.service 修改配置文件（可选） ezbookkeeping并没有管理员账户，然后用管理员账户修改系统配置，新增删除账户之类的，所有的配置都需要直接修改配置文件 修改配置文件可以参考官方的手册来修改 官方手册地址：https://ezbookkeeping.mayswind.net/zh_Hans 例如我需要关掉用户可以注册 首先我先看一下官方的手册，找到关于用户注册的 然后打开配置文件 vi conf/ezbookkeeping.ini 然后找到刚刚我们查询手册上对应的选项名 现在是true就是启用，要关闭就改成false，修改完成后保存退出 然后重启服务 systemctl restart ezbookkeeping.service 再次打开就可以看到创建用户点击不了了 注意事项 该项目没有管理界面，所有管理都需要命令行实现，要么修改配置文件要么使用命令 具体配置以及命令可以参考官方手册 喜欢折腾的可以研究看看 更新 使用二进制文件部署的，更新的时候下载最新版的包解压，然后覆盖原来的二进制文件ezbookkeeping和public目录以及templates目录即可 不要替换 conf/、data/、log/、storage/目录， conf目录存放配置文件 data目录存放数据库 log目录存放日志 storage目录存放用户上传的文件 更新完成后进入到二进制文件目录，执行更新数据数据库结构操作 命…

使用restic对服务器进行备份
type: item
date: 2025-09-23T10:16:00+08:00
description: 简介 之前我的博客和服务器上的其他系统都是我手动备份数据的，因为懒，所以懒得整自动备份 最近连手动备份也懒了，想想还是整个自动备份吧 我使用的工具是restic是本地/远程备份工具，可以实现增量备份 + 去重 + 压缩 + 加密 + 快照管理 可以把数据备份到 本地磁盘、NAS、SFTP、S3 等支持的后端 功能 描述 增量备份 每次只保存变化的数据，节省空间 去重 不同备份间重复数据只保存一次 压缩 数据存储时自动压缩，节省存储空间 加密 备份自动加密，保证安全 快照管理 可以查看、保留、删除历史版本 跨平台 Linux / Windows / macOS 都支持 思路 我的服务器使用的是联想M73，只有一个硬盘位，所以打算外接一个USB硬盘来存储备份文件 刚开始想使用网盘进行备份的，后面发现很多网盘备份工具都不知此个人版的网盘，只支持企业版，当然也不是没有办法，先把网盘挂载成webdav，然后存进去就可以了 但是我懒，反正家里面有硬盘 第一步：格式化硬盘 首先把USB硬盘插上去，然后使用下面命令查看硬盘信息，可以看到这里已经读出我的硬盘了，是/dev/sdc1 lsblk -f 硬盘格式是ntfs，这个格式对linux并不友好，我需要格式化成ext4格式 首先卸载硬盘，如果没有挂载的话就忽略这一步，如果不知道硬盘有没有挂载就直接执行也没事，没有挂载会有提示 umount /dev/sdc1 然后格式化硬盘，中间可能会弹出提示，输入y回车继续 mkfs.ext4 -L backup /dev/sdc1 等待完成 第二步：挂载硬盘 使用下面命令查看确定硬盘的UUID，记得把UUID复制下来 blkid /dev/sdc1 使用vi编辑下面文件 vi /etc/fstab 在文件最后面添加挂载信息，把下面这一行复制修改UUID为你硬盘的UUID，ntfs-3g改成硬盘格式，然后粘贴到文件的最后面，因为是移动硬盘，所以我们加了nofail,x-systemd.device-timeout=10，这个是开机等待10秒，不管有没有检测到这个设备都直接开机，如果不加的话移动硬盘出现问题挂载不了就会导致开机卡住，开不了机 UUID=068273068272FA0F /mnt/usb ntfs-3g defaults,nofail,x-systemd.device-timeout=10 0 0 添加完成后，保存退出 执行立即挂载命令，但是我这提示挂载失败，挂载点不存在 mount -a 这个是因为我的系统里面没有/mnt/usb这个目录，所以挂载不上，我先创建一个/mnt/usb目录 mkdir /mnt/usb 然后再次执行挂载命令，提示不是错误，只是 systemd 在提醒：你修改了 /etc/fstab，但 systemd 还缓存着旧配置。 不过 mount -a 是直接读 /etc/fstab 的，不依赖 systemd，所以已经生效了 mount -a 使用下面命令查看是否挂载成功，看到有挂载点就是成功了 lsblk -f 使用下面命令让 systemd 下次启动时用新的配置 systemctl daemon-reload 第三步：下载release release可以直接使用系统源yum、apt下载，但是版本比较老，我是直接去github项目地址下载的 项目地址：https://github.com/restic/restic/ 首先创建一个文件夹，用来存放release的二进制运行文件 mkdir /opt/release 进入刚刚创建的文件夹 cd /opt/release 进入release项目地址 点击顶部的标签 点击最新的版本号 滑倒下面，找到对应自己服务器操作系统和处理器的版本，右键，复制链接地址 回到SSH终端，使用wget命令下载 wget https://github.com/restic/restic/releases/download/v0.18.1/restic_0.18.1_linux_amd64.bz2 下载完成后解压出来，然后使用ls命令查看解压出来的文件 bunzip2 restic_0.18.1_linux_amd64.bz2 ls 解压出来的文件名太长了，我们重命名一下 mv restic_0.18.1_linux_amd64 restic 修改文件权限，让文件可执行 chmod +x restic 第四步：创建备份文件列表 使用vi编辑器创建一个txt文件，名称为：backup_dirs.txt vi backup_dirs.txt 然后把需要备份的文件目录写进去，这样后面我们需要增加或者删除备份目录就直接修改这个文件列表即可 /home/wwwroot/www.ersansi.top /r…

部署navidrome，打造个人音乐库
type: item
date: 2025-09-18T16:54:00+08:00
description: 简介 Navidrome 是一个轻量级的、自托管的音乐服务器，类似 Subsonic，但更加现代和开源。它可以让你在任何设备上访问和播放自己的音乐库，并支持转码、Web 界面、API 等多种功能。 支持linux部署和windows部署 地址 Github项目地址：https://github.com/navidrome/navidrome 官网地址：https://www.navidrome.org/ 官网手册地址：https://www.navidrome.org/docs/ 也可以从本站的资源库里面搜索下载，本站资源库提供的版本是linux-amd64版本 部署环境 操作系统：Almalinux 第一步：下载/解压Navidrome 下载 首先打开github项目地址 然后点击顶部的标签 点击最新的版本号 滑倒下面，找到对应自己服务器的版本，点击右键，复制链接地址 使用SSH工具链接服务器，然后使用下面命令创建文件夹 mkdir /opt/navidrome 进入刚刚创建的文件夹 cd /opt/navidrome 使用wgeet命令下载刚刚复制的链接的文件 wget https://github.com/navidrome/navidrome/releases/download/v0.58.0/navidrome_0.58.0_linux_amd64.tar.gz 下载完成后，使用ls命令查看刚刚下载的文件 ls 解压 使用tar命令解压刚刚下载的文件 tar -zxvf navidrome_0.58.0_linux_amd64.tar.gz 使用ls命令查看解压出来的文件 我们只需要保留navidrome这个文件就行，其他的直接使用rm命令删除 rm -f LICENSE navidrome_0.58.0_linux_amd64.tar.gz README.md 配置navidrome 使用vi命令创建一个配置文件 vi navidrome.toml 然后把下面配置内容根据自己需求修改一下，复制粘贴进去 # ========================================== # Navidrome 配置文件示例 (最全) # ========================================== # ------------------- # 服务器设置 # ------------------- Port = 4533 # Web界面端口 Address = "0.0.0.0" # 监听地址，0.0.0.0 表示所有网卡 BaseURL = "" # 如果部署在子目录，例如 /music LogLevel = "info" # 日志等级: debug / info / warn / error # ------------------- # 数据库设置 # ------------------- DataFolder = "/srv/navidrome/data" # 数据库和缓存文件存放目录 DBType = "sqlite3" # 数据库类型: sqlite3 / postgres DBPath = "navidrome.db" # sqlite 数据库文件路径（如果使用 sqlite3） # PostgreSQL 连接设置（如果 DBType=postgres） PostgresHost = "localhost" PostgresPort = 5432 PostgresUser = "navidrome" PostgresPassword = "password" PostgresDB = "navidrome" # ------------------- # 音乐库设置 # ------------------- MusicFolder = "/srv/navidrome/music" # 音乐文件目录，必须存在且可读写 ScanInterval = "5m" # 自动扫描音乐库的间隔，可设为 "10m"、"1h" AllowedExtensions = ["mp3", "flac", "ogg", "m4a"] # 支持的音频文件格式 FullScanOnStartup = true # 启动时是否执行全量扫描 PlaylistImport = true # 启动时是否导入已有播放列表 # ------------------- # 用户与安全 # ------------------- NoAuth = false # true 表示无需登录 SignupEnabled = true # 是否允许用户注册 AllowSignUpAdmin = false # 注册用户是…

win10系统精简保姆级教程
type: item
date: 2025-09-17T10:40:53+08:00
description: 简介 家里面有一台联系M73，之前用来做软路由的，后面不用软路由了，就放着一直吃灰了，现在打算折腾一下，打算安装win10，做轻办公 但是配置比较低，所以打算安装win10精简版 在网上找了好久，没有找到自己喜欢的win10精简版，打算自己动手精简一个 工具 首先你得有一台电脑，windows系统，这个是基础 然后我们会使用到三个工具 1、微软官方win10下载器 2、MSMG Toolkit 3、DISM++ 工具地址 微软官方win10下载器：https://www.microsoft.com/zh-cn/software-download/windows10 MSMG Toolkit：https://msmgtoolkit.in/downloads.html 也可以前往本站资源库搜索下载 下载工具 如果是前往本站资源库下载的可以忽略此步骤 下载微软官方win10下载器 打开上面我们给的下载地址，点击“创建windows10安装媒体”下面的【立即下载】 下载精简工具MSMG Toolkit 打开我们上面给的地址，点击【Download】 点击【Toolkit_v13.7.7z】，然后点击右边的【Download】 准备工作 创建一个新的文件夹，把我们下载的工具全部丢进去 下载官方win10 双击运行刚刚我们下载的微软win10官方下载器MediaCreationTool_22H2.exe 点击【运行】 等待加载完成，然后点击【接受】 选择为另一台电脑创建安装介质（U盘、DVD或ISO文件），然后点击【下一步】 这里可以保持默认，直接点击下一步，也可以更具自己的情况选择，我是直接保持默认的 选择ISO文件，然后点击【下一步】 选择下载存放的位置和名称，我们直接选择刚刚创建的存放工具的文件夹，也可以选择其他地方，自己知道存放在什么地方就可以，然后点击【保存】 等待下载完成 点击【完成】 加载镜像文件 把我们的精简工具Toolkit_v13.7.7z解压出来，进入解压的文件夹，把刚刚下载的ISO丢到工具里面的ISO文件夹里面 开始 运行工具 返回上一级目录，双击Start.cmd运行工具 这是这个工具的免责申明，大概意思就是使用这个工具自定义的系统在使用过程中出现BUG，数据丢失等行为不关这个工具的事，同意输入A，不同意输入B 输入“A”进入工具 回车继续进入 加载镜像 第一个选项是加载镜像文件，输入1选择镜像文件 我们的镜像文件格式是ISO，选择3 输入镜像文件名称，不用输.ISO 回车开始解压镜像文件 继续回车，退回到第一步，我们还需要加载一次镜像文件，刚刚只是解压出来，并还没加载，继续输入1 在输入一次1加载镜像文件 这里报错了，提示只能使用wim格式的文件，我们的文件是esd格式的，说我们可以使用MCT工具提取，如果没有报错的话就会出现下面选择版本的选项，按回车继续 回到主菜单后，继续输入1 输入6选择使用MCT工具 让我们选择一个版本，这里我选择专业版，输入4，然后回车，等待提取完成 回车继续 再次输入1 再次输入1 可以看到我们刚刚使用MCT工具提取的系统文件了，输入1并回车 输入y继续 第二个输入n，这个是是否加载镜像的启动文件，我们只需要精简系统，不需要修改启动文件，输入n回车 这个是询问是否挂载windows的恢复环境，我们只是精简系统，不用动这个，输入n并回车 等待加载完成 回车继续 删除文件 输入3，选择删除选项 这三个选项是让你选择删除的模式 菜单说明 1 Remove Windows Components 交互式菜单 你进入后会看到系统组件分类（应用、驱动、服务、功能） 可以逐项选择要删除的功能（比如 Cortana、OneDrive、Xbox、Defender、Edge） 适合手动精简，推荐用这个 2 Remove Windows Apps Using Apps List 使用一个文本文件（appslist.txt），里面写明要删除的 UWP 应用 运行后会批量删除列表里的应用 适合已经整理好固定精简方案的人（例如想自动批处理多次精简） 3 Remove Windows Components Using Package List 使用一个 组件包列表文件（packagelist.txt） 可以批量删除系统组件（不仅仅是应用，还包括服务、功能） 属于高级用法，适合有经验的人做“脚本化精简” 一般用于企业批量部署 我们选择1 菜单说明 1 Select Windows Components 进入后会显示组件分类（Apps、System、Multimedia、Defender、Edge 等） 你可以逐项选择要删除的组件 选完后只是“标记”，不会立即删除 2 Start Removing Windows Co…

修改 socket 缓冲区大小（rmem/wmem）优化frp上传
type: item
date: 2025-09-15T09:15:13+08:00
description: 简介 前几天发现frp穿透上传速度比较慢还不稳定，所以找了一些方法，但是都没有什么太大作用 目前发现修改 socket 缓冲区大小这个方法有点用，这里记录一下怎么操作 调大 rmem/wmem（socket 缓冲区大小）其实就是在 内核 TCP 缓冲机制上动手脚，对传输性能会有明显影响。 正面效果 首先说一下正面效果，也就是优点 提升长肥管道的吞吐 高延迟 + 高带宽 的链路（比如跨境、隧道、卫星链路）需要更大的 TCP 窗口才能“装下”足够多的数据包。 否则，RTT 期间的数据太少，带宽利用率不高 → 上传/下载速度被限制。 减少丢包导致的性能下降 较大的缓冲允许更多数据在内核中排队，能吸收突发的流量，降低因为瞬间溢出导致的丢包。 改善隧道/代理（frp、VPN 等）的上传表现 这类程序往往要处理多路复用/转发，如果缓冲太小，很容易成为瓶颈。 负面效果 既然有优点，那么肯定有缺点，如果盲目的调整，过大或者国小都是有影响的 增加延迟（bufferbloat） 缓冲过大时，数据积压在内核队列里，应用层以为“发出去了”，实际上还在等内核慢慢吐。 会导致交互类应用（SSH、游戏、VoIP）延迟变大。 内存占用增加 如果有成千上万个并发连接，每个都能申请几 MB 的缓冲，可能迅速吃掉系统内存。 不能解决带宽不足或物理丢包问题 它只是让 TCP 能“吃得下更多”，但如果线路本身抖动大、丢包多，依然会卡。 调整方法 首先我们可以使用临时调整的方法来测试，找到一个适合的大小，找到后在改成永久的 临时调整 临时调整重启后会失效 最大缓冲限制 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216 TCP 读写缓冲（最小 / 默认 / 最大） sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216" sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216" 查看是否生效 sysctl net.core.rmem_max net.core.wmem_max sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem 永久调整 永久调整重启后任然有效 方法一：直接写到 /etc/sysctl.conf 编辑配置文件： vi /etc/sysctl.conf 在文件末尾加上： # for frp upload speed net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 保存退出后执行： sysctl -p 方法二：单独建一个配置文件（推荐） 更干净，方便管理。 vi /etc/sysctl.d/99-frp-tuning.conf 写入： # frp upload tuning net.core.rmem_max=16777216 net.core.wmem_max=16777216 net.ipv4.tcp_rmem=4096 87380 16777216 net.ipv4.tcp_wmem=4096 65536 16777216 应用配置： sysctl --system 验证是否生效 sysctl net.core.rmem_max net.core.wmem_max sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem 应该能看到刚设置的值。

Robot Framework循环
type: item
date: 2025-09-10T21:18:19+08:00
description: 简介 时隔多日，Robot Framework系列再次更新 这次更新主要是搬朋友写了一个小脚本，里面用到的东西是之前没有说过的，所以更新一下，佛系更新 介绍 Robot Framework循环主要有两种 一种是FOR循环，经典传统风格 另外一种是FOR IN循环，现代风格，可以处理列表或者范围 Robot Framework 的循环写法与 Python 类似，但语法有自己的特点，尤其是在缩进和结束循环标记上。 FOR循环 这个循环主要用于重复执行一段测试步骤若干次 第一种用法 写法 FOR ${i} IN RANGE 5 Log Iteration ${i} END ${i}是循环变量，可以不用，但必须有 IN RANGE 5表示循环5次，从0开始，0是第一次，到4结束，4就是第五次了 Log是循环体中的关键字，每循环一次执行一次，可以替换成你需要循环执行的关键字或命令 END结束循环 下面是我帮朋友写的脚本里面的一段循环，经过简化后的，主要是用于讲解FOR循环 FOR ${I} IN RANGE 1000 点击促销管理 点击人员库 点击部门 Reload Page END 第一行，对照上面的解释，可以看到我需要循环1000次，也就是0-999 第一行后面到END中间就是我需要循环执行的 上面的这一段就是循环依次执行“点击促销管理”、“点击人员库”、“点击部门”和刷新页面，这几个操作依次循环执行1000次 第二种用法 写法1 FOR ${item} IN apple banana orange Log Fruit: ${item} END 这个用法我的脚本里面还没有用到，但是如果你理解了上面的用法，那么这个用法就很好理解了 首先是第一行FOR ${item} IN apple banana orange，可以看到IN后面又三个值，分别是apple、banana、orange 然后中间部分我们执行的是Log Fruit: ${item}，这个是打印输出${item}这个变量 最后是循环结束END 首先理解这个循环的操作，可以看出这个循环主要就是循环打印输出${item}这个变量 ${item}这个变量的值就会依次等于IN后面的值 也就是说第一次循环的时候，打印输出的内容是Fruit：apple 第二次循环则打印输出Fruit：banana 第三次循环打印输出Fruit：orange 这个是依次的，当IN后面的值都循环完成后停止循环 这个循环可以用来填写表单之类的，每次填写的值都不一样，只需要把每次需要填写的值写在IN后面即可 写法2 Robot Framework 4.0 之后推荐使用这种写法，语法更清晰，也可直接用于 Test Case 或 Keyword FOR ${item} IN @{fruits} Log Fruit: ${item} END 这个写法和第一种写法作用是一样的，只是变了一个写法而已 @{fruits}是列表变量，可以直接理解为是一个列表 循环会遍历列表中的每个元素，适合处理外部数据或变量列表。 示例 *** Variables *** @{fruits} apple banana orange *** Test Cases *** Loop Over List FOR ${fruit} IN @{fruits} Log Today I eat ${fruit} END 首先我们在*** Variables ***下面创建了一个列表变量 @{fruits}，它的值等于apple banana orange，也就是它有三个元素 然后我们在*** Test Cases ***下面创建了一个测试用例，名字为Loop Over List 这个测试用例就是执行 FOR ${fruit} IN @{fruits} Log Today I eat ${fruit} END 这个和上面一样，循环打印${fruit}这个变量，然后这个变量等于@{fruits}这个列表变量，@{fruits}这个列表变量里面有三个元素，所以会循环三次 执行后就会打印输出下面内容 Today I eat apple Today I eat banana Today I eat orange WHILE 循环 这个循环可以理解为判断加循环 WHILE 循环语法规则 WHILE <条件表达式> # 循环体（只要条件为真（满足），就一直执行） END 示例 ${BM}= 获取人员库部门 WHILE '${BM}' == '' 点击空白部门 修改班级 20240715期昌明工贸 修改考勤规则 固定班次1 点击保存 强制等待2秒 点击返回 ${BM}= 获取人员库部门 END 首先获取人员部门，并赋值到${BM}里面 然后使用WHILE 循环，当${B…

使用cloudflare代理后无法访问或者重定向过多解决方法
type: item
date: 2025-09-07T17:52:00+08:00
description: 简介 这几天本地电信网络不知道怎么回事，走frp的线路一直拥堵，导致博客访问缓慢，所以想启用cloudflare的代理来解决 但是启用代理后出现几个问题 1、启用代理后访问博客出现重定向过多 2、启用代理后直接无法访问博客 下面是这两个问题的解决方法 重定向过多 这个是因为网页在不同地址之间不停跳转，形成了循环，打开代理后才出现的问题，关闭代理后就正常，说明是代理的问题 登录cloudflare，点击域名 点击右边的【SSL/TLS】 点击【配置】 在“自定义SSL/TLS”里面选择【完全】 最后点击【保存】即可 开启代理后不能访问 这个是因为cloudflare的免费套餐的代理是有端口限制的，我们只需要把服务的端口改到cloudflare支持代理的端口即可 下面是cloudflare免费套餐可以代理的端口 HTTPS (SSL) 代理支持： 443（标准 HTTPS） 2053, 2083, 2087, 2096, 8443 HTTP 代理支持： 80（标准 HTTP） 8080, 8880, 2052, 2082, 2086, 2095 最后结果 虽然启用了代理后，连接稳定了，但是延迟偏高，体验并不是很好，只能说是比以前好一点吧，看看后续本地网络运营商有没有改善或者是有没有其他解决方法吧