普通视图

发现新文章,点击刷新页面。
昨天以前杜老师说

几种通过 FFmpeg 无损压缩视频的方法

2025年5月6日 00:00

北京这边天气不错,特别适合骑行。杜老师拿出了压箱底的全景相机,打算录制一段沿途景色,结果压制出的文件体积很大。之前分享过通过 FFmpeg 来压缩视频的方法,这次整理了更多的方法,供需要的小伙伴们参考!

写在前面

如果需要了解 FFmpeg 的安装方法,可以浏览《如何使用 FFmpeg 来压缩视频》一文,里面有详细介绍如何在 Linux 系统安装 FFmpeg。

如果需要在 Windows 系统上安装 FFmpeg,可以直接至官方下载安装包「或在评论区中留言」

用 CRF 参数

原理:CRF 是 H.264 编码器中用于控制视频质量的一个参数,数值越小画质越高,体积越大,一般取值范围为 18-28,默认值 23,18 是视觉无损。

命令示例:ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset veryslow -c:a copy output.mp4 此命令指定了视频编码器为 libx264,设置 CRF 的参数为 18,且使用 veryslow 预设以进一步提高编码质量,音频部分直接复制。

更改格式

原理:在不改变媒体编码的情况下,改变媒体封装格式,通常转换后的大小基本相同,一般不会出现过大差距,如果大小差距过大,需要检查媒体文件的完整性。

命令示例:ffmpeg -i input.mp4 -codec copy output.mp4 可直接更改封装格式,无需重新编码。

调分辨率

原理:降低视频分辨率可显著减小文件体积,对于对视频画质要求不是特别高,或需要在低分辨率设备上播放的场景比较适用。

命令示例:ffmpeg -i input.mp4 -vf scale=1280:720 -c:a copy output.mp4 该命令会将视频的分辨率调整为 1280×720 像素,音频的部分不进行重新编码,从而实现压缩体积目的。

调比特率

原理:降低视频比特率可以在保持原始分辨率的同时减小文件体积,适当减少比特率能够有效的减少文件大小。

命令示例:ffmpeg -i input.mp4 -b:v 2500k -c:a copy output.mp4 此命令将视频比特率设置为 2500kbps,音频流则直接复制。

用 HEVC 编码

原理:HEVC 是一种更高效的视频编码格式,在同等画质下,相较于 H.264 编码,可使文件体积更小。

命令示例:ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4 其中-c:v libx265 指定输出的视频编码器为 libx265-crf 28 指定 CRF 参数为 28-preset medium 平衡视频质量和压缩速度,-c:a aac -b:a 128k 表示音频部分使用 AAC 编码,并设置了音频码率为 128kbps。

天津游记「多图预警」

2025年5月3日 00:00

刚从合肥返京,就收到了天津出差任务。虽然京津距离不远,但杜老师平时工作较忙,周末一般都在家睡懒觉,所以也是想着趁此机会游玩一下!分享给未来过天津的小伙伴,大家来云旅游~

天津之旅

天津是中国北方的一座历史文化名城,同样是直辖市之一,有着丰富的历史底蕴和独特城市风貌。

天津建筑风格多样,中西合璧,例如五大道保存着众多西式建筑,意大利风情街则充满了浓郁异国情调。

此外,天津还有着众多的名胜古迹,例如盘山、独乐寺等等自然与人文景观,展现了其深厚文化底蕴。

天津的旅游特色主要体现在其独特的文化韵味和美食文化上,是体验津味文化与北方风情绝佳之地。

天津美食文化源远流长,如狗不理包子、煎饼果子等等传统小吃闻名全国,散发着独特的魅力。

此外,天津的相声文化也独具特色,古文化街、泥人张彩塑等更是让人感受到天津的艺术之美。

游记留影

天津的民国时代的建筑较多,也是别有一番风味:

张学良故居的餐厅:

张学良和赵四小姐卧室:

顶层是个舞厅,本来拍了歌厅整体,结果有个大爷入镜了,所以只有观众席给大家看看:

这叫聚丰当铺,可以清楚的观察到民国时代当铺格局:

这个是鹤竹堂药铺,据说是曾给慈禧光绪看病的御医所开:

皇宫舞厅,为什么杜老师想到依萍:

天津市特别警察局,杜老师也想拍亮堂点的,这里边就是暗光线,可能是想震慑罪犯:

瑞蚨祥成衣店,里边格局也很大气漂亮,就是衣服看着有一点少,毕竟都叫成衣店了,怎么衣服比杜老师的都要少:

成衣店顾客等待位,本来不想放这张的,但是这个窗和格局吸引了杜老师,所以还是放上来了:

这个是鼎章照相馆,杜老师除了会说漂亮外,不会说别的了,原谅杜老师言辞的匮乏:

民国时代诊所,不过感觉杜老师小时候诊所也长这个样子,可能杜老师也挺老的了:

这个是商会俱乐部,有很多张,但里边的光线不是很好,只有这张看起来还是不错的:

国父孙中山办公室,右上角露出来的点点就是他照片,不过相机没有全部收录进去,右侧还有一个很好看的壁炉,哈哈:

头一次看见民国的封条,必须拍照一张,杜老师一直以为封条只要有个封字就可以,没想到要写这么多东西:

这个是春和大戏院,张学良故居进门开始可以玩剧本杀的,好多人在走来走去的找线索,杜老师没有好意思参与进去,不过感觉很好玩的,大家有兴趣的可以参观的同时玩这个游戏。这个戏院里还有相声表演的,不过是固定的时间,杜老师忙着赶下一个参观地,所以并没有听相声,可惜:

最后用民国画报小广告来做结尾,张学良故居以及范竹斋故居之旅就结束啦:

全都是人,大家都在门口想拍出满意的照片,杜老师就只匆匆闪过了,毕竟杜老师没有高超的运镜技术:

这个是最后的晚餐,教堂里也好多的人,想找出一张没人的照片实在是太难了:

感觉这个吊灯和玻璃都漂亮的很,但是杜老师对宗教理解不深,不知道这个里边画面的含义,要是有解说就好了:

这个好像就是主教传教的地方吧,用隔离带围着,杜老师进不去,不过感觉就很神圣:

据说是溥仪和妃子们被从故宫赶出来之后住的地方,感觉就是个小洋楼:

溥仪和妃子们的小餐厅:

这个是溥仪妃子文绣的卧室:

这个是皇后婉容的卧室,感觉他们的床都好小啊,杜老师睡在上边都怕掉下来:

这个是溥仪的书房:

张园里也有剧本杀,每个时间段也有节目表演的,但是杜老师依然没赶上,时间太紧张了,下次一定要试试看:

最后用杜老师们伟大领袖毛主席给这段旅程做结尾,这个展区是爸爸妈妈他们那个年代结婚的布景,感觉爸爸妈妈他们来看肯定很有感触:

合肥游记「多图预警」

2025年4月30日 00:00

时隔一年,又一次来到了安徽省会——合肥。这次出差的时间很灵活,杜老师有半天时间可以到附近景区逛一逛,就特地带了单反相机拍了些照片。本文整理了几张特色的美照,特邀杜老师的另一半帮忙配的介绍文,感兴趣的小伙伴可进来一看!

合肥之旅

合肥是安徽的省会,简称庐州,有着 2500 多年建城史,是国家级历史文化名城,曾是三国时期兵家必争之地,也是包拯、李鸿章等历史名人故乡。

这里历史遗迹众多,例如三河古镇,因丰乐河、小南河三水流贯其间而得名,是合肥唯一 5A 景区,古镇历史悠久,古建众多,青砖灰瓦,小桥流水,宛如一幅淡雅的水墨画。

合肥不仅有深厚的历史文化底蕴,还有丰富的自然景观和现代旅游资源。

包公园是纪念北宋清官包拯而建,园内有包公祠、包公墓等景点,游客可以在此了解包拯的生平事迹和清正廉明精神。

徽园则集中展示了安徽各地的著名风景和徽派建筑,游客可半天时间领略安徽的徽风古韵。

合肥美食也是一大特色,庐州烤鸭、李鸿章大杂烩、合肥三鲜等等美食让人回味无穷。无论是对历史文化感兴趣的游客,还是喜欢自然风光和娱乐体验的游客,合肥都能满足需求。

游记留影

不需要买票哦,可直接进,不过周一闭馆,去的话要注意:

感觉徽式古建筑石雕木雕都很精致且应用广泛,都有相关典故以及故事。房梁窗户等很多地方都有精致的雕刻:

这个是徽式的古代祠堂模型,看起来很大气,请忽略杜老师不专业的摄影技术:

这个是古人的牌坊,看着真是方方正正,哦对,传说中的贞节牌坊貌似也长这个样子:

这个博物馆里,金子本来不多,这个碗是最好看滴:

爬了很多个塔,其中有很大一部分是不带电梯的。当时走到这里的时候人已经快累屁了,犹豫了很久不想爬上去,结果过来了一队旅游团,导游用喇叭喊:大家不用担心,这个塔有电梯。瞬间冲到塔里坐电梯美极了:

从塔上俯视图一张,景色还是很不错的,哇哈哈哈。下来的时候没有坐电梯,想着看看各层景色,结果有很多不知道有电梯的,杜老师听到大家边爬边骂街,上的时候在骂,下的时候也骂:

这是包公祠的井叫廉泉,根据传说,这个井可检测贪官,有个贪官喝了这个井水开始头痛,经查,他确实是贪官,所以有了这个名字:

打车去李府的时候司机告诉杜老师这里很出名,那必须要打卡,不过实在是太大了,且日头晒得很:

位于古逍遥津,emmmm 杜老师没有拍墓碑和坟茔,大家看看牌坊好了:

李府李鸿章的人物雕塑,本来是想拍大门口的牌匾的,但是人实在太多了。这个不需要买门票,但是需要网络预约免费门票,合肥这一点比较好,好多景点是免费的,对学生党也很友好:

让我们看下晚清时代的家具:

清朝各级官员胸前绣的动物,具体哪个代表哪个,还请百度,不过当时古人绣工是真的好,超好看的:

这个美术馆给杜老师最大的印象就是里边超级凉快,超级超级,凉快发冷:

欣赏艺术画作:

继续欣赏艺术画作,杜老师真是一点艺术细菌都没有,完全看不出这画的含义:

这个旋转楼梯拍照应该会很出片,但是杜老师的摄影技术也就只能到这里了,凑合着看看吧:

同样不需要预约而且不需要门票,直接进就可以,不逛这个杜老师都不知道这么多的名人竟然都是安徽人:

这个楼层有个展区是做了仿古街区的各类商店,特别有那个氛围感,就是人太多了,想拍下整个街景总有人入镜,挑了很久也就剩了这么一张:

仿客栈以及瓷器店,很有古风韵味:

一层是一个蜡像馆,有很多的出名人物都在这里,看到这个大象大家应该就知道是哪个了吧,这就是传说中曹冲称象:

这个就是包公断案现场蜡像,杜老师深深觉得喜欢看蜡像馆的,可来这里,比蜡像馆省钱,氛围还好:

三河古镇俯拍,这个是杜老师爬上没有电梯的塔才拍到的,这个塔不光没电梯!它的楼梯还特别窄,只可以放下半只脚,杜老师一路外八着上下,就像个大螃蟹:

古镇胡同,很难得有张没有行人的照片,热闹和静谧共存的徽式小镇:

徽式游廊,好多游人在另一边休息,微风吹拂:

除了这个马囧囧的样子让杜老师觉得比较好玩,这个马车厢小的出乎杜老师意料,杜老师小时候看电视剧他们出行乘坐马车还以为里边很大的,这个车厢杜老师感觉对胖子很不友好,进去就塞满了。原来古人的马车这么小的吗:

酿酒步骤,杜老师震惊的是他们真的有自己酿的酒摆在大缸里,但是看着黑漆漆的,用玻璃封住了,闻不到是什么味道,不知道还需不需要过滤:

回程坐了游艇,细细看了河两边的建筑,感觉是超级好,感觉每个时代的建筑都有它独特魅力:

在银河麒麟桌面操作系统 ARM 版上安装 KVM 虚拟化

2025年4月24日 00:00

KVM 是一种开源全虚拟化解决方案,能够在 Linux 系统运行多个操作系统。本文将详细介绍如何在银河麒麟桌面操作系统 ARM 版安装 KVM 虚拟化环境,帮助用户搭建高效的虚拟化平台。

准备工作

  1. 硬件要求

确保 ARM 架构设备支持虚拟化技术。通常,支持虚拟化的 ARM 处理器会支持硬件辅助虚拟化功能。

系统至少需要 4GB 内存和 20GB 的硬盘空间。

  1. 软件要求

银河麒麟桌面操作系统 ARM 版「如 V10」

KVM 虚拟化相关的软件包。

安装 KVM 虚拟化环境

  1. 安装 KVM 和相关工具
1
2
sudo apt update
sudo apt -y install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

注意:在银河麒麟桌面操作系统 ARM 版上,可以通过上面命令安装 KVM 和相关工具。

  1. 包的作用

上面软件包的作用如下:

包名作用
qemu-kvm提供 KVM 虚拟化核心功能
libvirt-daemon-system用于管理虚拟机的后端服务
libvirt-clients提供客户端工具管理虚拟机
bridge-utils用于配置网络桥接
virt-manager提供图形化界面管理虚拟机
  1. 添加用户到 libvirt 组内
1
sudo usermod -aG libvirt $(whoami)

注意:为方便管理虚拟机,需要将当前用户添加到 libvirt 组,然后注销重新登录,使组成员关系生效。

  1. 验证是否安装成功
1
virsh --version

注意:运行上面命令来检查 KVM 是否正常工作,如果返回版本信息,说明 KVM 安装成功了。

创建 KVM 虚拟机

  1. 下载镜像

可以从银河麒麟官方网站下载适合 ARM 架构的虚拟机镜像文件。

Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso 文件。

  1. 创建虚拟磁盘
1
qemu-img create -f qcow2 /path/to/disk.img 50G

注意:使用上面命令创建虚拟磁盘。其中/path/to/disk.img 是虚拟磁盘路径,50G 表示磁盘的大小。

  1. 启动 KVM 虚拟机安装
1
qemu-system-aarch64 -m 2048 -cpu cortex-a76 -smp 4 -M virt -bios /path/to/QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=/path/to/disk.img,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,file=/path/to/Kylin-Desktop-V10-SP1-2403-Release-20240430-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom

注意:使用上面命令启动 KVM 虚拟机安装。其中-m 2048 分配 2048MB 内存;-cpu cortex-a76 指定 CPU 类型;-smp 4 是指定虚拟 CPU 核心数。

  1. 完成安装

按照虚拟机安装界面的提示完成安装过程。

安装完成后 KVM 虚拟机将自动重启。

使用 KVM 管理虚拟机

  1. 使用 virsh 命令行工具

列出所有 KVM 虚拟机:

1
virsh list --all

启动 KVM 虚拟机:

1
virsh start <KVM 虚拟机名称>

关闭 KVM 虚拟机:

1
virsh shutdown <KVM 虚拟机名称>

强制停止 KVM 虚拟机:

1
virsh destroy <KVM 虚拟机名称>

挂起 KVM 虚拟机:

1
virsh suspend <KVM 虚拟机名称>

恢复挂起 KVM 虚拟机:

1
virsh resume <KVM 虚拟机名称>
  1. 使用 virt-manager 图形化界面

virt-manager 提供了一个直观的图形化界面,方便用户管理 KVM 虚拟机。

启动 virt-manager 后,可以连接到本地或者远程的 KVM 服务器,创建、启动、停止 KVM 虚拟机。

探索扣子空间「邀请码不限量分享」

2025年4月27日 00:00

当今数字化浪潮中,人工智能正以前所未有的速度改变着我们的工作和生活方式。字节跳动于 2025 年 4 月 19 日推出的通用型 AI Agent 平台,无疑是这一变革中一颗璀璨新星,为我们带来了全新的 AI 协作办公体验。

扣子空间是啥

扣子空间是个致力于打造和 AI 协作工作全新工作方式的平台。

它基于字节跳动自研的豆包等国产大模型,用户只需将任务交给智能体,系统就能自动完成需求分析、任务拆解、工具调用、结果生成,支持从网页到文档等多种类输出形式,极大提升工作效率与执行力。

核心特点功能

  1. 双重模式协作,灵活应对任务需求

扣子空间提供了探索模式和规划模式。

探索模式下 AI 自主动态探索,完成速度更快,适用于时效性强的任务,例如查询最新资讯、获取实时数据等等;规划模式中 AI 深度思考,会先给出任务处理规划,经过用户确认后再行动,执行期间也需用户参与,适合高复杂性任务,如跨行业市场调研、复杂项目规划等等。这种双模式的协作机制,让用户可根据任务属性灵活选择,能更好地与 AI 协作完成工作。

  1. 强大任务处理能力,实现自动工作流程

扣子空间能够智能解析用户的一句话需求,精准识别意图并将其分解为多个具体任务。系统会自主调用浏览器、代码编辑器等工具执行任务,同时将每个思考和执行步骤清晰呈现,适时的与用户确认意图,确保执行方向准确。

最终输出完整结果报告,如 PPT、网页、飞书文档等等,真正实现了从需求输入到成果输出的全流程自动化。

  1. 专家级 Agent 生态,提供专业领域支持

平台内置多种领域的专业 Agent,例如华泰 A 股观察助手可生成每日股市早报并解答股票分析问题,用户研究专家可以协助进行用户研究资料深度分析。

这些专家级的 Agent 针对特定领域更专业,能处理更复杂任务,为不同领域的用户提供了便捷的专业服务。

  1. 丰富插件集成,无限拓展能力边界

扣子空间首批集成飞书多维表格、高德地图、图像工具、语音合成等 60 多款 MCP 模块化能力插件,未来还将支持开发者通过扣子开发平台发布自定义插件。

这些插件涵盖资讯阅读、旅游出行、效率办公等等众多方面,使扣子空间能够满足用户在不同场景下的各种需求,真正实现了功能的无限扩展。

应用场景广泛

扣子空间应用场景十分丰富,涵盖办公、学习、生活、电商、金融等等多个领域。

在办公场景中,可以帮助用户完成撰写文档、数据分析、制作 PPT 等各种工作任务;在学习场景下,能为学生和教育工作者提供课程资料收集、课件制作等辅助教学和学习服务;在生活场景里,可以用于制定旅游计划、查询信息等等;在电商场景中,能够进行商品推荐、用户行为分析;在金融场景下,可为股票分析、金融数据解读等等提供决策支持。

截图与邀请码

扣子空间界面非常简洁,登录后可通过左侧菜单进行任务管理,输入任务描述即可快速创建任务,开始任务后会在右侧显示 Agent 执行过程:

扣子目前机制每次能生成五个邀请码,杜老师会定期更新邀请码的使用状态,也请小伙伴使用后留言邀请码的编号,用尽后会发放新邀请码:

编号邀请地址备注
1https://www.coze.cn/space-preview?invite_code=PYFNVF90已用
2https://www.coze.cn/space-preview?invite_code=TLZTCXQN已用
3https://www.coze.cn/space-preview?invite_code=MCIEP9ZP已用
4https://www.coze.cn/space-preview?invite_code=H3M95JPB已用
5https://www.coze.cn/space-preview?invite_code=0XV6MVQ3已用
6https://www.coze.cn/space-preview?invite_code=39GL3SRL已用
7https://www.coze.cn/space-preview?invite_code=LGOQDX27已用
8https://www.coze.cn/space-preview?invite_code=W9G0P33F已用
9https://www.coze.cn/space-preview?invite_code=CEP1YQD5已用
10https://www.coze.cn/space-preview?invite_code=EFUJVJ95未用
11https://www.coze.cn/space-preview?invite_code=PGYMJSN5未用
12https://www.coze.cn/space-preview?invite_code=L33JT5Q7未用
13https://www.coze.cn/space-preview?invite_code=MCAKQH6N未用
14https://www.coze.cn/space-preview?invite_code=68TDVTNL未用
15https://www.coze.cn/space-preview?invite_code=PA55VHFS未用

LibreTV 免费的在线视频观看神器

2025年4月21日 00:00

在数字媒体盛行的今天,观看电影、电视剧等视频内容成为了人们日常娱乐的重要部分。然而,许多视频平台要么需要付费订阅,要么充斥大量广告,还有的需要复杂的注册流程,极大地影响了观影体验。今天,就给大家介绍一款名为 LibreTV 的开源工具,它将彻底改变在线观影方式。

LibreTV 是什么

LibreTV 是个轻量级、免费的在线视频搜索与观看平台,无需注册账号,也无需要下载安装任何软件,更不需要付费订阅,只要连接网络,通过浏览器就可以随时随地访问。

它采用纯前端技术构建,结合了前端技术和后端代理功能,可以轻松部署在各种支持服务端功能的网站托管服务上。

LibreTV 的优势

免费使用:无需支付任何会员费用,即可畅享海量视频内容,真正实现了看片不花钱。

多源搜索:聚合了多个视频源,能更全面地搜索到电影、电视剧等各类影视资源,可轻松找到想看的内容。

跨多平台支持:无论电脑、平板还是手机设备,均能完美适配,随时随地满足观影需求。

静态部署:不需要后端服务器,部署简单快捷,大大降低了搭建和维护成本。

广告过滤:内置广告过滤功能,有效屏蔽广告干扰,提供更加干净、更优质的观影体验。

自定义 API 接口:用户可以根据自身需求添加或修改视频源,灵活性非常强,可以不断拓展影视资源。

LibreTV 的功能

多源视频搜索:覆盖丰富电影、电视剧等内容,支持多视频源自动聚合,一次搜索即可获取更多结果。

响应式 Web 设计:能够完美适配各种屏幕尺寸设备,无论是 PC 端还是移动端,都可以获得良好的观看体验。

本地存储搜索历史:将搜索历史存储在本地,方便用户下次快速查找之前看过影视内容。

快捷键的支持:播放器支持多种键盘快捷键,如全屏快进快退等,让操作更加的便捷。

HLS 流媒体支持:兼容 HLS 流媒体格式,确保视频播放更加流畅稳定。

可选密码保护:支持设置密码保护,增强访问控制,保障观影隐私。

LibreTV 的安装

  1. 用 Cloudflare Pages 部署

Fork 或者克隆 LibreTV 仓库 到 GitHub 账户。

登录 Cloudflare Dashboard 进入 Pages 服务。

点击创建项目,连接到 GitHub 仓库。

使用以下设置:构建命令「留空」(无需构建)输出目录「留空」(默认为根目录)

最后点保存并部署。

可选:在设置环境变量中配置密码保护。

  1. 用 Vercel/Netlify 部署

与 Cloudflare Pages 类似,只需要连接仓库并部署即可,无需特殊配置。

点击仓库中的部署按钮,按照提示完成部署流程。

  1. 用 Docker 部署
1
docker run -d --name libretv -p 8899:80 -e PASSWORD=your_password_here bestzwei/libretv:latest

注意:使用 Docker 运行 LibreTV,运行以上命令。然后打开浏览器输入 http://localhost:8899 即可访问。

  1. 用 Docker Compose 部署
1
2
3
4
5
6
7
8
9
10
version: '3'
services:
libretv:
image: bestzwei/libretv:latest
container_name: libretv
ports:
- "8899:80"
environment:
- PASSWORD=111111
restart: unless-stopped

注意:将上面内容保存到 docker-compose.yml 文件中,然后运行 docker-compose up -d 命令即可启动 LibreTV。

LibreTV 的使用

  1. 搜索视频:打开 LibreTV 的网页界面,直接在搜索框中输入想看的电影、电视剧关键词,点击搜索按钮或者按回车键,系统会自动聚合多个视频源。

  2. 可选择播放源:在搜索结果中,可以看到不同视频源提供的播放链接,根据喜好选择一个合适的播放源,点击进入播放页面。

  3. 播放控制:在播放页面可通过播放器的控制按钮进行播放、暂停、调整音量、可切换清晰度、拖动进度条等常规操作。此外,还可以使用键盘快捷键来进行屏、快进快退操作,提升观影体验。

  4. 查看历史记录:LibreTV 会将搜索历史存储在本地,可在搜索框下方或相应的历史记录区域查看和点击之前搜索过的内容,方便快速查找以及继续观看。

LibreTV 的效果

杜老师提供的免费平台:

LibreTV 以其丰富的功能、简洁的界面以及便捷的操作,为用户带来全新的在线观影体验。无论是在家中放松休息,还是在旅途中打发时间,它都能满足随时随地观看影视内容的需求:

Electerm 高效便捷的开源终端工具

2025年4月18日 00:00

在数字化工作时代,一款高效、便捷的终端工具对于开发者、系统管理员和网络工程师等人群来说至关重要。Electerm 作为一款开源免费的跨平台终端模拟器,凭借其丰富的功能和优秀的用户体验,成为了众多用户的首选。

Electerm 的简介

集终端模拟器、文件管理、远程连接、SFTP 客户端等功能于一体,支持 Windows/macOS 和 Linux 等多种操作系统。不仅功能强大,而且界面简洁直观,易于上手。

Electerm 支持在同一窗口中运行多个 SSH 会话,方便用户可同时管理多个远程服务器。同时,它还支持多种认证方式,包括密码、密钥、双因素认证等,充分满足不同用户安全需求。

安装方法

  1. Windows 系统的安装方法

访问 Electerm 的 官方网站,进入下载页面,找到 Windows 相关安装包。下载完成后双击安装包,进入欢迎界面,选择安装模式,浏览选择安装位置点击安装,等待安装完成即可。

另外,也可选择下载免安装版,解压到磁盘自定义目录,直接打开 electerm.exe 就能使用了。

  1. Linux 系统的安装方法

对于一些 Linux 发行版,如 Ubuntu、Kylin 等,用户可直接通过系统的内置软件商店进行安装:

使用方法

  1. SSH 连接项

打开 Electerm 后,在主界面点击左上角的加号,选 SSH。在弹出的对话框中输入主机地址、用户名以及密码等相关信息,点击连接按钮。

  1. 文件传输

在连接到远程服务器后,点击左侧边栏文件管理选项,进入文件管理界面。在该界面中用户可以看到本地和远程服务器的文件目录,通过简单拖拽操作,即可实现文件的上传和下载。

  1. 自定义快捷键

Electerm 允许用户自定义快捷键和主题,以满足个人操作习惯和视觉喜好。点击顶部菜单栏的设置选项,进入设置界面。在快捷键部分,用户可根据自己的需求对各种操作的快捷键进行修改和设置。在主题项部分,提供多种预设的主题供用户选择,同时用户也可以根据自己的喜好对主题的颜色、字体等进行自定义调整。

  1. 其它功能

Electerm 支持多语言,包括英语和中文等,用户可以在设置中进行语言切换。此外,它还具有自动完成、自动重连、透明窗口、终端背景图像等等功能,为用户提供更加便捷和个性化的使用体验。

效果截图

Electerm 支持 SFTP 功能,方便用户在本地和远程服务器间传输文件:

成功连接到远程服务器,进行相关的操作和管理:

Wave Terminal 多功能开源终端工具

2025年4月15日 00:00

在现代开发工作中,终端是我们必不可少的工具之一。今天要给大家介绍的 Wave Terminal,无疑是一款将传统终端功能与图形化能力完美融合开源终端,能够极大地提升我们的工作效率。

Wave Terminal 的简介

Wave Terminal 是一款支持 macOS/Linux 和 Windows 三大操作系统跨平台终端。

它不仅具备常规的终端功能,还集成了诸多高级特性,例如文件预览、网页浏览、AI 对话等。这使得开发者在使用终端时,无需频繁切换其它应用程序,即可完成多种任务。

下载安装

访问 Wave Terminal 的官方网站,下载安装包后,按照安装向导进行操作即可完成安装:

使用方法

界面布局模块操作:Wave Terminal 的默认界面左侧为终端命令行模块,中间区域分别是 CPU 性能、浏览器和本地文件路径模块,右侧则有帮助、提示和 AI 对话模块。这些模块均可根据个人需求随意拖动位置、多开、添加、删除。

多命令行窗口使用:可同时打开多个命令行窗口,方便在不同项目或任务之间切换。例如,在一个窗口中运行项目服务,另一窗口中执行相关命令进行调试等操作。

文件路径浏览操作:在文件路径模块中,用户不仅可以查看文档、图片,还能播放视频。直接输入文件路径或者通过图形界面浏览文件系统,快速定位到所需文件并进行编辑或者查看。

网页浏览功能:利用内置的浏览器模块,可以直接在终端中浏览网页。这在需要查阅技术文档、搜索解决方案等场景下非常方便,无需切换到其它浏览器,节省了时间和精力。

AI 对话的功能:借助右侧的 AI 对话模块,用户可以与 AI 进行交流。无论寻求编程建议、解决问题思路,还是进行其它知识性的问答,都能得到及时的回复和帮助。

远程连接功能:通过 Wave Terminal 可以方便地连接到本地内网的 Linux 服务器。以 Ubuntu 系统为例,先在 Ubuntu 系统安装 SSH 服务,执行 sudo apt -y install openssh-server 命令进行 SSH 安装,安装完成后执行 sudo systemctl status ssh 命令查看 SSH 的服务状态,若显示绿色 running 提示则表示服务已启动。然后在 Windows 系统 Wave Terminal 中,输入 ssh 用户名@服务器 IP 命令,输入密码后即可连接到远程 Linux 服务器。

工具截图

Wave Terminal 的强大之处在于它将多种实用功能整合到一个终端工具中,无需再频繁的切换应用程序,大大提高工作效率。无论是开发人员还是系统管理员,都能在这款工具中找到诸多便利之处,它无疑是现代终端工具中的一颗新星,值得大家尝试使用:

SimpleMindMap 开启思维可视化之旅

2025年4月12日 00:00

在信息爆炸的时代,思维导图已经成为高效整理知识、梳理思路必备工具。而 SimpleMindMap 作为一款强大的 Web 思维导图工具,凭借其独特的魅力,正吸引着越来越多用户目光。

SimpleMindMap 是什么

SimpleMindMap 既是思维导图的 js 库,也是一个完整思维导图工具。

功能丰富,能满足思维导图的各种需求,无论是简单的想法记录,还是复杂知识体系构建。

其插件化设计理念,使得除核心功能外的其它能力都作为插件提供,用户可以按需选择,避免了冗余代码的困扰。

而且易于使用,开箱即用,配置丰富,文档清晰,无论是编程新手还是有经验的开发者,都能快速上手。

安装方法

  1. 在线使用

最便捷的方式便是直接在线使用。这种方式适合临时使用或者快速尝试工具功能的场景。

访问 在线思绪思维导图,无需繁琐安装过程,即可立即开始创建思维导图。

  1. 本地部署
1
2
3
4
5
6
7
8
9
services:
mind-map:
image: hraulein/mind-map:latest
container_name: mind-map
restart: always
ports:
- "8080:8080"
environment:
- GIN_MODE=release # debug 为调试模式

注意:对于一些对数据安全和隐私有严格要求的用户,本地部署是最理想选择。将上面的内容保存为 docker-compose.yml 文件,然后用 docker-compose up -d 命令启动容器。

使用方法

  1. 创建思维导图

打开 SimpleMindMap 应用后,首先会看到一个简洁的界面。点击「新建」按钮,即可开启一张新的思维导图。

在中心出现一个根节点,这是思维导图起点。可双击根节点,为其输入主题名称,比如「我的学习计划」。

  1. 添加分支节点

确定好主题后,接下来就是添加分支节点来细化内容。先选中根节点,会发现有一些添加子节点的按钮或快捷键提示。

通常可以通过点击这些按钮或使用快捷键「如 Tab 键等」来创建子节点。例如,在「我的学习计划」根节点下,添加「语文」「数学」「英语」等学科子节点。

  1. 编辑节点内容

对于每个节点,不仅可以修改文字内容,还可以进行丰富的格式设置。在选中节点后,可通过顶部菜单栏或者右键菜单找到编辑选项。

比如,可以设置字体大小、颜色,加粗、倾斜文字,甚至可以插入图片、链接等多媒体元素。

  1. 调整布局

SimpleMindMap 提供了多种布局方式,以满足不同的展示需求。在菜单栏找到布局选项,有常见的思维导图布局。

可根据思维导图的内容结构和美观度考虑,随时切换布局,直观地看到不同的展示效果。

插件拓展

SimpleMindMap 的插件化特性是一大亮点。用户可根据自身需求安装各种插件来增强功能。

例如,有用于团队协作的插件,可让多个用户同时编辑一张思维导图,实时看到彼此修改;还有用于数据分析插件,能够对思维导图中的内容进行简单的统计分析,如节点数量统计、关键词频率分析等,为用户提供更好数据支持和决策依据。

Logseq 高效知识管理与协作利器

2025年4月9日 00:00

Logseq 以其出色的知识管理能力、便捷协作功能、强大的隐私保护以及灵活的可扩展性,成为了日常学习和工作中不可或缺的工具。不仅帮助高效地记录和整理知识,还激发了创造力和思考能力。

Logseq 的简介

Logseq 是一款开源的本地优先知识管理和协作平台,它完美融合了大纲笔记与双链笔记的优势,还注重用户的个人隐私保护。支持多种文件格式,包括 Markdown 等,满足不同用户写作习惯,同时提供了丰富的插件生态系统,用户可以根据自身需求扩展功能:

它不仅具备强大的笔记编辑能力,还内置了任务管理、日历视图、知识图谱功能,助力用户更好规划工作、学习、生活,无论整理学习资料、记录工作要点,还是进行团队协作,Logseq 都可以轻松胜任:

Logseq 的安装

Logseq 的安装十分便捷。电脑端用户可以从 官网,根据自身操作系统选择对应的安装包进行下载安装,如 Windows、Linux 等都有适配版本。首次打开会自动创建一个知识库,也可以根据需要自行创建新的知识库。

手机端用户同样可以在 App Store 或官网下载安卓端 Logseq 应用程序,实现移动端与桌面端的无缝同步,方便用户随时随地查看、编辑笔记。

Logseq 的使用

  1. 创建编辑笔记:在 Logseq 创建笔记非常简单,点击界面右下角的加号按钮,即可新建笔记。在编辑界面可以使用 Markdown 语法文本进行排版,例如设置标题、段落、列表、链接等等,还可插入图片、表格等等元素,让笔记内容更加的丰富多样。

  2. 添加标签属性:为更好地对笔记进行分类和管理,可为笔记添加标签。在笔记编辑界面中,点击右上角的「标签」按钮,输入相关标签名称即可。此外 Logseq 支持为笔记添加属性,如优先级、状态、日期等等,方便用户从不同维度对笔记进行筛选、查询。

  3. 双向链接:这是 Logseq 的核心功能之一。当在一篇笔记中提及另一个已存在的笔记内容,Logseq 会自动在两者间建立双向链接。也可以手动在笔记中入「笔记名称」的形式来创建链接,通过双向链接,可以轻松构建起一个有机的知识网络,方便在不同笔记间穿梭浏览,发现知识间的隐含关联。

  4. 知识图谱:借助知识图谱功能,可以直观地看到笔记之间的链接关系。点击界面左侧边栏「知识图谱」按钮,即可进入图谱视图。在这个视图中,节点之间的连线表示它们之间的双向链接关系。可以通过放大、缩小、拖拽等操作来浏览图谱,还可以查看某个笔记的关联笔记列表。

Logseq 的进阶

  1. 使用插件扩展功能:Logseq 的插件市场提供了丰富多样的插件,如增强的表格编辑插件、思维导图插件、PDF 注释插件等。可在 Logseq 的设置界面中找到件管理选项,浏览并安装需要的插件,以进一步提升工作效率。

  2. 数据同步备份:支持与多种云存储服务集成,如 GitHub、Google Drive 等,确保笔记数据在不同设备间实时同步。此外,还可以定期对数据进行本地备份,防止数据丢失。

Linux 系统监控利器 ctop 命令详解

2025年4月6日 00:00

在 Linux 系统,尤其是当我们在管理多个容器时,了解系统和容器的资源使用情况至关重要。今天,就给大家介绍一款强大的监控工具 ctop,本文详细介绍 ctop 的安装、使用、命令选项。

ctop 命令的简介

ctop 是一个类似 top 命令的界面工具,它专注于容器环境,能够实时监控 Docker/Podman 等容器运行时的性能指标,如 CPU、内存、网络、磁盘 I/O 等使用情况。

它以一种直观的方式展示各个容器的详细信息,让管理员可以迅速掌握系统整体健康状况,并且快速定位到可能存在性能瓶颈的容器。

与传统 top 命令相比,ctop 提供更丰富的容器相关数据和更便捷的交互方式。

它不仅能展示容器的基本资源使用率,还能深入到每个容器的进程级别,查看内部运行具体进程,这对于深入分析容器性能表现非常有帮助。

ctop 命令的安装

  1. Linux 系统的安装方法「以 Ubuntu 为例」
1
2
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop

注意:可以直接从 Github 下载最新版本的二进制文件进行安装,以上是具体的步骤「这里以 v0.7.7 版本为例」最后,用命令 ctop -v 验证是否安装成功,若可以正确显示版本号,说明安装成功。

  1. 通过 Docker 的方法安装
1
docker run --rm -it --name=ctop -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest

注意:也可以使用 Docker 快速启动 ctop 容器来进行监控。

ctop 命令的使用

  1. 基本使用

在终端中输入 ctop 命令后回车,即可启动 ctop 程序进入主界面。在界面中,会显示出所有正在运行的容器及其资源使用情况的概览,包括容器名称、CPU 使用率、内存使用量及限制、网络收发速率、磁盘读写速率、进程数等信息。

可以通过方向键上下移动光标来选择不同容器,然后按下回车键可以查看到所选容器详细信息,如容器的创建时间、各资源的详细使用数据以及内部运行的进程列表等。

  1. 命令选项

命令选项列表如下:

选项描述
ctop -a只查看正在运行中容器,方便专注那些实际处于活动状态、可能对系统资源产生影响的容器。
ctop -f string查看包含指定字符串的容器,当系统中有大量容器时,利用此选项可快速过滤出我们关心的特定容器进行监控。
ctop -i反转默认颜色,如默认的颜色显示效果不佳,或需要与其它界面风格保持一致,可使用该选项来改变界面的颜色显示。
ctop -r反向容器排列顺序,默认情况下存活的容器在前,使用此选项可将其顺序反转,以便按照不同顺序查看容器。
ctop -s string按照指定字段排序,如执行 ctop -s net 可以按照网络使用率对容器进行排序,从而快速找到网络流量较高容器。

交互操作

交互操作列表如下:

操作描述
h打开帮助,在使用过程中如果忘记了某些快捷键的功能或者想了解更多操作方法,可以随时按下 h 键查看帮助信息。
s打开排序,通过此快捷键可以方便地切换不同的排序字段,无需重新输入命令选项。
q退出打开的对话框,当查看完帮助信息或排序设置后,按下 q 键可以退出相应的对话框,返回到主界面。
a只显示正在运行的容器,与 ctop -a 命令效果一致,但在已经启动了 ctop 程序的情况下,使用快捷键可更快速地切换显示模式。
r反转排序,正在运行容器放在末尾,方便在不同的排序需求之间快速切换。
f输入指定字符串过滤出想要查看容器,与 ctop -f string 命令类似,无需重新输入命令,直接在当前界面中进行过滤操作。
j用于向下移动光标,方便在容器列表中快速定位到不同的容器。
k用于向上移动光标,方便在容器列表中快速定位到不同的容器。
Enter查看指定容器详细指标,当光标定位到某个容器,按下回车键即可进入该容器详细信息界面,查看更全面的资源使用以及进程信息。

Linux 下的高效压缩工具 Zstandard

2025年4月3日 00:00

Zstandard 以其卓越的性能和丰富的功能,成为了 Linux 下一款不可或缺的压缩工具。无论是对单个文件还是整个目录的压缩和解压,它都可以轻松应对,且在处理速度和压缩效果上都有着出色的表现。

Zstandard 的简介

Zstandard 是由 Facebook 开发并开源的一种快速无损压缩算法,2015 年首次发布以来,凭借其高压缩比和快速的解压缩速度,逐渐受到了开发者青睐。

它不仅在压缩效率上超越传统的 gzip 等工具,还能在保持高压缩率的同时,实现极快解压速度,特别适合对数据处理效率要求较高的场景,如大数据处理、日志压缩、网络数据传输等等。

Zstandard 的特点

高压缩比:通常情况下 Zstandard 能够获得比 gzip 更好压缩效果,有效减少数据存储空间。

快速解压:其解压缩速度极快,即使是低压缩等级,解压速度也能远超一些 SSD 的读取速度,大大提高了数据的读取效率。

多线程的支持:Zstandard 自带多线程压缩功能,可以充分利用多核 CPU 的性能,大幅提升压缩速度。例如,在处理大量数据时,多线程压缩能够显著的缩短压缩时间,提高工作效率。

丰富压缩级别选择:提供了从 1 到 22 的压缩级别选择,用户可根据实际需求在压缩速度和压缩率之间进行灵活权衡。压缩级别越高,压缩比率越大,但压缩速度会相应减慢;反之,压缩级别越低,压缩速度越快,但压缩比率会有所降低。

字典压缩模式:Zstandard 为小数据提供一种特殊的字典压缩模式。用户可通过提供一些样本数据来训练生成字典,然后在压缩和解压时加载该字典,从而在小数据上实现更高压缩率,这对于处理大量小文件场景非常有用。

使用模式:Zstandard 提供了多种命令模式,包括压缩、解压、查看压缩信息、测试压缩文件等等。

Zstandard 的安装

Debian/Ubuntu 系统的安装命令如下:

1
sudo apt install zstd

Fedora/Red Hat/CentOS/AlmaLinux 系统的安装命令如下:

1
sudo dnf install zstd

Arch Linux/Manjaro 系统的安装命令如下:

1
sudo pacman -S zstd

也可以从源码编译安装「这里以 1.5.7 版本为例」命令如下:

1
2
3
4
5
wget https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz
tar -zxvf zstd-1.5.7.tar.gz
cd zstd-1.5.7/
make
sudo make install

Zstandard 的使用

  1. 压缩文件

基础压缩:使用命令 zstd file_name 即可对文件进行压缩,压缩后会生成一个扩展名为.zst 的文件,如 zstd doc.txt,会生成 doc.txt.zst 文件。

指定压缩级别:可通过选项来指定压缩级别,例如 zstd -3 file_name 表示使用压缩级别-3 进行压缩。

  1. 解压文件

基础解压:使用 zstd -d archive_name.zst 即可对文件进行解压,解压后的文件会自动去除.zst 后缀。

指定解压后文件名:同样可使用-o 选项来指定解压后的文件名,如 zstd -d archive_name.zst -o new_file_name

  1. 压缩目录

压缩整个目录:可以使用 zstd -rz directory_name 来压缩整个目录,其中-r 表示递归压缩目录中所有文件和子目录,-z 表示压缩的操作。

解压目录:对于压缩后的目录文件,使用 zstd -dr archive_name.zst 进行解压缩,-d 表示解压缩操作,-r 表示递归解压缩。

  1. 查看压缩文件内容

使用 zstd -l archive_name.zst 可以查看压缩文件的相关信息,如压缩比、压缩级别、文件大小等等。

zstd -t archive_name.zst 则可用于测试压缩文件的完整性,确保文件在压缩和传输过程中未损坏。

使用 Python 脚本下载指定网页的图片文件

2025年3月31日 00:00

有小伙伴反馈说侧边栏随机图出现了重复,有些审美疲劳,要求杜老师再更新一些图片,正好聊天广场有小伙伴分享了一个美图的网址。本文分享如何使用 Python 脚本下载指定网页的图片文件,需要的小伙伴可以参考文中代码。

代码需求

使用 Python 的语言编写一个脚本,下载指定网址中包含的多种格式图片文件,如 JPG 和 PNG 格式图片。

将图片保存至指定的目录中,可以指定绝对路径,或者相对路径。

并用随机数重命名,防止同名图片触发覆盖事件。

尽可能使用 Python 的标准库,尽量避免使用第三方库。

变更解释

  1. 导入必要的库:包括 os/requests/re 以及 random

  2. 定义函数:download_images 函数可用于下载图片;

  3. 获取图片链接:使用正则表达式从网页内容中提取图片 URL;

  4. 下载保存图片:使用 requests 库下载图片,并且使用 random 库生成随机数作为文件名;

  5. 指定目录:确保保存目录存在,如果不存在则创建;

  6. 获取内容:使用 requests 库获取网页内容。

功能代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import os
import requests
import re
import random

def download_images(url, save_folder):
# 确保保存目录存在
if not os.path.exists(save_folder):
os.makedirs(save_folder)

# 发送HTTP请求获取网页内容
response = requests.get(url)
if response.status_code != 200:
print(f"Failed to retrieve the webpage. Status code: {response.status_code}")
return

# 使用正则表达式查找所有的图片URL
image_urls = re.findall(r'<img[^>]+src=["\'](.*?)["\']', response.text)

for img_url in image_urls:
# 处理相对路径的URL
if not img_url.startswith(('http://', 'https://')):
img_url = os.path.join(url, img_url)

# 下载图片
img_response = requests.get(img_url)
if img_response.status_code == 200:
# 生成随机文件名
random_filename = f"{random.randint(10000, 99999)}.jpg"
save_path = os.path.join(save_folder, random_filename)

# 保存图片
with open(save_path, 'wb') as f:
f.write(img_response.content)
print(f"Downloaded and saved {img_url} as {save_path}")
else:
print(f"Failed to download {img_url}. Status code: {img_response.status_code}")

# 读取网址列表文件
def read_urls_from_file(file_path):
with open(file_path, 'r') as file:
urls = file.readlines()
return [url.strip() for url in urls]

# 示例调用
if __name__ == "__main__":
urls_file = 'f:\\代码\\urls.txt' # 包含网址的文件路径
save_folder = 'f:\\代码\\images' # 保存图片的目录路径

urls = read_urls_from_file(urls_file)
for url in urls:
download_images(url, save_folder)

注意:本示例代码仅适用于 Python 3.x 版本,运行于 Windows 系统。如使用 Linux 系统,可能需要进行相应修改。

使用说明

将上述的代码保存为 download_images.py 文件。

在运行脚本时,传入目标网页的 URL 和保存图片的目录路径。

脚本会自动下载网页中所有图片,并且以随机数命名保存到指定目录中。

打开的网址保存在一个文件,每行一个网址。

X Window 与 Wayland 的深度对比

2025年3月28日 00:00

X Window 与 Wayland 不仅代表了图形界面技术不同发展阶段,更体现了设计理念、架构模式及应用场景的显著差异。本文将从历史背景、技术特点、应用场景及未来展望等多个维度,对 X Window 和 Wayland 进行深入剖析。

历史背景演变

X11 诞生于 1984 年,由麻省理工学院 MIT 开发,旨在满足分布式计算环境下图形界面需求。其设计哲学强调网络透明性,允许用户在远程服务器运行应用程序,并在本地终端显示结果,极大地拓展 GUI 的可用性和灵活性。随着时间推移,X11 凭借其广泛的硬件和软件支持,逐渐成为 Linux 桌面环境的标准图形界面后端。

随着计算需求增长,X11 的一些设计局限逐渐显现,例如架构复杂、性能瓶颈和安全性问题。2008 年,Kristian 提出 Wayland 项目,旨在创建一个更加现代、高效窗口系统。Wayland 的设计重点在于简化架构、提高性能和增强安全性,采用客户端 Compositor 通信模型,减少了中间层,提升了效率和响应速度。

技术特点比较

X11 采用 C/S 模型,客户端通过 X 协议与服务器通信,而 X 服务器负责处理所有图形和输入事件。相比之下,Wayland 采用了客户端 Compositor 模型,客户端可直接与 Compositor 通信,Compositor 负责了窗口管理、合成、输出。Wayland 的架构更加贴合现代图形硬件特性,可以更高效地利用 GPU 和现代显示技术。

X11 在安全性方面存在了固有弱点,其复杂协议和广泛权限易被恶意利用。Wayland 通过限制客户端权限以及简化通信模型,显著提高了安全性。例如,Wayland 禁止了应用程序直接访问底层硬件,只允许了它们与 Compositor 通信,从而增强系统的安全性。

Wayland 的协议设计更加高效,减少了延迟和带宽消耗。在移动设备和资源受限的环境中,Wayland 的优势尤为明显。此外,Wayland 避免了不必要的复杂性和额外处理,使得其在性能上优于 X11。尤其是在窗口大小调整以及拖动等操作中,Wayland 显得更加的平滑流畅。

X11 拥有庞大的生态系统,支持大量的应用程序和工具,几乎所有 Linux 发行版默认都使用 X11。然而,Wayland 的生态系统正在快速发展,主要桌面环境如 GNOME 和 KDE 已全面支持 Wayland。尽管如此,一些特定应用程序和工具可能仍需要额外的兼容层或补丁才能在 Wayland 下运行。

应用场景

在桌面环境中,X11 凭借其广泛的兼容性和成熟度,仍然是许多用户的首选。但随着硬件技术的进步和用户对高性能图形渲染的需求增加,Wayland 正在逐渐成为主流的选择。

越来越多的 Linux 发行版开始默认支持 Wayland,例如 Fedora 和 Ubuntu 等。

在移动设备和嵌入式系统中,资源受限是一个普遍的问题。Wayland 的低功耗以及高性能特性使其成为这些场景下的理想选择。

例如,Android 系统中的 SurfaceFlinger 就是基于 Wayland 的原理设计,用于图形显示以及窗口管理。

在虚拟化和云计算的环境中,图形性能以及网络传输效率至关重要。

虽然 X11 的网络透明性在某些场景下仍有些优势,但 Wayland 通过优化的协议和架构,正在成为虚拟桌面基础设施 VDI 和云桌面解决方案的首选,特别在需要高性能图形渲染的场景中。

未来展望

随着 GPU 技术的成熟以及高性能计算需求的增长,图形界面的渲染以及交互将变得更加复杂和多样化。

X11 和 Wayland 都在积极的探索与 Direct Rendering Manager、Mesa 等图形驱动框架的更紧密集成,以实现更高效的图形渲染和硬件加速。

此外,Wayland 还在研究如何更好地支持多显示器配置、高分辨率显示、触控输入,以满足未来计算环境多样化需求。

最后说两句题外话,近一个月杜老师因为工作的原因,拖更了很多篇文章,感谢小伙伴们的关注和催更,近期会大批量发表一些技术文章,欢迎大家关注。

OpenResty 的性能优化配置建议

2025年3月25日 00:00

1Panel 的用户越来越多,内置 Web 服务 OpenResty 使用占比也在增加,但网上对其优化的教程很少。应关关童靴的需求,更新一篇有关 OpenResty 的一些优化建议。可优化设置项较少,需要的小伙伴可以根据实际需求变更配置。

server_names_hash_bucket_size 参数项

含义:该参数用于设置服务器名字 hash 表大小,若名字过长或服务较多,保持默认值可能使 hash 表空间不足,引发错误。

优化建议:一般为 server_names_hash_max_size 的 1/2-1/3 左右,如服务器配置较高,可直接设置 256

gzip 参数项

gzip_min_length 参数项:对小文件压缩可能得不偿失,一般设置为 1k10k 左右,小于该值的文件不压缩。

gzip_comp_level 参数项:压缩级别,1 为最小最快,9 为最大最慢,通常建议设置为 4-6,以平衡压缩效果和 CPU 使用率。

client_header_buffer_size 参数项

含义:用于设置读取客户端请求头的缓冲区大小,若请求头过大,可能超出默认值导致客户端报错。

优化建议:根据实际业务需求调整,如业务请求头通常较大,可设为 32k 左右,确保可以完整读取大部分请求头。

client_max_body_size 参数项

含义:限制客户端请求主体的最大允许大小,超出该值请求将被拒绝。

优化建议:根据业务场景和服务器承受能力设置,如普通表单提交可设置为 10m-20m 左右,对于文件上传等大请求可以适当增大。

keepalive_timeout 参数项

含义:设置长连接的超时时间,即客户端与服务器间连接保持空闲的最大时间。

优化建议:一般设为 60-90 秒左右,时间过短会频繁断开连接且增加开销,过长则可能占用过多的资源。

优化后的配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
http {
# gzip相关配置
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/json;
gzip_vary on;
gzip_proxied any;
gzip_disable "msie6";

# 服务器名字hash表大小
server_names_hash_bucket_size 128;

# 客户端请求头缓冲区大小
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

# 客户端请求主体最大允许大小
client_max_body_size 32m;

# 长连接超时时间
keepalive_timeout 60;

# 其他配置...
}

注意:以上配置仅供参考,具体优化需根据实际业务场景和硬件配置进行调优。

Nginx 从配置到缓存的性能优化

2025年3月22日 00:00

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,广泛应用于处理高并发请求。然而,默认配置并不一定适合所有场景,尤其是在高流量或复杂业务逻辑的情况下。本文将介绍一些 Nginx 的基础配置优化和缓存的使用方法以提升 Nginx 的性能。

基础配置优化

  1. 调整 worker_processes 以及 worker_connections

Nginx 使用多进程模型处理请求。worker_processes 定义 Nginx 使用的工作进程数,而 worker_connections 定义每个工作进程可以处理的最大连接数:

1
2
3
4
worker_processes auto;
events {
worker_connections 1024;
}

参数作用如下:

参数作用
worker_processes设置为 auto 可以让 Nginx 自动根据 CPU 核心数来分配工作进程数。如服务器有 4 个 CPU 核心,Nginx 会启动 4 个工作进程。
worker_connections这个值决定了每个工作进程可以处理的最大连接数。通常,可根据服务器的内存和网络带宽来调整这个值。1024 是一个常见起点,可以调整到 2048。
  1. 启用 keepalive 长连接

HTTP 协议中的 keepalive 机制允许客户端和服务器在同一个连接上发送多个请求,减少了 TCP 连接的建立和关闭开销:

1
2
3
4
http {
keepalive_timeout 65;
keepalive_requests 100;
}

参数作用如下:

参数作用
keepalive_timeout定义客户端与服务器保持连接的时间。设置为 65 秒意味着如果客户端在 65 秒内没有发送新请求,连接将被关闭。
keepalive_requests定义了单个连接上允许的最大请求数。设置为 100 意味着一个连接可以处理 100 个请求后关闭。
  1. 调整 buffer 的大小

Nginx 使用缓冲区来存储请求和响应数据。如缓冲区设置过小,Nginx 可能会频繁地进行磁盘 I/O 操作,影响性能:

1
2
3
4
5
http {
client_body_buffer_size 10K;
client_header_buffer_size 1k;
large_client_header_buffers 48k;
}

参数作用如下:

参数作用
client_body_buffer_size定义用于存储客户端请求体的缓冲区大小。如请求体超过这个大小,会将数据写入磁盘。
client_header_buffer_size定义用于存储客户端请求头的缓冲区大小。
large_client_header_buffers定义用于存储大型请求头的缓冲区数量和大小。

缓存提升性能

  1. 启动静态资源缓存

对于静态资源,启用缓存可以显著减少服务器的负载:

1
2
3
4
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}

参数作用如下:

参数作用
expires定义了资源的缓存时间。30d 表示资源将缓存 30 天。
Cache-Controlpublic 表示资源可以被任何缓存「如浏览器、CDN等」缓存,no-transform 表示不允许代理服务器对资源进行转换「如压缩等」
  1. 使用代理缓存

如使用 Nginx 作为反向代理,可启用代理缓存来缓存后端服务器的响应:

1
2
3
4
5
6
7
8
9
10
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}

参数作用如下:

参数作用
proxy_cache_path定义了缓存存储的路径、缓存键的存储区域、缓存的最大大小及缓存的有效期。
proxy_cache启用缓存并使用指定的缓存区域。
proxy_cache_valid定义不同状态码的缓存时间。
  1. 使用 gzip 压缩减少网络传输量

gzip 压缩可以显著减少传输数据量,从而加快页面加载速度:

1
2
3
4
5
6
7
8
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
}

参数作用如下:

参数作用
gzip启用压缩。
gzip_types定义了需要压缩的文件类型。通常包括文本文件、CSS/JavaScript/XML 等。
gzip_comp_level定义压缩级别,范围是 1 到 9。1 是最低的压缩率,9 是最高的压缩率。默认值 6
gzip_min_length定义最小压缩文件大小。小于这个大小的文件不会被压缩。
gzip_proxied定义了是否对代理请求启用压缩。any 表示对所有代理请求启用压缩。
gzip_vary添加响应,确保代理服务器能正确处理缓存。

HTTP/2 与速率限制

  1. 使用 HTTP/2 版协议

HTTP/2 提供了多路复用、头部压缩特性,可以显著提升性能:

1
2
3
4
5
server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}

参数作用如下:

参数作用
http2listen 指令中添加 http2 参数即可启用。
  1. 限制请求速率

为了防止恶意请求或突发流量导致服务器过载,可使用 limit_req 模块限制请求速率:

1
2
3
4
5
6
7
8
9
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location / {
limit_req zone=one burst=5;
}
}
}

参数作用如下:

参数作用
limit_req_zone定义限流区域。$binary_remote_addr 表示根据客户端的 IP 地址进行限流,rate=1r/s 表每秒允许 1 个请求。
limit_req在指定的位置应用限流。burst=5 表允许突发 5 个请求。

LB 和日志优化

  1. 负载均衡
1
2
3
4
5
6
7
8
9
10
upstream backend {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
}

server {
location / {
proxy_pass http://backend;
}
}

注意:通过 upstream 模块可以将请求分发到多个后端服务器,提高并发处理能力。

  1. 日志优化
1
2
access_log /var/log/nginx/access.log main buffer=16k;
error_log /var/log/nginx/error.log warn;

注意:调整日志级别可减少日志输出量,提升性能。这表示将访问日志的缓冲区大小设置为 16KB,并将错误日志级别设置为 warn

1Panel 全新移动 APP 上线

2025年3月19日 00:00

1Panel 作为新一代的服务器管理面板,为 Linux 服务器运维提供了一个舒适便捷的 Web 图形界面。为了方便移动办公,1Panel 推出了 APP 移动端,目前还在测试阶段,不过足以满足大多数用户的需求。

功能满足多样需求

1Panel APP 拥有丰富且实用功能特性,涵盖服务器管理的多个重要方面。它支持 Android 和 iOS 系统,确保不同设备用户都能享受到一致的服务体验。用户可以方便地添加多个 1Panel 服务,实现对多台服务器集中管理:

首页全局概览表盘,以直观的方式展示服务器的关键信息,让用户一眼就能了解服务器整体运行状况:

应用管理方面,1Panel APP 表现得十分出色。用户不仅能够查看已安装的应用,还能轻松进行安装、配置、管理操作,极大地简化了应用部署和维护的流程:

对于网站管理,它提供专业的工具,方便用户对网站进行创建和编辑、删除操作,同时支持域名绑定和 SSL 证书配置,确保网站的安全性和稳定性:

Docker 容器管理是 1Panel APP 的一大亮点。用户可以方便创建、启动、停止、删除容器,还可以对容器的资源进行合理分配和监控,满足了开发者和运维人员在容器化部署方面的需求:

服务器状态监控功能则让用户实时掌握 CPU、内存、磁盘等资源的使用情况,及时发现潜在性能瓶颈,为服务器优化提供有力依据:

获取使用资格方式

目前 1Panel APP 正式版仅支持专业版用户使用,可以通过各大厂家应用商店安装手机端 APP。

如果还不是 1Panel 专业版用户,又感觉官方的价格太贵,欢迎选择《1Panel 专业版低价租用》数量有限,先到先得!

解释器权限不够的处理思路

2025年3月16日 00:00

当我们在使用 Linux 系统进行开发或者运维工作时,经常遇到一些错误提示。其中一个常见错误是解释器权限不够。这个错误提示表明在运行 targetcli 命令,系统没有足够权限来执行所需的 Python 解释器。在本文中,我们将探讨这个错误原因和解决方法。

错误原因

为理解这个错误的原因,我们需要先了解下 Linux 系统的权限管理机制。

Linux 系统将用户和组织分为不同的分类,并为每个用户和组织分配不同的权限。这些权限决定用户可以访问和执行哪些文件和目录。

在这个特定错误中,我们看到了一个错误路径/usr/bin/targetcli 和错误消息/usr/bin/python3:解释器错误:权限不够

系统无法在路径/usr/bin/targetcli 下找到所需的 Python 解释器,且没有足够的权限来执行它。

解决方法

  1. 确定缺少的解释器

首先,我们需确定缺少的 Python 解释器。

在错误消息中,我们看到了/usr/bin/targetcli/usr/bin/python3 两个路径。这告诉我们 targetcli 命令需要 python3 来执行。

  1. 确定解释器的位置

接下来我们需要确定 python3 解释器的实际位置。我们可以使用 which 命令来找到解释器的路径。

可在终端中运行命令 which python3。命令的输出将告诉我们 python3 解释器位置。比如,输出可能是/usr/local/bin/python3

  1. 修改 python3 解释器路径

一旦我们找到了 python3 解释器的位置,我们可以通过修改 targetcli 脚本来更新解释器的路径。

打开终端并输入命令 sudo vi /usr/bin/targetcli。这将使用编辑器打开 targetcli 脚本。

在脚本中,我们需要查找#!/usr/bin/python3 这一行,并将其替换为 python3 解释器实际路径。

在这个例子中,我们可以将其替换为#!/usr/bin/python3

  1. 更改脚本权限

最后,我们需要为 targetcli 脚本提供执行权限。

可在终端中运行命令 sudo chmod +x /usr/bin/targetcli。如果一切顺利,我们应该不再看到错误消息。

dynv6 免费二级域名申请及管理

2025年3月13日 00:00

自飞牛 OS 支持虚拟机后,很多使用飞牛的小伙伴会询问杜老师有关 DDNS 的问题。希望可以白嫖一个二级域名,支持 API 变更解析值,且支持 IPv6 解析。恰好杜老师发现了一个网站,支持多后缀的二级域名白嫖,这里分享给需要的小伙伴们!

什么是 dynv6

dynv6 是一款免费的动态 DNS 服务,其专为 IPv6 设计。

它允许用户将公共主机名轻松分配给私有主机,从而实现对私有主机的远程访问。

dynv6 对所有用户免费开放。可以选择一个免费的主机名开始使用,或者将自己的域名委托给 dynv6。

然而,需要注意的是,dynv6 目前并不提供企业级的 DDoS 防护和 SLA。因此,dynv6 适合用于非关键服务。

强大的 API 支持

dynv6 提供多种方式来更新区域,满足不同用户需求。

其中包括 REST API 和 SSH 以及 DNS 更新。这些 API 的存在,使得 dynv6 的使用更加灵活、方便。

无论是开发者还是普通用户,都可以根据自己的需求选择合适的 API 来更新 DNS 记录。

此外,dynv6 支持 Webhooks 功能。当 IP 地址发生变化时 Webhooks 可以用来更新外部服务。

官网地址

dynv6 的官网地址如下:

使用截图

打开上面的官网后,点击右上角 Sign up 进行账号注册:

完成账号登录后会自动登录,也可通过右上角 Sign in 进行登录。点击 Create new Zone 可白嫖免费二级域名:

点击下拉框后,可以看到有多个后缀可选择,同时填写 IPv4 或者 IPv6 地址:

若想托管顶级域名,可以点击导航栏 My Domains:

使用 Docker 部署 tinyMediaManager 刮削工具

2025年3月10日 00:00

杜老师使用 Emby 管理媒体文件,但刮削时经常报错。tinyMediaManager 是款功能强大的开源媒体管理工具,能够帮助轻松整理和管理媒体库。本文将详细介绍 tinyMediaManager 的搭建过程和基本使用方法。

什么是 tinyMediaManager

tinyMediaManager 简称 TMM 是一款用 Java/Swing 编写的媒体管理工具,能够为 Jellyfin、Emby 等媒体服务器提供元数据。

通过 TMM 可以抓取和整理影片详细信息、封面图像、演员列表、导演信息等元数据,让媒体库更加丰富、完整。

搭建准备

准备好想要管理的电影、电视剧等媒体文件,并将其存放在一个固定的目录中,方便 TMM 进行扫描和管理。

我们假设电影文件放入</path/to/movies>目录中,命令可参考 mkdir </path/to/movies>

电视文件放入</path/to/tv_shows/>目录中,命令可参考 mkdir </path/to/tv_shows/>

新建数据文件夹</path/to/local/data/>,命令可参考 mkdir </path/to/local/data/>

部署安装

这里我们使用 Docker 来部署,docker-compose.yml 的参考内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
---
version: "2.1"
services:
tinymediamanager:
image: tinymediamanager/tinymediamanager:latest
container_name: tinymediamanager
environment:
- USER_ID=1000
- GROUP_ID=100
- ALLOW_DIRECT_VNC=true
- LC_ALL=en_US.UTF-8 # force UTF8
- LANG=en_US.UTF-8 # force UTF8
- PASSWORD=<password>
- TZ=Asia/Shanghai
volumes:
- </path/to/local/data/>:/data
- </path/to/movies>:/media/movies
- </path/to/tv_shows/>:/media/tv_shows
ports:
- 5900:5900 # VNC port
- 4000:4000 # Webinterface
restart: unless-stopped

将上方代码中<password>改为 TMM 访问密码,配置好后执行如下命令即可:

1
docker-compose up -d

基本使用

第一次启动时,会进入 TMM 设置向导。需要选择媒体类型、设置媒体目录路径、选择元数据来源等。按照向导提示逐步完成设置即可:

设置完成后 TMM 会自动扫描指定的媒体目录,识别其中媒体文件,并尝试从在线数据库中获取相应的元数据:

TMM 会根据文件标题到电影资料网站上匹配电影信息,下载电影资料及图片到本地。可以查看和编辑这些元数据,确保信息的准确性和完整性:

TMM 还可按照一定的规则批量重命名和整理媒体文件,使文件名称更加规范和统一,方便管理、查找:

RSSHub 搭建指南打造个性化资讯中心

2025年3月7日 00:00

RSSHub 可以根据我们的需求生成个性化的 RSS 订阅源,让我们轻松地获取到各种平台的最新资讯。本文将详细介绍 RSSHub 搭建过程,快速搭建起属于自己的资讯中心。

RSSHub 的简介

RSSHub 是一个轻量、易于扩展 RSS 生成器,它基于 Node.js 开发,支持多种平台和类型订阅源,包括但不限于微博、知乎、B 站、GitHub 等。

通过简单的配置和路由规则,我们就能生成自己想要的 RSS 订阅链接,随时随地获取最新内容更新。

搭建前的准备

在开始搭建 RSSHub 之前,我们需做一些准备工作。需一台服务器,可以是云主机,也可以是本地的计算机。服务器需要具备公网 IP 地址,以便我们能够从外部访问搭建好的 RSSHub 服务。

RSSHub 基于 Docker 部署,因此需要在服务器上安装 Docker 环境。

RSSHub 支持缓存中间件,如 Redis。

为方便访问和使用,建议注册一个域名,并将其解析到服务器的 IP 地址上。

RSSHub 的搭建步骤

将下面的内容保存为 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
services:
rsshub:
# two ways to enable puppeteer:
# * comment out marked lines, then use this image instead: diygod/rsshub:chromium-bundled
# * (consumes more disk space and memory) leave everything unchanged
image: diygod/rsshub
restart: always
ports:
- "1200:1200"
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: "redis://redis:6379/"
PUPPETEER_WS_ENDPOINT: "ws://browserless:3000" # marked
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
interval: 30s
timeout: 10s
retries: 3
depends_on:
- redis
- browserless # marked

browserless: # marked
image: browserless/chrome # marked
restart: always # marked
ulimits: # marked
core: # marked
hard: 0 # marked
soft: 0 # marked
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/pressure"]
interval: 30s
timeout: 10s
retries: 3

redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 5s

volumes:
redis-data:

使用下面命令来启动 RSSHub 服务:

1
docker-compose up -d

如需拉取新版 RSSHub 的镜像,可使用下面的命令:

1
docker-compose pull

如需停止服务,可使用下面的命令:

1
docker-compose down

如果不喜欢使用 Docker Compose 部署,可使用下面的命令运行有 Puppeteer 依赖的 RSSHub 服务:

1
docker run -d --name rsshub -p 1200:1200 diygod/rsshub:chromium-bundled

可使用下面的命令运行无 Puppeteer 依赖的 RSSHub 服务:

1
docker run -d --name rsshub -p 1200:1200 diygod/rsshub

为 Follow 添加实例

如果使用 Follow 调用 RSSHub 示例,需在 docker-compose.yml 中添加一些变量。其中 FOLLOW_OWNER_USER_ID 是指您的关注账户 ID 或用户名;FOLLOW_DESCRIPTION 指实例描述;FOLLOW_PRICE 指实例月费,如设为 0 表示免费;FOLLOW_USER_LIMIT 指实例用户限制,将其设置为 0 或 1 可将实例设为私有,留空则表示无限制;ACCESS_KEY 指访问密钥:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
rsshub:
image: diygod/rsshub:chromium-bundled
restart: always
ports:
- "1200:1200"
environment:
NODE_ENV: production
FOLLOW_OWNER_USER_ID=杜老师说
FOLLOW_DESCRIPTION=大带宽境外服务器
FOLLOW_PRICE=1
FOLLOW_USER_LIMIT=1000
ACCESS_KEY=ubzG7H3t9TJaFp
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:1200/healthz"]
interval: 30s
timeout: 10s
retries: 3

登录 Follow 后,点击头像,选择 RSSHub 项。在显示页面中,点添加新实例。依次输入 RSSHub 的地址,访问密钥,最后点击添加即可:

加密 NFS 搭建保障数据传输与存储安全

2025年3月4日 00:00

在现代企业环境中,数据的安全性至关重要。NFS 作为一种广泛使用的文件共享协议,其数据在传输和存储过程中若是缺乏加密保护,将面临被窃取或篡改的风险。本文将详细介绍加密 NFS 搭建过程。

NFS 的简介

NFS 是允许用户通过网络访问远程文件系统,就像访问本地文件系统一样方便。

它支持跨平台文件共享,广泛应用于 Linux 和 Unix 系统。

然而,传统的 NFS 传输数据时以明文形式在网络中传输,很容易受到中间人攻击和数据泄露的威胁。

在 NFS 的基础上,我们可以使用加密技术来保护数据传输和存储。

加密 NFS 必要性

随着数据安全法规的日益严格和企业对数据保护的重视,对 NFS 进行加密变得必不可少。

在企业中,NFS 的加密功能可以提供数据传输和存储的安全保障。

加密 NFS 可有效防止数据在传输过程中被窃取或篡改,确保数据的完整性和机密性。

同时,它也可以满足企业对数据安全合规的要求,为企业的数据资产提供更可靠的保护。

搭建加密 NFS 的步骤

在 NFS 服务器安装支持加密的 NFS 软件包。例如,在基于 Debian 的系统上,可以使用下面命令进行安装:

1
sudo apt -y install nfs-kernel-server

使用下面的命令编辑 NFS 配置文件,添加加密相关选项。例如,可使用 sec = krb5isec = krb5p 选项来启用 Kerberos 加密。其中,krb5i 提供数据完整性保护,而 krb5p 则同时提供了数据加密和完整性保护:

1
sudo vim /etc/exports

在配置文件中指定要共享的目录及其访问权限。这表示允许客户端 IP 以读写模式访问共享目录,并启用 Kerberos 加密。例如:

1
/path/to/shared/directory client_ip(rw,sync,no_subtree_check,sec=krb5i)

完成配置后重启 NFS 服务。可以使用下面命令重启服务:

1
sudo systemctl restart nfs-kernel-server

使用下面的命令使配置文件生效:

1
exports -rv

在需访问加密 NFS 共享的客户端上安装 NFS 客户端软件。例如,在基于 Debian 的系统上,可以使用下面命令进行安装:

1
sudo apt -y install nfs-common

使用挂载命令将加密的 NFS 共享挂载到本地目录。这将把服务器上的共享目录挂载到客户端本地目录,并启用 Kerberos 加密。例如:

1
sudo mount -t nfs4 -o sec=krb5i server_ip:/path/to/shared/directory /local/mount/point

使用下面命令查看挂载文件系统,确保加密 NFS 共享已成功挂载:

1
df -h 

加密 NFS 优势与注意事项

加密 NFS 有多种优势,例如数据加密传输、身份认证和数据完整性保护等等。

它能够有效防止数据泄露和篡改,提高数据的安全性。

然而,在搭建加密 NFS 时也需要注意一些事项。

首先,加密过程可能会增加系统的性能开销,因此需根据实际需求进行性能评估和优化。

其次,配置过程较为复杂,需仔细检查配置文件和参数设置,确保正确无误。

此外,还需要定期更新加密软件和认证机制,以应对不断变化的安全威胁。

去不图床数据清理通知

2025年3月1日 00:00

近期发现外链流量激增,经分析了解并非是攻击导致,通过 URL 判断其来源是一些匿名及到期用户所上传的图片。因此决定发文公告:清理去不图床所有匿名用户所上传的图片,并周期检查已到期用户。

免费服务的初心与挑战

2019 年,去不图床怀着为各位小伙伴提供免费、便捷图片托管服务赤子之心,正式上线!

那会儿杜老师的目标就是给大伙儿搭个稳定可靠的平台,让大家轻轻松松的分享图片,舒舒服服存储图片。

这服务的确是受到了大家的一致好评,用户数量跟图片上传量,那叫一个节节攀升,直冲云霄!

可是好景不长,随着用户规模像滚雪球一样越滚越大,这流量成本也成了杜老师心头一块大石头。

图片托管需要海量的带宽和存储空间,这费用那是哗哗地往外流啊!

杜老师也是一直在绞尽脑汁优化成本,可那流量费用,像脱缰的野马,一发不可收拾,最终,在 2021 年不得不调整策略,从免费转向了收费,这都是为了咱这平台能继续坚挺地活下去!

流量成本与运营的压力

虽然 2021 年去不图床改成收费模式,但之前游客用户免费上传的图片,一直没有清理。

这些图片,虽然丰富了平台的内容,但是占用的存储空间和流量资源,那也是相当可观啊!

据统计游客上传的图片数量,那简直是天文数字,而且很多图片访问频率低得可怜,却依然霸占着咱宝贵的存储资源!

随着平台业务蒸蒸日上,对流量成本的控制也越来越严格。

现在运营环境,杜老师得精打细算,合理分配资源,保证已兑换容量的小伙伴能享受到更优质、更稳定的服务。

所以,经过一番深思熟虑,杜老师决定对游客用户的图片进行清理啦!

匿名用户上传图片清理

为了降低流量以及存储损耗,优化资源分配,杜老师将于 2025 年 3 月 1 日起,清理所有游客用户上传图片。

这个决定,杜老师也是万般的无奈,但这是目前运营环境下,必须采取的措施啊!

希望各位游客用户能够理解杜老师的苦衷,赶紧备份需要保存的图片吧!如有疑问,欢迎随时在评论区留言!

游客数据保留至本月中「2025 年 3 月 15 日」因为无法进行用户判定,所以杜老师已经整体打包备份了,需要的小伙伴可留言索要图片压缩包。

到期用户上传图片清理

为了进一步降低流量及存储损耗,优化资源分配,杜老师将于 2025 年 3 月 15 日起,清理所有到期用户上传图片。

已到期的用户数据清理规则如下:当月 15 日之前到期用户,数据保留至当月的最后一天;当月 15 日之后到期用户,数据保留至下个月月中。

数据清理之前,杜老师都会邮件通知用户进行再续费,通知七天后未续费则会清理数据「即当月 15 日之前到期的用户,会在当月 23 日发送通知;当月 15 日之后到期用户,会在次月 8 日发送通知」

注意图片清理是多节点同步执行,不会保留备份数据!最终解释权归去不图床所有。

使用 Python 脚本验证指定目录的图片文件

2025年2月26日 00:00

有小伙伴说杜老师说侧边栏随机图片素材太少,翻来覆去只有那么几张。为了充实随机图片,杜老师采集了一个图片网站。奈何能力有限,某些图片采集失败,保存为空文件,所以需要编写一个脚本,来验证图片是否为正常。

代码需求

使用 Python 语言编写一个小项目,需要遍历指定目录下所有子目录「子目录名称为中文」

验证子目录下的图片文件是否能正常打开,如果能则跳过,如果无法正常打开则返回其路径。

变更解释

  1. 使用 os 模块来遍历目录和子目录;

  2. 使用 PIL 库来验证图片文件是否能正常打开。

注意事项

请确保安装了 Pillow 库,可以使用下面的命令来安装:

1
pip install pillow

root_directory 变量设置为需要遍历的目录路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import os
from PIL import Image

def validate_images_in_directory(root_dir):
invalid_image_paths = []

for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
file_path = os.path.join(dirpath, filename)
try:
with Image.open(file_path) as img:
img.verify() # 尝试验证图片文件
except (IOError, SyntaxError) as e:
invalid_image_paths.append(file_path)

return invalid_image_paths

if __name__ == "__main__":
root_directory = '指定目录路径' # 替换为实际的目录路径
invalid_images = validate_images_in_directory(root_directory)

if invalid_images:
print("无法打开的图片文件路径:")
for path in invalid_images:
print(path)
else:
print("所有图片文件都能正常打开。")

执行代码

1
python3 images.py

注意:将上面的代码保存为 images.py 文件,然后在命令行中执行上面的命令。

探索 Linux 内存占用找出最吃内存的进程

2025年2月23日 00:00

无论是服务器还是个人电脑,了解哪些进程占用了最多的内存,对于系统管理员和普通用户来说至关重要。不仅可以帮助我们优化系统性能,还能避免因内存不足而导致系统崩溃。本文将介绍如何在 Linux 系统中统计内存占用最多的前 10 个进程。

为什么要统计内存占用

多任务操作系统中,内存是有限的资源。

当多个进程同时运行时,它们会争夺有限的内存空间。

如果某些进程占用内存过多,可能导致系统响应变慢,甚至出现内存不足错误。

因此,定期检查内存占用情况,找出占用最多进程,可以帮助我们更好管理资源,优化系统性能。

使用命令工具统计内存占用

使用 pssort 的命令组合:

1
ps -eo pid,comm,%mem --sort=-%mem | head -n 11

解释:

参数作用
ps -eo pid,comm,%mem列出所有进程的 PID、进程名称和内存占用百分比。
–sort=-%mem按内存占用百分比降序排序。
head -n 11显示前 11 行的内容「第一行是标题,接下来是前 10 个进程的信息」

虽然 top 命令主要用于实时的监控系统资源,但也可通过以下方式快速查看内存占用最多的进程:

1
top -o %MEM -b -n 1 | head -n 18

解释:

参数作用
-o %MEM按照内存占用排序。
-b以批处理模式运行,输出到终端上。
-n 1只需运行一次。
head -n 18过滤出前 18 行「因为 top 输出的前几行是系统信息,实际进程从第 8 行开始」

如果需要更详细的内存占用信息,可结合 pmap 命令:

1
ps -eo pid,%mem,comm --sort=-%mem | head -n 11 | awk '{print $1}' | xargs -I {} pmap {} | grep total

解释:

参数作用
ps -eo pid,%mem,comm –sort=-%mem获取内存占用最高的进程 PID。
awk ‘{print $1}’提取 PID 进程号。
xargs -I {} pmap {}获取每个进程详细内存映射信息。
grep total过滤 total 行,显示每个进程的总内存占用情况。

如果系统安装了 smem 工具,可以更直观地查看内存占用:

1
smem -s rss -c "pid user command rss" --sort=rss | head -n 11

解释:

参数作用
-s rss按 RSS 排序。
-c “pid user command rss”指定显示的列。
–sort=rss按 RSS 排序。
head -n 11显示前 11 行的内容。

如何分析内存占用情况

确认进程是否必要。有些进程可能是系统正常运行所必需,例如 systemd 等。这些进程通常不会占用过多内存。然而,如果某些进程是用户启动的,如某个应用程序或脚本,需确认它们是否在正常运行。

检查进程是否内存泄漏。如某个进程的内存占用持续增加,可能是内存泄漏导致的。内存泄漏是指程序在申请内存后,无法正确释放已分配的内存,导致内存占用不断增加。这种情况下需要检查程序的代码,查找可能导致内存泄漏地方。

限制进程内存使用。如果某个进程占用过多内存,但又不能轻易终止,可以尝试限制它的内存使用。

Linux 提供 ulimit 命令,可设置进程的资源限制。例如,限制某个进程的最大内存使用量为 1GB,可使用命令 ulimit -m 1048576

内存管理其它技巧

除了统计内存占用最多进程,还可通过以下方式优化 Linux 系统的内存管理。

调整交换空间。交换空间是磁盘上的一部分空间,当物理内存不足时,系统会将一些不常用的内存页面移到交换空间。虽然使用交换空间可以避免系统崩溃,但磁盘速度远慢于内存,因此过多地使用交换空间会导致系统性能下降。

可以通过命令 swapon --show 查看交换空间的使用情况。如果交换空间使用过多,可以考虑增加物理内存,或者调整交换空间大小。

使用内存清理工具。Linux 系统会自动管理内存分配、回收,但有时也可以手动清理内存。

例如,可以使用 sync 命令将缓存数据写入磁盘,然后用 echo 3 > /proc/sys/vm/drop_caches 命令清理缓存。

但请注意,这种方法可能会对系统性能产生一定影响,因此需要谨慎使用。

使用 SlimToolkit 打造更小的容器镜像

2025年2月20日 00:00

现在容器技术很火,镜像又肥又大,部署较慢不说,安全风险还蹭蹭往上窜,简直让人头大!SlimToolkit 就像一位经验老道的镜像瘦身大师,能把镜像体积缩小到令人咋舌的程度,最多能瘦 30 倍!

到底是啥

简单来说,SlimToolkit 就是一个开源的镜像减肥专家,它能智能分析镜像,找出那些又大又没用的文件、库和依赖,然后干净利落地咔嚓下,统统删掉!

就像一位技艺精湛的雕塑家,将冗余的部分精雕细琢,留下最精髓的部分。

之前叫 DockerSlim,现在已经是云原生计算基金会沙盒项目了,实力是杠杠的!

它的核心思想就是原封不动优化,通过动态、静态分析,自动识别并移除镜像里垃圾文件。

支持 Docker 以及 Kubernetes,各种类云原生工具,妥妥全能选手!

不只瘦身,还可以提供命令行工具,方便检查、调试、管理镜像,简直贴心到家!

SlimToolkit 的绝活

  1. 镜像瘦身大法:这是它的看家本领!它能像一位经验丰富的裁缝,精准剪裁镜像,去除冗余部分。如一个基于 Ubuntu 的 Python 应用,原本约 438MB,经过它的一通操作,能瘦到 16.8MB,足足瘦了 26 倍!

  2. 安全防护专家:它不仅能瘦身,还可以增强安全性!它可以自动生成 Seccomp 和 AppArmor 安全配置文件,像给容器穿上了一层坚不可摧的盔甲,限制系统调用,防止各种安全漏洞入侵。再也不用担心容器被黑客攻破了!

  3. 动态分析、调试:它就像一位经验丰富的侦探,可以创建一个临时容器模拟运行环境,通过 HTTP 探针等方式收集运行数据,分析应用程序行为,确保瘦身后的镜像依然可以正常工作。而且,它还提供调试工具,在优化后的容器中运行调试命令,排查问题方便!

  4. 无缝集成:它就像一位老练的管家,能无缝集成到开发和部署流程中。不用改动 Dockerfile 或构建工具,只需在构建过程中添加 SlimToolkit 的优化步骤即可。还支持各种 CI/CD 工具,如 Jenkins、GitHub Actions 等,自动化部署 so easy!

上手玩转

先安装 SlimToolkit。SlimToolkit 提供了多种安装方式,含直接下载二进制文件、使用脚本安装或通过 Docker 运行。对于大多数的用户,使用脚本安装是最简单方式:

1
curl -sL https://raw.githubusercontent.com/slimtoolkit/slim/master/scripts/install-slim.sh | sudo -E bash -

优化容器镜像。假设已经有一个 Docker 镜像,如一个基于 Python 的 Web 应用。可使用以下命令对镜像进行优化:

1
slim build my/sample-python-app

SlimToolkit 会自动创建一个临时容器,运行动态分析,并生成优化后镜像。优化后的镜像名称会自动加上.slim 后缀,例如:

1
my/sample-python-app.slim

验证优化效果。优化完成后可以使用以下命令查看优化后镜像大小:

1
docker images

SlimToolkit 的优势

  1. 自动与智能化:它能够自动识别容器中不必要的部分,并且进行优化,无需开发者手动修改 Dockerfile 或者删除文件。这种自动化不仅节省了时间,还减少了人为错误的可能性。

  2. 安全:通过生成 Seccomp 和 AppArmor 的配置文件,SlimToolkit 为容器提供了额外的安全保障。这些配置文件能够限制容器系统调用,防止潜在安全威胁,而无需开发者深入了解安全框架细节。

  3. 无缝集成:SlimToolkit 设计目标是无缝集成到现有的开发和部署流程中。它支持多种容器运行时和 CI/CD 工具,能够轻松集成到自动化构建和部署流程中。开发者无需改变现有的工具链或工作流程,即可享受 SlimToolkit 带来的优化效果。

  4. 开源:完全开源,社区活跃,有问必答!

图片为啥用 Base64 格式进行传输

2025年2月17日 00:00

在互联网的世界里,图片传输是再平常不过的事情了,而 Base64 格式常常出现在这一过程中。那为啥图片要用 Base64 格式来传输呢?这背后有不少门道。本文将介绍 Base64 格式的应用场景和优点,以及一些应用场景下的缺点。

Base64 是什么

Base64 是种用 64 个可打印字符来表示二进制数据的编码方法。这 64 个字符含大小写字母各 26 个,还有 10 个数字以及两个符号。

例如,当我们看到一串像 SGVsbG8gV29ybGQh 这样的字符,这就是 Base64 编码后的结果,其实代表了 Hello World!

易于文本传输

在很多网络传输场景中,尤其是早期的网络应用,传输通道主要被设计为传输文本数据。

因为文本数据格式相对简单、统一,而且不容易出现乱码等问题。

而图片是二进制的数据,直接传输二进制数据可能会因为不同系统、不同软件对二进制数据的处理方式不同而出现问题。

Base64 把图片的二进制数据转换成了文本形式。这样一来,通过电子邮件、网页表单等主要以文本传输为主的渠道时,图片就可以顺利跟着文本一起传输了。

比如,在发送带有图片附件的电子邮件,邮件系统会把图片转换成 Base64 格式,然后和邮件的正文一起发送。

接收方收到邮件后,邮件客户端再把 Base64 格式的数据转换回图片,这样我们就能看到图片。

兼容性好

不同的操作系统和不同的软件应用对数据处理方式可能存在差异。Base64 编码后的文本数据在各种平台都能被正确识别和处理。

例如,一个在 Windows 系统上生成的 Base64 编码的图片数据,在 Linux 服务器上也能轻松解码并还原成图片,不用担心因为平台不同而出现数据损坏或者无法读取的情况。

几乎所有的编程语言都有内置的库或者函数来处理 Base64 编码和解码。这使得开发人员在开发涉及图片传输的应用程序时,能够很方便使用 Base64 格式。

比如,在一个基于 Python 的 Web 应用,开发人员可以使用库轻松地将图片文件读取并编码为 Base64 格式,然后通过网络发送给服务器或客户端。

方便在网页中嵌入图片

在网页设计中,如果一个网页中有大量的小图标或小图片,每次加载这些图片都需要发送一个 HTTP 请求。

这不仅会增加服务器的负担,还会影响网页加载速度。

而将这些小图片转换为 Base64 格式后,可以直接将 Base64 编码的数据嵌入到 HTML 或 CSS 文件中。

这样浏览器在加载 HTML 或 CSS 文件的时候,就可以直接读取到图片数据,而不需要单独发送 HTTP 请求去获取图片,从而提高了网页的加载效率。

嵌入 Base64 格式的图片还可以简化网页的结构。不需要在网页文件目录中单独存放这些小图片文件,减少了文件管理复杂性。

对于一些简单的网页应用或前端框架,这种方式非常实用。

安全性的考虑

虽然 Base64 编码不能算是真正的加密方法,但它在一定程度上可起到隐藏信息的作用。

因为对于不了解 Base64 编码的人来说,看到一串 Base64 编码的数据可能不知道它代表的是图片内容。

在一些对安全性要求不是特别高的场景下,可作为一种简单的保护措施。

比如,在一些内部文档分享系统中,把图片转换 Base64 格式传输,可防止非授权用户轻易地获取到原始图片文件。

在某些情况下,直接传输二进制图片文件可能会带来安全风险,如图片文件可能被恶意篡改,包含恶意代码。

将图片转换为 Base64 格式后,这些恶意代码在 Base64 编码文本环境中很难被执行,从而降低安全风险。

缺点

不过,Base64 传输图片也有其缺点。比如,Base64 编码后数据量比原始的二进制图片数据要大,大概会增加百分之三十三左右的大小。

所以在传输大图片或者对带宽要求很高的场景,可能需要权衡下是否使用 Base64 格式。

DPanel 让 Docker 管理变得轻松又高效

2025年2月14日 00:00

Docker 作为容器化领域的佼佼者,其强大的功能和灵活性,赢得众多开发者的青睐。然而,对于许多用户来说,Docker 的命令行操作可能显得有些复杂和繁琐。幸运的是,DPanel 的出现为 Docker 的管理和使用带来了全新的体验。

什么是 DPanel

DPanel 是一款轻量化的 Docker 可视化管理面板,专为简化容器的管理而设计。它提供一套完善的容器管理功能,让用户可通过直观的图形界面轻松管理 Docker 容器,无需深入复杂的命令行操作。

无论是初学者还是经验丰富的开发者,DPanel 都能帮助他们更高效地管理和部署容器。

DPanel 的优势

DPanel 的界面简洁直观,操作简单易懂,即使新手也能轻松上手。

DPanel 提供了丰富功能,涵盖了网站管理的各个方面,能够满足各种用户的需求。

基于容器设计,安装和部署都非常简单。用户无需复杂配置,只需通过简单步骤即可快速启动面板。其简洁直观操作界面让用户能够轻松上手,即使是第一次接触 Docker 的用户也能快速掌握基本操作。

DPanel 与 Docker 官方的兼容性非常好,能够无缝对接 Docker 的各项功能。支持多种操作系统和 Docker 版本,确保用户在不同环境下都能稳定使用。

服务安装

我们可以使用官方提供的集成脚本安装 DPanel。当宿主机没有 Docker 环境时,集成脚本会尝试安装 Docker 环境:

1
curl -sSL https://dpanel.cc/quick.sh -o quick.sh && sudo bash quick.sh

按照提示操作。安装完成后通过浏览器访问面板地址,即可进入管理界面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[DPanel Install Log]: 选择你需要安装的版本 
1. 标准版 (需要绑定 80 及 443 端口)
2. Lite版 (不包含域名转发相关功能)
3. 标准版 (Pro)
4. Lite版 (Pro)
5. Beta版 (内测版本)
输入你要安装的版本编号 [默认: 2]: 1
1. Docker Hub
2. ALiYun
选择镜像源 [默认: 1]: 2
[DPanel Install Log]: 你安装使用的镜像为 registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest
[DPanel Install Log]: 设置 DPanel 容器名称,更新面板时请配置为当前面板容器名称
请输入名称 [默认: dpanel]:
[DPanel Install Log]: 你指定的容器名称为 dpanel
设置 DPanel 容器挂载目录 [默认: /home/dpanel]:
[DPanel Install Log]: 您选择的面板容器挂载目录是 /home/dpanel
设置 DPanel 端口 [默认: 25128]:
[DPanel Install Log]: 您设置的端口是: 25128
[DPanel Install Log]: 如果端口已经被占用,请再次执行脚本更换端口后重新安装
Unable to find image 'registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest' locally
latest: Pulling from dpanel/dpanel
1f3e46996e29: Pull complete
b6dde5f749cd: Pull complete
459b8d93d51a: Pull complete
7d52a0c67d85: Pull complete
4b97f8a613e7: Pull complete
1d46bacd0854: Pull complete
3eac9a9b4fcb: Pull complete
2c5c0b90bb2b: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:9daa4f411b2bd7845cfd71e747ba2827797ea5fe9e754b8db475541c3700ba01
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/dpanel/dpanel:latest
d492b83d8c546297836a8735d73f0b3f8943f134065dea4ef5ffff834f028715
[DPanel Install Log]:
[DPanel Install Log]: =================感谢您的耐心等待,安装、升级已完成==================
[DPanel Install Log]:
[DPanel Install Log]: 请使用您的浏览器访问面板,并初始化管理员帐号:
[DPanel Install Log]: 外部地址: http://123.116.127.26:25128
[DPanel Install Log]: 内部地址: http://192.168.31.187:25128
[DPanel Install Log]: 如果您使用的是云服务器,请在安全组中打开端口 25128
[DPanel Install Log]:
[DPanel Install Log]: 官方网站及文档: https://dpanel.cc
[DPanel Install Log]: 代码仓库: https://github.com/donknap/dpanel
[DPanel Install Log]:
[DPanel Install Log]: ================================================================

面板效果

首页概览:

容器管理:

文件管理:

镜像管理:

创建镜像:

系统管理:

本博出现图碎问题说明

2025年2月11日 00:00

近期本博访问时出现了图碎问题,经排查系 CDN 回源失败导致的。有小伙伴可能会说,保证成功就可以修复了,其实没有那么简单。本文简单描述下存储节点数据流,顺便科普一下如何清理单站数据缓存。

数据流向

通过下图可以看出,图片文件保存在主机上,通过转换处理为 WebP 格式文件,经由 CDN 回源并实现访问加速:

问题分析

登录 CDN 管理后台查看其日志,发现出现超时记录。

超时原因一般两种,一种是因线路问题导致回源超时,一种是因主机没有及时返回数据造成。

本地图片经由 WebP 中间件处理,再回源给 CDN 做反代,经查是 WebP 服务突然宕机导致 CDN 未收到响应数据导致超时。

除超时问题外,因无返回数据导致 CDN 响应 404,而服务器设置 404 默认跳转至主站首页,这就导致好多小伙伴频繁刷新页面依然不显示图片。

解决方案

目前已关闭 CDN,流量直接回源至源主机,缺点就是会影响访问的速度。带调试维护后会重新挂上 CDN。

WebP 图片转换是为了减少图片体积,进而减轻带宽压力「轻量级服务器有流量的限制」因此不能暂停使用,已修改其参数,尽量保障响应的成功率。

如之前有访问记录,会留下 404 跳转缓存,需要清理相关数据。

有小伙伴分享了两种清理缓存的方法,需要的小伙伴可以参考操作。

清理缓存

首先进入到浏览器的开发者工具,一般浏览器点击F12即可,进入更多设置,勾选 Disable cache while DevTools is open 项:

或者切换到网络标签页,勾选禁用缓存,刷新页面即可「注意保持开发者工具一直处于开启的状态」

新版本去不图床免费公测开始啦

2025年2月8日 00:00

有不少的小伙伴为去不图床提供建议,包括但不限于增加支持格式、图片处理、水印功能等等。杜老师也收集了这些建议转交给程序的设计者,经过了几个月更新迭代,V2 版本已推出。由于使用了新框架,无论是操作逻辑和功能支持,都有较大改变,所以在正式上线前,杜老师决定免费公测下!

新版界面

新版主页相较老版而言更加简洁,仅包含站点名称及描述信息,还有图片托管数据。最下方是两个功能入口,一个是图片上传的窗口,一个是用户登录的界面:

在上传界面中,可以选择从本地计算机上传图片文件,也可接入到摄影头,拍摄照片后再上传。目前支持访客上传,所有图片会经过审核后存放在服务器:

用户可以通过邮箱、用户名两种方式来登录。目前程序强制要求注册用户进行邮件验证,不能关闭验证。但因 bug 收不到验证信息,所以杜老师提供了一些体验账号用需要的小伙伴们使用:

在用户的仪表盘中可看到当前拥有的存储容量,可以查看图片、相册、分享,可以购买订阅、查看订单,提交工单或申请 API Tokens:

体验账号

体验账号密码统一为 7bu.top,默认容量为 1G。如选择了账号,请在评论区中留下编号,杜老师会根据使用备注信息,避免有小伙伴重复选择账号:

编号账号邮箱备注
1dusays1dusays1@dusays.com已用
2dusays2dusays2@dusays.com暂无
3dusays3dusays3@dusays.com暂无
4dusays4dusays4@dusays.com暂无
5dusays5dusays5@dusays.com暂无
6dusays6dusays6@dusays.com暂无
7dusays7dusays7@dusays.com暂无
8dusays8dusays8@dusays.com暂无
9dusays9dusays9@dusays.com暂无
10dusays10dusays10@dusays.com暂无
11dusays11dusays11@dusays.com暂无
12dusays12dusays12@dusays.com暂无
13dusays13dusays13@dusays.com暂无
14dusays14dusays14@dusays.com暂无
15dusays15dusays15@dusays.com暂无
16dusays16dusays16@dusays.com暂无
17dusays17dusays17@dusays.com暂无
18dusays18dusays18@dusays.com暂无
19dusays19dusays19@dusays.com暂无
20dusays20dusays20@dusays.com暂无
21dusays21dusays21@dusays.com暂无
22dusays22dusays22@dusays.com暂无
23dusays23dusays23@dusays.com暂无
24dusays24dusays24@dusays.com暂无
25dusays25dusays25@dusays.com暂无
26dusays26dusays26@dusays.com已用
27dusays27dusays27@dusays.com暂无
28dusays28dusays28@dusays.com暂无
29dusays29dusays29@dusays.com暂无
30dusays30dusays30@dusays.com暂无
31dusays31dusays31@dusays.com暂无
32dusays32dusays32@dusays.com暂无
33dusays33dusays33@dusays.com暂无
34dusays34dusays34@dusays.com暂无
35dusays35dusays35@dusays.com暂无
36dusays36dusays36@dusays.com暂无
37dusays37dusays37@dusays.com暂无
38dusays38dusays38@dusays.com暂无
39dusays39dusays39@dusays.com暂无
40dusays40dusays40@dusays.com暂无
41dusays41dusays41@dusays.com暂无
42dusays42dusays42@dusays.com暂无
43dusays43dusays43@dusays.com暂无
44dusays44dusays44@dusays.com暂无
45dusays45dusays45@dusays.com暂无
46dusays46dusays46@dusays.com暂无
47dusays47dusays47@dusays.com暂无
48dusays48dusays48@dusays.com暂无
49dusays49dusays49@dusays.com暂无
50dusays50dusays50@dusays.com暂无
51dusays51dusays51@dusays.com暂无
52dusays52dusays52@dusays.com暂无
53dusays53dusays53@dusays.com暂无
54dusays54dusays54@dusays.com暂无
55dusays55dusays55@dusays.com暂无
56dusays56dusays56@dusays.com暂无
57dusays57dusays57@dusays.com暂无
58dusays58dusays58@dusays.com暂无
59dusays59dusays59@dusays.com暂无
60dusays60dusays60@dusays.com暂无
61dusays61dusays61@dusays.com暂无
62dusays62dusays62@dusays.com暂无
63dusays63dusays63@dusays.com暂无
64dusays64dusays64@dusays.com暂无
65dusays65dusays65@dusays.com暂无
66dusays66dusays66@dusays.com已用
67dusays67dusays67@dusays.com暂无
68dusays68dusays68@dusays.com暂无
69dusays69dusays69@dusays.com暂无
70dusays70dusays70@dusays.com暂无
71dusays71dusays71@dusays.com暂无
72dusays72dusays72@dusays.com暂无
73dusays73dusays73@dusays.com暂无
74dusays74dusays74@dusays.com暂无
75dusays75dusays75@dusays.com暂无
76dusays76dusays76@dusays.com暂无
77dusays77dusays77@dusays.com暂无
78dusays78dusays78@dusays.com暂无
79dusays79dusays79@dusays.com暂无
80dusays80dusays80@dusays.com暂无
81dusays81dusays81@dusays.com暂无
82dusays82dusays82@dusays.com暂无
83dusays83dusays83@dusays.com暂无
84dusays84dusays84@dusays.com暂无
85dusays85dusays85@dusays.com暂无
86dusays86dusays86@dusays.com暂无
87dusays87dusays87@dusays.com暂无
88dusays88dusays88@dusays.com已用
89dusays89dusays89@dusays.com暂无
90dusays90dusays90@dusays.com暂无
91dusays91dusays91@dusays.com暂无
92dusays92dusays92@dusays.com暂无
93dusays93dusays93@dusays.com暂无
94dusays94dusays94@dusays.com暂无
95dusays95dusays95@dusays.com已用
96dusays96dusays96@dusays.com已用
97dusays97dusays97@dusays.com暂无
98dusays98dusays98@dusays.com暂无
99dusays99dusays99@dusays.com已用
100dusays100dusays100@dusays.com已用

站点地址

公测站点地址如下,点击访问即可。因为公测站点是单线路,与图片外链同线路,所以访问速度较慢,请访问慢的小伙伴耐心等待页面加载:

公测规则

  1. 本站仅供测试使用,请勿用于非法用途;

  2. 原去不图床的账号无法在测试平台中使用,请使用提供的体验账号;

  3. 如选择好体验账号,请将编号留言至评论区,杜老师会备注信息,方便其它的小伙伴选择;

  4. 公测平台预计运营至三月底,届时所有数据将被释放,请勿保存重要数据;

  5. 在使用的过程中如发现有任何 bug,欢迎在评论区留言,杜老师会第一时间提交给程序开发者,尽量完善新版图床程序;

  6. 最终解释权归杜老师说所有。

Hugo 渲染超时问题的解决笔记

2025年2月5日 00:00

hehe 童鞋选择将所有的站点托管到杜老师这「是收费的」这样就可以专心维护网站的内容,也不用费心思在运维上。在做站点迁移时遇到了 Hugo 框架的一个报错,原因是使用 Hugo 搭建相册网站需要遍历大量图片,而在生成站点文件时出现了超时问题,本文记录解决方法。

报错信息

1
2
3
ERROR render of "page" failed: "/home/runner/work/photo/photo/themes/gallery/layouts/_default/single.html:3:5": execute of template failed: template: _default/single.html:3:5: executing "main" at <partial "gallery.html" .>: error calling partial: partial "gallery.html" timed out after 30s. This is most likely due to infinite recursion. If this is just a slow template, you can try to increase the 'timeout' config setting.
Total in 60412 ms
Error: error building site: render: failed to render pages: render of "page" failed: "/home/runner/work/photo/photo/themes/gallery/layouts/_default/single.html:3:5": execute of template failed: template: _default/single.html:3:5: executing "main" at <partial "gallery.html" .>: error calling partial: partial "gallery.html" timed out after 30s. This is most likely due to infinite recursion. If this is just a slow template, you can try to increase the 'timeout' config setting.

注意:杜老师是通过 GitHub Actions 来部署,逻辑是先准备 Hugo 的运行环境,再根据站点的数据渲染站点文件。在生成站点文件时出现如上错误信息。

解决思路

从错误信息看,Hugo 网站在渲染页面时出现了问题,具体是 gallery.html 这个 partial 文件在执行时超时了,并且怀疑是由于无限递归导致的。

首先检查 gallery.html 中代码。无限递归问题可能是 gallery.html 中调用了自身,或者在调用其它 partial 时形成了循环。仔细检查文件,确保没有递归调用自己或其它可能导致循环的部分。

其次检查数据结构。如果 gallery.html 中依赖某些数据结构,可能是数据结构中存在循环引用。例如,某个对象或者列表在渲染时不断递归调用。

再次增加超时时间。如果确认不是无限递归问题,而是模板渲染确实很慢,可以尝试增加超时时间。在 Hugo 的配置文件中,增加 timeout 配置项,如 timeout = '60000'

然后优化模板性能。如果模板渲染确实很慢,可能是模板的代码过于复杂。可以尝试优化模板代码,减少不必要循环和复杂逻辑。

接着调试模板。使用 Hugo 的调试工具来逐步检查模板的执行过程。可通过在模板中添加日志输出来帮助调试。

再者检查依赖插件。如果网站使用第三方插件或依赖,可能是插件导致了问题。尝试禁用插件,看看能否解决问题。

最后检查 Hugo 的版本。确保使用的 Hugo 版本是最新的。旧版本可能存在已知的 bug,而新版本可能已修复了这些问题。

麒麟服务器操作系统 yum 升级报错处理

2025年2月2日 00:00

因为公司要求,杜老师一直使用麒麟服务器操作系统,为了保证系统的新特性,需要经常升级系统。这次在升级过程中遇到错误,本文记录该错误及其解决的方法。如果小伙伴也遇到了类似的问题,可以参考本文或在评论区中留言!

报错信息

1
2
3
4
5
6
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'yum clean packages'.
Error: Transaction test error:
file /usr/share/doc/ipmitool/ChangeLog from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch
file /usr/share/doc/ipmitool/README from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch
file /usr/share/man/man1/ipmitool.1.gz from install of ipmitool-1.8.19-1.p01.ky10.x86_64 conflicts with file from package ipmitool-help-1.8.18-19.p02.ky10.noarch

注意;杜老师执行命令 yum -y update 用户升级所有软件,在升级过程中提示如上错误信息。

解决思路

根据所提供的错误信息,问题在于 ipmitool-1.8.19-1.p01.ky10.x86_64ipmitool-help-1.8.18-19.p02.ky10.noarch 间存在文件冲突。以下是解决此问题步骤,首先移除冲突的包:

1
yum -y remove ipmitool-help-1.8.18-19.p02.ky10.noarch

清理缓存,确保后续操作不会受到旧缓存的影响:

1
yum clean all

在移除冲突包并清理缓存后,重新安装 ipmitool 软件包:

1
yum -y install ipmitool-1.8.19-1.p01.ky10.x86_64

最后,更新系统中所有包,以确保所有的依赖关系都已解决:

1
yum -y update

2 月 5 日图床故障说明

2025年1月30日 00:00

这是篇补更文,所以发布时间不符。本文对 2 月 5 日的图床故障进行详细说明,并为了避免再次出现类似的问题,所做的一系列措施。如小伙伴们有任何问题,欢迎在评论区留言。

问题描述

根据监控服务平台数据显示,于 2 月 5 日上午十点左右发生了图床故障,导致所有图床服务「包括去不官网、图片外链、容量兑换」无法访问。

问题出现后很多小伙伴前往本站的评论区留言,反馈图床问题。杜老师收到反馈后,第一时间进行了问题的排查,并尝试了多种修复作业,但因为不在服务器附近,很多操作无法进行,最终只能暂时安抚小伙伴们。

问题原因

杜老师于当日 17 点返京,18 点到达服务器所在地,第一时间确认问题,开始进行修复工作,在短时间内恢复了图床相关服务的正常访问与使用,以减少对小伙伴们影响。

经排查是短期内产生大量的流量,达到家庭版光猫的性能瓶颈,产出较大热量,又因为光猫放置的地点问题,最终导致光猫宕机,影响了数据的正常传输。

解决方案

使用去不图床的小伙伴都很清楚,图床运营成本较大,为了减少成本,杜老师将服务器放置在家里的机柜中,通过家庭网络穿透公网,通过 CDN 反向代理来加速访问。

在重启光猫后,第一时间修正域名解析,在清理 CDN 域名解析缓存后,图床恢复正常。

后续措施

为了避免再次出现类似问题,杜老师已下单企业级的光猫,并选购了半导体制冷器,放置机柜中实现光猫和服务器的降温工作,保障在高流量下的稳定运行。

同时下单了新带宽安装,在双线路下即可保证图床的高速访问,又可防止单线路的故障问题。最后杜老师会尽可能的保障去不图床服务稳定运营,不会出现数据丢失,更不会出现跑路的问题!

今夜 20 点口令红包雨来袭手慢无

2025年1月28日 00:00

岁末钟声渐近,万家灯火可亲。值此辞旧迎新之际,杜老师怀着无比雀跃的心情,要在今夜晚 20 点整,为陪伴杜老师走过又一年的小伙伴们送上一份特别心意。快点进文章内,看看活动的细节吧!

感恩有您

蛇年已至,万象更新,愿小伙伴们在新的一年,生活如灵蛇般灵动,事业似祥蛇般腾飞,家庭像暖蛇般温馨。蛇年,愿小伙伴们皆行大运,岁岁顺心如意,年年福满乾坤:

活动细则

今年春节,杜老师想用最传统最有仪式感的方式,把这份心意装进红包里。不是冰冷抽奖程序,而是带着温度「暗号互动」

1 月 28 日「今晚」二十点整准时开启。

输入「杜老师祝蛇年快乐」

100 位锦鲤将获得随机的现金红包。

参与攻略

进入到支付宝,点击首页中的更多:

待页面刷新后,下拉界面,找到理财管理分类,点击红包:

在红包页面中,找到输入框并填写口令,点击确定即可领取红包:

注意不要弄错口令了哦:

温馨提醒

  1. 每位小伙伴仅限领一次;

  2. 口令有效期 24 小时「截止 1 月 29 日 20 点」

  3. 欢迎在评论区晒出领取金额,分享快乐;

  4. 活动最终解释权归杜老师说所有,如有雷同,一定是特别的缘分!

关于 Opengist 开源代码片段分享工具服务关闭的公告

2025年1月25日 00:00

Opengist 开源代码片段分享工具自上线以来,一直致力于为小伙伴们提供优质服务。然而,随着时间推移,我们发现平台的活跃用户数量非常少,综合考虑资源利用效率和运营成本等因素,我们做出了关闭服务的艰难决定。

关闭原因

长时间无人使用的情况日益突出。同时,平台占用服务器资源也相对较多,这给我们的运营带来了较大压力:

关闭流程

在关闭服务前,我们会对平台上的所有用户数据进行全面备份,包括但不限于用户信息、使用记录、上传的文件等,以保障已托管用户们的数据安全。

在本文发布后,我们将正式关闭 Opengist 开源代码片段分享工具服务,届时将无法再登录平台或者使用相关功能。为提供更充裕的时间进行数据下载和备份,我们会在关闭服务后一段时间内,提供数据下载服务。

数据备份与下载

为了方便获取和保存自己的数据,我们将提供数据备份文件的下载服务。可以通过下方链接进行数据下载:

下载地址

后续安排

关闭 Opengist 开源代码片段分享工具服务后,我们将对服务器的资源进行优化调整,以更好地支持我们的其它项目和服务。同时,我们也会继续关注用户的需求和反馈,努力提供更加优质的产品和服务。

再次感谢小伙伴们对 Opengist 开源代码片段分享工具的支持与理解。如在数据备份或下载过程中遇到任何问题,欢迎随时留言。

FreeFileSync 开源文件同步与备份利器

2025年1月22日 00:00

在数字化时代,文件管理和备份是每个用户都必须面对的重要任务。今天,向大家介绍一款开源的文件同步和备份软件 FreeFileSync。以其高效、免费和跨平台特点,成为众多用户在文件管理方面的首选工具。

写在前面

杜老师一直想自组个 NAS 主机,但苦于没有找到合适的系统,纠结于 Unraid 还是飞牛。Unraid 要收费,飞牛虽然免费,但很多功能的实现都是依托开源工具。就比如文件同步的功能,如需实现,还要借助第三方工具的。FreeFileSync 是非常好的选择,不仅开源免费,而且功能强大,可以帮助用户轻松完成各种文件同步任务:

什么是 FreeFileSync

FreeFileSync 是款功能强大的文件夹比较和同步软件,旨在帮助用户高效创建和管理重要文件的备份副本。与传统的备份工具不同,FreeFileSync 并不是简单地复制每一个文件,而是通过智能算法,确定源文件夹和目标文件夹之间差异,仅传输必要的数据。这种方法不仅节省了时间和带宽,还大大提高了同步效率:

开源与跨平台优势

FreeFileSync 是一款开源软件,这意味着它的代码是完全开放的,用户和开发者可以自由查看、修改、分发。开源优势在于,社区的力量可以不断优化和改进软件,使其更稳定和安全。此外,FreeFileSync 支持 Windows、macOS 和 Linux 三大主流的操作系统,无论桌面用户还是服务器管理员,都可以在自己的设备上无缝使用:

功能亮点

智能同步:FreeFileSync 的核心功能是其智能同步机制。它能够快速比较两个文件夹内容,识别出哪些文件被修改、删除、新增。用户可根据自己的需求选择同步模式,如单向同步或双向同步。这种灵活性使得 FreeFileSync 适用各种场景,从简单个人文件备份到复杂的多设备同步。

高效备份:对于备份任务,FreeFileSync 提供了多种选项。用户可以设置定时备份计划,确保重要文件定期自动备份。此外,软件支持增量备份,这意味着它只会备份自上次备份以来发生变化部分,从而节省存储空间。这种高效的备份方式对于那些需要频繁备份大量数据的用户来说非常实用。

易于使用:尽管 FreeFileSync 的功能强大,但它界面设计简洁直观,即使是新手用户也可以轻松上手。软件提供详细的教程和帮助文档,帮助用户快速掌握核心功能。此外,FreeFileSync 还支持拖放操作,用户可通过简单的拖放文件夹来设置同步任务,极大地提高了操作效率。

社区支持:作为开源软件,FreeFileSync 拥有一个活跃的社区。用户可以在社区论坛中寻求帮助、分享经验、参与开发。这种社区支持不仅为用户提供及时的技术支持,还为软件的持续改进提供了动力。许多用户反馈的功能和建议都被纳入后续版本的开发中。

适用场景

FreeFileSync 适用各种文件管理和备份场景。对于个人用户来说,它可用来备份重要文件,例如照片、文档、视频。对于企业用户,FreeFileSync 可帮助他们实现服务器之间的数据同步,确保数据的一致性和安全性。此外,FreeFileSync 还可以用于多设备之间的文件共享,例如在家庭网络中同步不同设备上的文件:

下载地址

杜老师为了方便小伙伴下载,已经打包好 14 版本的软件包。下面是 Windows、macOS 和 Linux 三大主流操作系统安装包:

下载地址

探索浏览器性能利器 Speedometer 3.0

2025年1月19日 00:00

在当今数字化时代,浏览器已成为我们日常生活中不可或缺的工具。如何衡量浏览器性能呢?Speedometer 3.0 正为此而生。它是一款专注于测试浏览器响应速度和性能的基准测试工具,通过模拟真实用户操作,帮助我们深入了解浏览器在处理复杂任务时的表现。

Speedometer 3.0 浏览器性能的试金石

Speedometer 3.0 是由 BrowserBench.org 开发的一款浏览器基准测试工具,旨在通过模拟真实 Web 应用场景来评估浏览器的响应能力。它通过一系列的演示 Web 应用程序,模拟用户常见操作行为,例如添加待办事项、编辑文档、浏览网页等等,从而量化浏览器在处理这些任务时的效率:

测试原理、方法

Speedometer 3.0 的测试原理是基于对 Web 应用的响应时间测量。它通过运行一系列预设的 Web 应用场景,记录浏览器在处理这些任务时的响应时间。这些场景涵盖从简单的页面加载到复杂的交互操作,例如在待办事项列表中添加任务、在文本编辑器输入文字、在表格中添加数据等等。通过这些多样化的测试场景,Speedometer 3.0 能够全面评估浏览器在不同负载的性能表现。

在测试过程中,Speedometer 3.0 会自动调整测试任务复杂程度,以确保测试结果准确性和可靠性。它还会根据浏览器性能表现动态调整测试参数,从而避免因浏览器性能差异而导致的测试偏差。这种自适应的测试方法使得 Speedometer 3.0 能够在不同类型的浏览器上获得一致的测试结果,为用户提供公平的比较基准。

如何进行测试

进行测试非常简单。用户只需访问官方网站,然后按照页面上的提示操作即可。在开始测试前,Speedometer 3.0 会自动检查浏览器窗口的大小,并提示用户调整窗口大小以确保测试结果的准确性。测试过程通常需几分钟时间,具体取决于浏览器的性能和测试设备硬件配置。在测试完成后,Speedometer 3.0 会生成一份详细测试报告,用户可将这份报告保存或分享给他人。此外,Speedometer 3.0 还支持跨设备和跨浏览器比较功能,用户可轻松地对比不同浏览器或不同设备上的测试结果,从而找到适合自己的浏览器:

测试结果解读

Speedometer 3.0 的测试结果以分数的形式呈现,分数越高表示浏览器的响应速度越快,性能越好。测试结果不仅包括总分,还会详细列出各个测试场景得分情况。这使得用户可深入了解浏览器在不同任务类型下的表现,如在处理文本编辑任务时是否更高效,或者在加载复杂网页时是否更快。此外,Speedometer 3.0 还提供了一些额外的性能指标,如帧率和延迟时间。帧率反映浏览器在处理动画和交互操作时的流畅度,而延迟时间则表示浏览器在接收到用户操作指令后响应速度。通过这些详细性能指标,用户可以更全面地了解浏览器的性能特点,从而做出更明智的选择:

宽带商 DNS 地址整理「仅 IPv4」

2025年1月16日 00:00

DNS 是互联网核心基础设施的关键组成部分,当计算机配置为使用距离最近 DNS 服务器时,可以显著提升域名解析效率,从而有效降低网络延时,优化网络服务响应速度,为用户带来更为流畅高效的网络体验。

中国电信 DNS 服务器地址大全

省市主 DNS备 DNS
安徽电信61.132.163.68202.102.213.68
北京电信219.141.136.10219.141.140.10
重庆电信61.128.192.6861.128.128.68
福建电信218.85.152.99218.85.157.99
甘肃电信202.100.64.6861.178.0.93
广东电信202.96.128.86202.96.128.166
广西电信202.103.225.68202.103.224.68
贵州电信202.98.192.67202.98.198.167
河南电信222.88.88.88222.85.85.85
黑龙江电信 DNS219.147.198.230219.147.198.242
湖北电信202.103.24.68202.103.0.68
湖南电信59.51.78.21159.51.78.210
江苏电信218.2.2.2218.4.4.4
江西电信202.101.224.69202.101.226.68
内蒙古电信 DNS219.148.162.31222.74.39.50
山东电信219.146.1.66219.147.1.66
陕西电信218.30.19.4061.134.1.4
上海电信202.96.209.133116.228.111.118
四川电信61.139.2.69218.6.200.139
天津电信219.150.32.132219.146.0.132
云南电信222.172.200.6861.166.150.123
浙江电信202.101.172.3561.153.177.196

中国联通 DNS 服务器地址大全

省市主 DNS备 DNS
北京联通123.123.123.123123.123.123.124
重庆联通221.5.203.98221.7.92.98
广东联通210.21.196.6221.5.88.88
河北联通202.99.160.68202.99.166.4
河南联通202.102.224.68202.102.227.68
黑龙江联通 DNS202.97.224.69202.97.224.68
吉林联通202.98.0.68202.98.5.68
江苏联通221.6.4.66221.6.4.67
内蒙古联通 DNS202.99.224.68202.99.224.8
山东联通202.102.128.68202.102.152.3
山西联通202.99.192.66202.99.192.68
陕西联通221.11.1.67221.11.1.68
上海联通210.22.70.3210.22.84.3
四川联通119.6.6.6124.161.87.155
天津联通202.99.104.68202.99.96.68
浙江联通221.12.1.227221.12.33.227
辽宁联通202.96.69.38202.96.64.68

中国移动 DNS 服务器地址大全

省市主 DNS备 DNS
安徽移动211.138.180.2211.138.180.3
山东移动218.201.96.130211.137.191.26
山西移动211.138.106.2211.138.106.3
江苏移动221.131.143.69112.4.0.55
浙江移动211.140.13.188211.140.188.188
湖南移动211.142.210.98211.142.210.99
湖北移动211.137.58.20211.137.64.163
江西移动211.141.90.68211.141.90.69
陕西移动211.137.130.3211.137.130.19
四川移动211.137.82.4
重庆移动218.201.4.3218.201.21.132
北京移动221.130.33.52221.130.33.60
天津移动211.137.160.50211.137.160.185
上海移动211.136.112.50211.136.150.66
广东移动211.136.192.6211.136.20.204
广西移动211.138.245.180211.136.17.108
贵州移动211.139.5.29211.139.5.30
福建移动211.138.151.161211.138.156.66
河北移动211.143.60.56211.138.13.66
甘肃移动218.203.160.194218.203.160.195
黑龙江移动 DNS211.137.241.34211.137.241.35
吉林移动211.141.16.99211.141.0.99
辽宁移动211.137.32.178211.140.197.58
云南移动211.139.29.68211.139.29.69
海南移动221.176.88.95211.138.164.6
内蒙古移动 DNS211.138.91.1211.138.91.2
新疆移动218.202.152.130218.202.152.131
西藏移动211.139.73.34211.139.73.35
青海移动211.138.75.123
香港移动203.142.100.18203.142.100.21

中国铁通 DNS 服务器地址大全

省市主 DNS备 DNS
广东铁通61.235.70.252211.98.4.1

中国广电 DNS 服务器地址大全

省市主 DNS备 DNS
广东广电、珠江宽频116.199.0.200116.116.116.116

中国长城宽带 DNS 服务器地址大全

省市主 DNS备 DNS
广东长城宽带211.162.78.1211.162.78.2

Follow 开启个性化信息汇聚的新时代

2025年1月13日 00:00

在信息爆炸的当下,我们每天都会被海量的内容包围,从新闻资讯到娱乐八卦,从专业文章到生活琐事,各种信息纷至沓来。如何在繁杂信息海洋中精准地筛选出自己真正感兴趣的内容,Follow 或许就是解决这一问题的神器。

打造专属信息空间

Follow 首先吸引杜老师的是它那定制化信息中心的理念。在这个平台上,用户可订阅海量的资讯源和精选列表。无论是热门的新闻频道,还是小众兴趣部落,只要是您感兴趣的,都可轻松订阅。更重要是,Follow 允许用户对这些订阅内容进行深度定制。您可以根据自己的喜好,将不同来源的信息进行分类整理,创建出一个个个性化的信息板块。比如,您可将所有关于科技前沿的资讯归为一类,将体育赛事的最新动态单独列出,甚至还可为自己的偶像创建一个专属的信息流,实时追踪他们最新动态。这样一来,您就可以在一个小小的收件箱里,轻松的掌握所有对您来说真正重要的信息,再也不用在多个网站间来回切换,浪费宝贵时间:

多媒体内容全覆盖

在这个多媒体盛行时代,信息的表现形式早已不再局限于文字。图片、视频、音频等元素的加入,让内容变得更丰富多彩。Follow 深知这一点,因此提供动态内容支持。无论是长篇的文章、精美的图片集,还是精彩视频、动听音频,Follow 都能够完美呈现。当您在浏览信息时,无需担心因为内容形式的差异而出现兼容问题。无论是想要欣赏一段优美的音乐,还是观看一场精彩演讲,Follow 都能让您流畅地享受其中。这种全方位的内容支持,满足了用户在不同场景下的多元需求,无论工作学习,还是休闲娱乐,都可以找到适合自己的内容形式:

助力提升浏览体验

科技飞速发展,让人工智能逐渐融入到我们的日常生活中。Follow 将 AI 技术巧妙地融入到了平台的各项功能中,为用户带来了 AI 尽在指尖的便捷体验。首先,AI 驱动的翻译功能,打破了语言的障碍。在这个全球化时代,许多优质资讯可能因为语言不通而被我们错过。而 Follow 的 AI 翻译,能够快速准确地将不同语言内容翻译成用户熟悉的语言,让我们能够轻松阅读来自世界各地的信息。其次,AI 摘要功能则为用户节省了大量时间。面对篇幅较长文章,AI 能够精准提炼出核心要点,让用户在短时间内快速了解文章主旨,帮助我们更高效地筛选有价值的内容。此外,还有诸如智能推荐等 AI 功能,根据用户的浏览历史和兴趣偏好,为用户推荐可能感兴趣的新内容,不断拓展我们信息视野:

赋能创作者与用户

在 Follow 的世界里,还有一个独特的存在 Power。这是一种全新的所有权经济模式,它赋予了用户和创作者更多的权力和价值。用户可以通过 Power 直接向自己喜欢的创作者打赏,表达对他们作品支持和喜爱。这种即时打赏机制,不仅能够激励创作者持续产出优质的内容,还可以让用户与创作者之间建立起更加紧密的联系。同时,创作者也能通过自己的内容获得相应的 Power 收益,实现内容商业价值转化。更重要的,Power 还能够让用户在自己的作品中解锁更多价值。当您在 Follow 上分享自己的见解、创作自己的内容时,也有可能获得他人的打赏和支持,让您的创意和智慧得到应有回报。这种经济模式创新,真正实现了内容的价值回归,让每一个参与者都能在这个生态中找到自己的位置,共同推动内容创作繁荣发展:

超越构建社区生态

Follow 不仅仅是一个简单的应用,它更是一个充满活力的社区。在这里用户不再是孤立的信息接收者,而是能积极参与到社区的互动中。您可以与其他用户交流心得、分享观点,甚至能参与到内容的共创中。Follow 鼓励用户之间的开放合作,共同打造一个更加丰富多元信息生态。社区中的每一个成员都可以为内容的质量和多样性贡献力量,通过大家共同努力,使得 Follow 成为一个真正属于用户自己的信息家园。在这里您不仅能够获取信息,还可以结交志同道合的朋友,拓展自己社交圈子,共同探索未知世界:

杜老师说订阅地址

如果您也有 Follow 账户,欢迎访问杜老师的订阅地址,可以第一时间获取本站博文更新。可惜无法同步评论功能,所以需要交流的话,还需访问原文地址,在评论区留言:

经常有小伙伴因侧边栏的随机图,谣传说杜老师喜欢美女、黑丝啥的。这里严肃声明杜老师从来不看侧边栏,这里分享一个图集,侧边栏仅随机一张,哪里够看:

使用 GoAccess 分析 Nginx 访问日志

2025年1月10日 00:00

Nginx 的访问日志中蕴含丰富的信息,然而直接阅读对于大多数人来说是一项艰巨的任务。但我们有 GoAccess 这样的强大工具,它能够帮助我们轻松地分析和可视化 Nginx 的访问日志。

工具安装

对于基于 Debian 的系统「如 Ubuntu」,可以使用以下命令安装:

1
2
sudo apt-get update
sudo apt-get install goaccess

对于基于 Red Hat 的系统「如 CentOS」,可以使用以下命令安装:

1
sudo yum -y install goaccess

源码安装

如果想要从源码安装 GoAccess,可以按照以下步骤操作。先下载 GoAccess 的源码包:

1
wget https://tar.goaccess.io/goaccess-1.4.tar.gz

再解压并编译安装:

1
2
3
4
tar -xzvf goaccess-1.4.tar.gz
cd goaccess-1.4/
./configure --enable-geoip --enable-utf8
make && sudo make install

配置工具

我们需要对 GoAccess 进行配置,确保它能够正确地解析 Nginx 的访问日志。GoAccess 配置文件通常位于 /etc/goaccess/goaccess.conf。对于 Nginx 的默认日志格式,可直接使用--log-format=COMBINED 参数。如果 Nginx 配置了自定义的日志格式,需在 GoAccess 的配置文件中指定相应的日志格式。例如:

1
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

还需指定日期和时间的格式,以确保 GoAccess 能够正确地解析日志文件中的日期和时间信息。例如:

1
2
date-format %d/%b/%Y
time-format %H:%M:%S

分析日志

在终端直接运行 GoAccess,它会进入一个交互式的界面,显示日志分析结果。在交互式界面中可使用键盘方向键和数字键来浏览和查看不同的统计信息。例如:

1
goaccess /var/log/nginx/access.log --log-format=COMBINED

GoAccess 可将分析结果输出为 HTML 格式的报告,方便在 Web 浏览器中查看。下面的命令将生成一个名为 report.html 的文件,包含丰富的统计信息和图表:

1
goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

GoAccess 支持实时监控 Nginx 访问日志,可动态地更新统计信息。如要启用实时监控,可以使用以下命令:

1
--real-time-html --daemonize

启动一个后台进程,实时分析日志文件,并将结果输出到指定的 HTML 文件中,完整参考命令如下:

1
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html --daemonize

分析结果解读

GoAccess 提供了丰富的统计信息和图表,帮助我们全面了解网站访问情况,包括访问概览:

维度描述
网站的总访问次数显示网站总访问量。
网站的独立访客数统计访问网站的不同 IP 地址数量。
总数据传输量表示网站传输数据总量,单位通常为 MB 或 GB。

网站的访问者信息:

维度描述
IP 地址的排名列出访问网站的 IP 地址及其访问次数,可以了解访问者的地理位置分布。
访问者的浏览器和操作系统统计访问者使用的浏览器和操作系统类型,有助于优化网站兼容性。

请求信息:

维度描述
请求方法显示不同 HTTP 请求方法的请求次数。
请求的状态码统计不同 HTTP 状态码请求次数,如 200 表示成功,404 表示未找到。
请求 URL 的排名列出被访问最多 URL 地址,可发现网站的热门内容。

性能分析:

维度描述
请求时间分布显示不同时间段请求量,可发现访问高峰期。
最耗时的请求列出响应时间最长请求,有助于发现性能的瓶颈。

高级用法

除了基本分析功能,GoAccess 还支持一些高级用法。例如可使用管道和过滤器来处理日志数据,下面命令将实时地分析 Nginx 的访问日志,并显示最新的统计信息:

1
tail -f /var/log/nginx/access.log | goaccess -p /etc/goaccess/goaccess.conf

GoAccess 可支持同时分析多个日志文件,下面命令将合并多个日志文件的分析结果:

1
goaccess -p /etc/goaccess/goaccess.conf access.log.1 access.log.2

通过 Nginx 的 access_log 分析网站的流量

2025年1月7日 00:00

在当今数字化时代,网站流量分析对于理解用户行为、优化网站性能以及制定营销策略至关重要。本文将探讨如何通过分析 Nginx 的 access_log 获取网站流量的多维度数据,并给出具体操作步骤和分析方法。

日志格式

在开始分析前,我们需要了解 access_log 的默认日志格式。通常情况 access_log 的日志格式如下:

1
2
3
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

这个格式包含以下字段:

字段说明
$remote_addr客户端 IP 地址
$remote_user客户端用户名
$time_local本地时间
$request请求方法、请求 URI 以及 HTTP 版本
$statusHTTP 状态码
$body_bytes_sent发送给客户端的字节数
$http_referer请求来源的 URL
$http_user_agent客户端浏览器的用户代理字符串

Nginx 访问量分析

要统计网站的总访问量,可通过计算 access_log 文件的行数来实现。在 Linux 系统中可以使用 wc -l 命令,该命令会输出 access.log 文件的行数,即为网站总访问量:

1
wc -l access.log

了解访问量在不同时间段的分布情况,有助于我们发现网站访问高峰和低谷。可以使用 awk 命令按小时或分钟统计请求数,下面的命令会输出按小时或分钟统计的请求数,并且显示请求数最多的前 100 个时间点:

1
2
3
4
# 每小时统计请求数
awk '{print $4}' access.log | cut -c 14-15 | sort | uniq -c | sort -nr | head -n 100
# 每分钟统计请求数
awk '{print $4}' access.log | cut -c 14-18 | sort | uniq -c | sort -nr | head -n 100

访问来源分析

分析访问来源 IP 可以了解用户主要来自哪些地区或网络环境。使用 awksort 命令可以统计访问量最多的 IP 地址,该命令会输出访问量最多的前 10 个 IP 地址及其访问次数:

1
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 10

查看访问来源 URL 有助于我们了解用户是如何找到我们网站的。可以使用以下命令统计访问来源最多的 URL,该命令会输出访问来源最多的前 10 个 URL 及访问次数:

1
awk '{print $11}' access.log | sort | uniq -c | sort -nr | head -n 10

页面访问分析

了解哪些页面访问量最高可帮助我们优化这些页面的性能和内容。使用 awk 命令可统计访问最频繁的页面,下面命令会输出访问最频繁的前 100 个页面及其访问次数:

1
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -n 100

分析页面的访问时间可以发现哪些页面的加载时间较长,需要优化。在 Nginx 的 log_format 中加入 $request_time 字段,然后使用以下命令列出传输时间超过 3 秒页面,该命令会输出传输时间超过 3 秒的页面及其出现的次数,仅显示前 20 条记录:

1
cat access.log | awk '($NF > 3){print $7}' | sort -n | uniq -c | sort -nr | head -20

用户行为分析

分析用户代理字符串可以了解用户使用的浏览器类型和版本。使用 awk 命令可统计不同浏览器的访问次数,该命令会输出不同浏览器访问次数及其用户代理字符串:

1
awk -F '"' '{print $6}' access.log | sort | uniq -c | sort -nr | head -n 10

通过分析用户的访问路径可以了解用户在网站中的导航行为。可以使用以下命令统计访问路径的长度和频率,该命令会输出访问路径的长度及其出现的次数,仅显示前 10 条记录:

1
awk '{print $7}' access.log | awk -F '/' '{print NF-1}' | sort | uniq -c | sort -nr | head -n 10

性能分析

响应时间是衡量网站性能的重要指标之一。可使用以下命令统计响应时间的分布情况,该命令会输出响应时间及其出现次数,仅显示前 10 条记录:

1
awk '{print $NF}' access.log | sort -n | uniq -c | sort -nr | head -n 10

HTTP 状态码反映了请求的成功与否以及错误类型。可以使用以下命令统计不同状态码的出现次数,该命令会输出不同状态码及其出现的次数,仅显示前 10 条记录:

1
awk '{print $9}' access.log | sort | uniq -c | sort -nr | head -n 10

Office 多版本产品激活密钥分享

2025年1月4日 00:00

之前有小伙伴问到是否有 Office 产品的激活密钥,杜老师在微软的官网上好顿搜索,终于是找到了!目前 Office 有两大版本,一个是年度版「如 2024」一个是订阅版「即 365」订阅版不可以破解使用,文中均为年度版的激活密钥。

GVLK for Office LTSC 2024

产品GVLK
Office LTSC 专业增强版 2024XJ2XN-FW8RK-P4HMP-DKDBV-GCVGB
Office LTSC 标准版 2024V28N4-JG22K-W66P8-VTMGK-H6HGR
Project Professional 2024FQQ23-N4YCY-73HQ3-FM9WC-76HF4
Project Standard 2024PD3TT-NTHQQ-VC7CY-MFXK3-G87F8
Visio LTSC Professional 2024B7TN8-FJ8V3-7QYCP-HQPMV-YY89G
Visio LTSC Standard 2024JMMVY-XFNQC-KK4HK-9H7R3-WQQTV
Access LTSC 202482FTR-NCHR7-W3944-MGRHM-JMCWD
Excel LTSC 2024F4DYN-89BP2-WQTWJ-GR8YC-CKGJG
Outlook LTSC 2024D2F8D-N3Q3B-J28PV-X27HD-RJWB9
PowerPoint LTSC 2024CW94N-K6GJH-9CTXY-MG2VC-FYCWP
Skype for Business LTSC 20244NKHF-9HBQF-Q3B6C-7YV34-F64P3
Word LTSC 2024MQ84N-7VYDM-FXV7C-6K7CC-VFW9J

GVLK for Office LTSC 2021

产品GVLK
Office LTSC Professional Plus 2021FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH
Office LTSC Standard 2021KDX7X-BNVR8-TXXGX-4Q7Y8-78VT3
Project Professional 2021FTNWT-C6WBT-8HMGF-K9PRX-QV9H8
Project Standard 2021J2JDC-NJCYY-9RGQ4-YXWMH-T3D4T
Visio LTSC Professional 2021KNH8D-FGHT4-T8RK3-CTDYJ-K2HT4
Visio LTSC Standard 2021MJVNY-BYWPY-CWV6J-2RKRT-4M8QG
Access LTSC 2021WM8YG-YNGDD-4JHDC-PG3F4-FC4T4
Excel LTSC 2021NWG3X-87C9K-TC7YY-BC2G7-G6RVC
Outlook LTSC 2021C9FM6-3N72F-HFJXB-TM3V9-T86R9
PowerPoint LTSC 2021TY7XF-NFRBR-KJ44C-G83KF-GX27K
Publisher LTSC 20212MW9D-N4BXM-9VBPG-Q7W6M-KFBGQ
Skype for Business LTSC 2021HWCXN-K3WBT-WJBKY-R8BD9-XK29P
Word LTSC 2021TN8H9-M34D3-Y64V9-TR72V-X79KV

Office 2019 的 GVLK

产品GVLK
Office 专业增强版 2019NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP
2019 Office Standard6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK
Project Professional 2019B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B
2019 Project StandardC4F7P-NCP8C-6CQPT-MQHV9-JXD2M
2019 Visio Professional9BGNQ-K37YR-RQHF2-38RQ3-7VCBB
2019 Visio Standard7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2
Access 20199N9PT-27V4Y-VJ2PD-YXFMF-YTFQT
Excel 2019TMJWT-YYNMB-3BKTF-644FC-RVXBD
Outlook 20197HD7K-N4PVK-BHBCQ-YWQRW-XW4VK
PowerPoint 2019RRNCX-C64HY-W2MM7-MCH9G-TJHMQ
Publisher 2019G2KWX-3NW6P-PY93R-JXK2T-C9Y9V
Skype for Business 2019NCJ33-JHBBY-HTK98-MYCV8-HMKHJ
Word 2019PBX3G-NWMT6-Q7XBW-PYJGG-WXD33

Office 2016 的 GVLK

产品GVLK
Office Professional Plus 2016XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
Office Standard 2016JNRGM-WHDWX-FJJG3-K47QV-DRTFM
Project Professional 2016YG9NW-3K39V-2T3HJ-93F3Q-G83KT
Project Standard 2016GNFHQ-F6YQM-KQDGJ-327XX-KQBVC
Visio Professional 2016PD3PC-RHNGV-FXJ29-8JK7D-RJRJK
Visio Standard 20167WHWN-4T7MP-G96JF-G33KR-W8GF4
Access 2016GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW
Excel 20169C2PK-NWTVB-JMPW8-BFT28-7FTBF
OneNote 2016DR92N-9HTF2-97XKM-XW2WJ-XW3J6
Outlook 2016R69KK-NTPKF-7M3Q4-QYBHW-6MT9B
PowerPoint 2016J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6
Publisher 2016F47MM-N3XJP-TQXJ9-BP99D-8837K
Skype for Business 2016869NQ-FJ69K-466HW-QYCP2-DDBV6
Word 2016WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6

祝杜老师说的小伙伴们元旦快乐

2025年1月1日 00:00

一觉醒来,发现日历到了 2025 年。首先祝福小伙伴们元旦快乐,在新的一年里顺风顺水、心想事成、身体健康、流量滚滚!除此之外,杜老师也打算对 2024 年做一个简单总结,同时展望 2025 年~

元旦快乐

随着午夜钟声敲响,我们告别充满挑战与成长的一年,迎来了崭新的 2025 年。

在这个充满希望的时刻,杜老师想对每一位访问博客的朋友说一声:元旦快乐!

过去的一年里,我们一起经历了许多难忘的时刻。

感谢小伙伴们的支持和陪伴,是你们让这个博客充满活力,让每一次的互动都充满意义。

新的一年,杜老师说将带来更多高质量内容。

在新的一年里,愿大家的身体健康,心灵快乐。

愿大家的每一步都走得坚定、自信,每一个梦想都可以照进现实。

愿大家的生活充满爱与温暖,愿大家的事业和学业都能取得丰硕的成果。

回顾往事

不知是不是年龄的关系,杜老师发现自己对创作的热情似乎在渐渐退潮,出现了连续几次的拖更问题。

虽然最后都一一补更了,但还是有小伙伴反馈说体验不是很好。

尽管杜老师最终努力地补上了这些拖欠的内容,但还是收到一些忠实小伙伴们的反馈,他们表示有一丝的失望。

他们已经习惯了在特定的时间期待杜老师的新内容,但当他们满怀期待地打开网页却发现空空如也,那种失落感就像是一场未被兑现的约会让人有种白跑一趟的遗憾。

同时,为了尽快弥补这些缺失,杜老师有时会匆忙完成内容,没有给予它们应有的深思熟虑和精心打磨。

这样的匆忙往往导致内容的质量参差不齐,有时甚至显得过于敷衍,这无疑影响小伙伴们的阅读体验,让他们在期待中感到了失望。

展望明天

杜老师深知创作是和小伙伴们之间连接的桥梁。杜老师不愿意让这座桥梁因个人的原因而变得脆弱。

因此,杜老师在这里承诺,将重新点燃创作激情找回那份对文字的热爱和尊重。

杜老师会努力调整自己创作节奏,确保每次更新都能给小伙伴们带来期待中的惊喜和满足。

杜老师将更加注重内容的质量而不是数量。杜老师会花更多的时间去斟酌每一个字句,确保每篇内容都能像精心培育的花朵一样,绽放出它应有光彩。

杜老师会倾听每位小伙伴的声音,因为大家的反馈是杜老师前进的动力,也是杜老师不断进步的源泉。

再次感谢小伙伴们的理解和支持,杜老师将用更好的内容回报你们的信任和喜爱。

镇博萌宠

其实杜老师本是想放两张喜庆一些的图片,担心版权问题就用 AI 来生成,奈何 AI 生成的图片涉及文字显示出现乱码,所以就放两张萌宠图片:

随着年龄增加仪式感也越发薄弱,喵咪的仪式感更低,就在椅子上面趴着,除了吃就是睡,偶尔去猫砂盆方便一下。杜老师下辈子也想做猫:

Windows 系统多版本产品激活密钥分享

2024年12月29日 00:00

有小伙伴问到关于 Windows 的产品激活密钥,杜老师收集了一些。这里分享有关桌面及服务器各个版本激活密钥,需要配合 KMS 服务器使用,如不知道如何操作,可在评论区中留言!

Windows Server LTSC 版

Windows Server 2025 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2025 StandardTVRH6-WHNXV-R9WG3-9XRFY-MY832
Windows Server 2025 DatacenterD764K-2NDRG-47T6Q-P8T8W-YP6DF
Windows Server 2025 Datacenter:Azure EditionXGN3F-F394H-FD2MY-PP6FD-8MCRC

Windows Server 2022 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2022 StandardVDYBN-27WPP-V4HQT-9VMD4-VMK7H
Windows Server 2022 DatacenterWX4NM-KYWYW-QJJR4-XV3QB-6VM33
Windows Server 2022 Datacenter: Azure EditionNTBV8-9K7Q8-V27C6-M2BTV-KHMXV

Windows Server 2019 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464C
Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG
Windows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726

Windows Server 2016 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG
Windows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63B

半年频道版本

Windows Server 版本 20H2/2004/1909/1903/1809 产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server StandardN2KJX-J94YW-TQVFB-DG9YT-724CC
Windows Server Datacenter6NMRW-2C8FM-D24W7-TQWMY-CWH2D

Windows 11 和 Windows 10 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows 10/11 专业版W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows 10/11 专业版本 NMH37W-N47XK-V7XM9-C7227-GCQG9
Windows 10/11 专业工作站NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J
Windows 10/11 专业工作站版 N9FNHH-K3HBT-3W4TD-6383H-6XYWF
Windows 10/11 专业教育版6TP4R-GNPTD-KYYHQ-7B7DP-J447Y
Windows 10/11 专业教育版本 NYVWGF-BXNMC-HTQYQ-CPQ99-66QFC
Windows 10/11 教育版NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows 10/11 教育版本 N2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows 10/11 企业版NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows 10/11 企业版本 NDPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows 10/11 企业版本 GYYVX9-NTFWV-6MDM3-9PT4T-4M68B
Windows 10/11 企业版本 G N44RPN-FTY23-9VTTB-MP9BX-T84FV

早期版本的 Windows Server

Windows Server 版本 1803 产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server StandardPTXN8-JFHJM-4WC78-MPCBR-9W4KR
Windows Server Datacenter2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG

Windows Server 版本 1709 产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server StandardDPCNP-XQFKJ-BJF7R-FRC8D-GF6G4
Windows Server Datacenter6Y6KB-N82V8-D8CQV-23MJW-BWTG6

Windows Server 2012 R2 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2012 R2 StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJX
Windows Server 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
Windows Server 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWM

Windows Server 2012 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4
Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
Windows Server 2012 单语言2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
Windows Server 2012 特定地区版4K36P-JN4VD-GDC6V-KDT89-DYFKP
Windows Server 2012 StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4
Windows Server 2012 MultiPoint 标准版HM7DN-YVMH3-46JC3-XYTG7-CYQJJ
Windows Server 2012 MultiPoint 高级版XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
Windows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83P
Windows Server 2012 EssentialsHTDQM-NBMMG-KGYDT-2DTKT-J2MPV

Windows Server 2008 R2 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Server 2008 R2 Web 版6TPJF-RBVHG-WBW2R-86QPH-6RTM4
Windows Server 2008 R2 HPC 版TT8MH-CG224-D3D7Q-498W2-9QCTX
WindowsServer 2008 R2 标准版YC6KT-GKW9T-YTKYR-T4X34-R7VHC
WindowsServer 2008 R2 企业版489J6-VHDMP-X63PK-3K798-CPX3Y
WindowsServer 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648

Windows Server 2008 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249D
Windows Server 2008 标准版TM24T-X9RMF-VWXK6-X8JC9-BFGM2
不带 Hyper-V 的 Windows Server 2008 标准版W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
Windows Server 2008 企业版YQGMW-MPWTJ-34KDK-48M3W-X4Q6V
不带 Hyper-V 的 Windows Server 2008 企业版39BXF-X8Q23-P2WWT-38T2F-G3FPG
Windows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HP
Windows Server 2008 数据中心版7M67G-PC374-GR742-YH8V4-TCBY3
不带 Hyper-V 的 Windows Server 2008 数据中心版22XQ2-VRXRG-P8D42-K34TD-G3QQC

早期版本的 Windows

Windows 8.1 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows 8.1 专业版GCRJD-8NW9H-F2CDX-CCM8D-9D6T9
Windows 8.1 专业版本 NHMCNV-VVBFX-7HMBH-CTY9B-B4FXY
Windows 8.1 企业版MHF9N-XY6XB-WVXMC-BTDCT-MKKG7
Windows 8.1 企业版本 NTT4HM-HN7YT-62K67-RGRQJ-JFFXW

Windows 8 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows 8 专业版NG4HW-VH26C-733KW-K6F98-J8CK4
Windows 8 专业版本 NXCVCF-2NXM9-723PB-MHCB7-2RYQQ
Windows 8 企业版32JNW-9KQ84-P47T8-D8GGY-CWCK7
Windows 8 企业版本 NJMNMF-RHW7P-DMY6X-RF3DR-X2BQT

Windows 7 多版本产品密钥如下:

操作系统版本KMS 客户端安装密钥
Windows 7 专业版FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4
Windows 7 专业版本 NMRPKT-YTG23-K7D7T-X2JMM-QY7MG
Windows 7 专业版本 EW82YF-2Q76Y-63HXB-FGJG9-GF7QX
Windows7 企业版33PXH-7Y6KF-2VJC9-XBBR8-HVTHH
Windows 7 企业版本 NYDRBP-3D83W-TY26F-D46B2-XCKRJ
Windows 7 企业版本 EC29WB-22CC8-VJ326-GHFJW-H9DH4

Windows Vista 多版本产品密钥如下:

操作系统版本KMS 客户端产品密钥
Windows Vista 商用版YFKBB-PQJJV-G996G-VWGXY-2V3X8
Windows Vista 商用版本 NHMBQG-8H2RH-C77VX-27R82-VMQBT
Windows Vista 企业版VKK3X-68KWM-X2YGT-QR4M6-4BWMV
Windows Vista 企业版本 NVTC42-BM838-43QHV-84HX6-XJXKV

在线开源图片批量压缩工具

2024年12月26日 00:00

有人建议杜老师为去不图床添加压缩功能,这样可以减少图片体积,同时可以减少网络传输时间。但不少小伙伴还是有保留原版图片的需求,所以杜老师搭建了在线图片批量压缩图片平台。

工具介绍

支持多种图片格式,含 JEPG/PNG/WebP/GIF。

支持 20 兆以内图片压缩,最多支持 10 张图片同时操作。

支持压缩设置,可选缩小优先、普通压缩、清晰优先。

支持设置输出目标大小,及是否转换输出图片的格式。

在线平台

点击下方网址,即可访问搭建好的在线图片批量压缩工具:

部署过程

如不放心数据安全,可以使用下方源码自行部署。点击下方网址进入到 GitHub 源码页面,点击 Fork 复刻到自己仓库:

推荐使用 Vercel 部署与托管,部署过程参考下方配置。如果出现错误提示,可在评论区中贴图,杜老师看到后会第一时间回复的:

使用效果

部署完成后的效果如下:

在线开源图片处理工具

2024年12月23日 00:00

怕小伙伴们找不到趁手工具,杜老师找了款在线开源图片处理工具。文中介绍了该工具的部署及使用方法,虽然不如本地软件功能全面,但能够满足大部分需求,欢迎一试!

工具介绍

在线图像编辑器允许您使用 HTML5 技术创建和编辑图像,无需购买、下载、安装或者过时的 Flash,且无广告。

支持图层、滤镜,开源 Photoshop 替代品。

miniPaint 直接在浏览器中运行,可以通过从剪贴板粘贴或从计算机上传来创建图像。

不会向任何服务器发送任何内容,一切都保留在您的浏览器中。

在线平台

点击下方网址,即可访问搭建好的在线图片处理平台:

部署过程

如不放心数据安全,可以使用下方源码自行部署。点击下方网址进入到 GitHub 源码页面,点击 Fork 复刻到自己仓库:

推荐使用 Vercel 部署与托管,部署过程参考下方配置。如果出现错误提示,可在评论区中贴图,杜老师看到后会第一时间回复的:

使用效果

部署完成后的效果如下,如果默认不是中文界面,可以修改源代码文件 src/js/config.js,将其中 config.LANG 项改为 zh

这里有个可以白嫖三个一年 SSL 证书的网站

2024年12月20日 00:00

SSL 证书普及率很高,但目前只能申请到 90 天使用期限免费证书。虽然可以重复申请实现无限延期,但毕竟太麻烦。杜老师从淇云那里看到一个免费一年版的证书申请网站,感兴趣的小伙伴可以去领取!

网站介绍

DNSHE 是一个提供 SSL 证书服务的平台,为注册用户免费提供 3 个一年期单域名 SSL 证书。

SSL 证书对于网站安全性至关重要,它不仅能保护用户隐私,还能提升搜索引擎排名,增强网站的竞争力。

领取地址

下面是 DNSHE 官网地址,活动的截止时间为 2024 年 12 月 31 日:

在证书申请过程中,需生成 CSR 文件,可以使用以下网站在线生成:

申请步骤

点击上面的 DNSHE 官网地址,即可看到证书订购页面,确认金额为 0,点击立即订购:

在跳转的页面中找到并点击结账「可以返回之前页面,重复下单三次」

系统处理成功后会提示等待配置,点击页面下方立即配置进入申请页面:

在证书申请过程中,需生成 CSR 文件,我们通过上面网站在线生成:

返回配置页面,填写域名相关信息完成证书申请,中间需要根据提示填写域名验证信息:

填写完所有信息后,即可等待证书下发。下发后可进行重新签发、下载 SSL 证书等操作:

注意事项

用户可通过访问 DNSHE 官网,注册成为用户,然后按照提示绑定域名,完成 SSL 证书申请和安装。

每位注册的用户限领 3 个单域名证书。

证书有效期为一年,到期后可按需求续费或选择其它解决方案。

如有多个网站,可以将这些证书分别用于不同的域名。

图床审核出现误判解决方法

2024年12月17日 00:00

有小伙伴反馈在使用去不图床上传图片时,出现上传成功却提示图片的审核失败,还有一些正常图片被误判为违规等类似的情况发生。本文简单剖析出现的原因及问题解决方法。

数据流向

通过下图可以看到,当图片开始上传后,首先图床会将数据发送给审核 API 判定是否违规,如违规会反馈失败。反之则存放至节点,并返回外链的地址:

原因剖析

审核失败及误判的原因是 API 处理错误导致。通过日志反馈的信息可判断,是因图片格式标注错误导致审核失败。有小伙伴可能好奇,图片格式怎么还会标注错误?其实现在很多图片都是存放在类似 OSS 的存储空间中,这类服务会自动转换图片的格式,使其可以用更小的流量在网络中传输。而图床是根据文件后缀判断图片格式,如果实际格式和标注格式不一致,就会导致审核失败:

还有一个原因是不支持图片格式。虽然去不图床支持的图片格式有 JPEG/JPG/PNG/GIF/BMP/ICO/WEBP,但 API 仅支持 JPEG/JPG/PNG/GIF/BMP。杜老师已联系 API 的开发者建议支持新格式,期待可以尽快更新:

解决方法

除了前面的两个原因外,最直观的原因就是图片确实违规,这时可以针对图片进行修改,例如添加水印、区域截图等等,避免再次出现违规结果:

聊天广场中有小伙伴反馈过,可以尝试使用图片压缩工具进行处理,不仅可以减少图片大小,还可以提升审核成功及通过机率「暂未亲测」

工具地址

怕小伙伴们找不到趁手工具,杜老师找了款在线开源图片处理工具,访问下面的网址即可打开和使用。该工具类似 PS,支持中文界面:

下方的链接为在线开源图片批量压缩工具,最大支持 20 兆图片压缩,最多支持 10 张图片同时操作。可设置压缩的大小、质量、输出格式参数:

广州游记「多图预警」

2024年12月14日 00:00

今天杜老师要和大家分享的,是广州这座古老而又现代的城市,如何在忙碌的工作中找到属于自己的节奏和乐趣呢?就让杜老师在出差闲暇之余,拍摄几张景色与美食的图片,带小伙伴们领略广州的魅力!

广州之旅

广州,这座古老又现代的城市,总以它独特的方式,诉说着岁月的故事。

穿梭在高楼大厦间,感受广州现代气息。傍晚时走在珠江边,轻风拂过,仿佛能听到历史的低语。广州塔在风中静静伫立,见证着这座城市的变迁。

在白云山的绿意中,风带着清新的空气,让人心旷神怡。

广州不仅是一座历史与现代交融城市,更是美食天堂。

在广州早茶不仅仅是一顿饭,更是一种生活态度。一壶小茶,几笼点心,悠闲享受一个上午,这是广州人的日常。

虾饺、烧卖、肠粉,每口都是满满的幸福感。

走在上下九步行街,各种街头小吃让人目不暇接。牛杂、鱼蛋、糖水,每一口都是广州的味道。

在广州不能错过正宗的粤菜。从白切鸡到煲仔饭,从蒸鱼到烧鹅,每一道菜都是对食材和火候极致追求。

游记留影

飞机餐里的橙汁还是不错的,但面包和希腊酸奶有的一拼,都一样的噎人,脖子抻出去二里地才咽下去:

第一次品尝广州正宗的汤品,叫什么杜老师已经不记得了,只记得它很贵!贵的心碎:

具体的菜名忘记了,只知道雪花小牛肉确实不错,但是杜老师觉得它不值 199 这个价:

啫啫蚝烙,记住的原因是因为它好大一盘子,但是它好多油,能把人腻到的那种。味道无功无过:

煲仔饭也是无功无过的味道,总结,这是一顿失败的饭。而且!这是杜老师吃的第一家,热水还要收费的店!收了 18 块:

广州夜晚的江边很舒服,吹吹风仿佛收费的热水也随着风被吹走了。想起热水收费还是很气:

走了半天看到一个教堂,结果人家已经关门,只能站门外拍两张,如果不是杜老师眼神好,大晚上的很容易把这个教堂忽略,黑漆漆的还挺吓人:

从大门看,里面教堂黑漆漆的,这不比鬼屋啥的有氛围:

酒店的第一碗早餐,反正就是个粉:

杜老师没吃饱,再来碗面:

终于找到一家好吃的茶餐厅,纠结于吃饱还是灌一个水饱:

粥很好喝,但是又忘记它叫什么了:

豉汁山药排骨,清淡且保留食材的新鲜,味道不错:

强烈推荐这道,它没有那种内脏的臭味,全是百叶的脆爽感,吸饱了慢慢的汤汁,味道绝佳:

虾饺一绝,不过这边的菜量小,一份只有三个:

红米肠也是强烈推荐的,并且是店家的招牌,蘸着蘸料,米肠包裹内馅酥脆,虾肉紧实弹牙,蘸料又为它增加了一丝独特风味:

蛋挞不是特别甜的,口味适中,就是吃多了有点腻,杜老师吃一个就顶到了:

这边烧麦是肉馅的,味道清爽不腻。奈何是最后才上的,实在吃不下了:

饭后去永庆坊消食,窄窄的一条街,好多的人:

地图看着四通八达,逛了半天发现自己只逛了其中一条街,这个地方实在是太大了:

李小龙祖居感觉很新奇:

这是粤剧艺术博物馆的外面,景色很美:

前面拦着没法通过,好想看看有没有可乐桶那么大的鲤鱼:

有鱼,不过不大,不知道味道怎么样:

湖中央的戏台,开戏时间太晚,没有等到,只能拍了照以慰藉遗憾:

走出来啦,永庆坊的散步,买点手办结束此次出行:

上海游记「多图预警」

2024年12月11日 00:00

一到年底,工作量就特别的多,这次杜老师被安排上海出差,正好趁着机会,好好游玩一番!上海这座城市,不仅仅是繁华,更是充满了故事和风情。文中是杜老师工作之余拍的上海风情,一起感受这座城市的速度与温度!

上海之旅

清晨上海,从一碗热腾腾的生煎包开始。走在南京路上,看着忙碌人群,感受着这座城市的脉动。

午后,漫步外滩,黄浦江两岸建筑群让人目不暇接。东方明珠、上海中心大厦,每一座建筑都讲述着上海的故事。

当然,上海的美食也是不容错过的。从地道本帮菜到世界各地的佳肴,每一口都是对味蕾极致诱惑。

夜幕下的上海,更是别有一番风味。无论是在新天地小酒吧,还是在黄浦江上的游轮,都能体验到上海夜生活。

游记留影

脚丫子都疼了才走到的,传说中的——外滩:

路过一个名字很有趣的大学,很业余的大学,哈哈:

上海豫园,很漂亮的建筑风格,门前还有江爷爷的题字:

酒店早饭,鸡汤馄饨超级好吃,杜老师一个人能吃两碗:

没去之前以为武康大楼里边可以参观,去之后发现只能在大街边拍个照,搞笑的是大家都在街边拍照,乌泱泱的人群,堵得厉害:

路过教堂的随手拍,不知道里面是什么样子,不过外面看着挺漂亮的:

夜游黄浦江啦,码头入口找了半天,走的满身大汗:

虽然不是第一次坐游船,但这感觉还蛮兴奋,就是有点冷了:

同行的旅客都在关注着景色,杜老师就一个想法,这江风吹的好冷啊:

夜晚的东方明珠和白天的相比有中不一样的美:

杜老师住的地方距离这里比较远,不知道在这江的对面住一晚要多少钱:

这个游船开的速度,还没杜老师走的快:

感谢来自 hehe 童鞋的礼品

2024年12月8日 00:00

杜老师说运营至今,认识了很多小伙伴。除在评论区交流外,大家也会通过导航栏处「点我在线聊天」沟通。近期收到来自 hehe 童鞋的礼品,这是他的爱人经营一家网上手工店铺,里面有很多的手工艺品,推荐给喜欢的小伙伴们!

有关于 hehe

认识 hehe 童鞋是在今年的年初,因为架设网站时遇到了一些问题,选择杜老师的增值技术支持。

在问题解决后,又帮忙解决了几个小的问题,渐渐熟络起来。

有幸因为出差去了 hehe 童鞋所在的城市,但因为工作及天气原因没能线下面基。

杜老师对这位老哥的评价就是又菜又爱玩,想认识的小伙伴可以去聊天广场,没准就能逮到他了!

礼品展示

hehe 童鞋表示为感谢杜老师长期的技术支持,送了两个由其爱人亲手制作的工艺品:

杜老师在众多小玩偶中,选择了一个加菲猫和一个牛肉果:

加菲猫大一些,被杜老师的爱人抢走了,不知道挂在了哪里:

牛油果小一些,杜老师挂在了书包上面,希望可以耐脏一些:

礼品官网

除了上面图片中的玩偶,还有挂件、包包、摆件、盆栽、发卡、帽子:

官网截图

如果有喜欢的玩偶,可以打开上面官网,点击右上角关于我,添加页面中的聊天方式,沟通下单即可:

感谢来自开往项目组的礼品

2024年12月5日 00:00

前段时间突然收到来自开往项目负责人的私信,说为了表示对开往项目支持,会赠送一个小礼品。杜老师告知地址后,没过几天就收到了一个礼品,礼物虽小但情谊重,这里再次推荐一下开往项目!

项目介绍

开往 Travellings 是一个友链接力项目,旨在通过网络跳转方式将流量引入那些鲜为人知的独立站点,从而推动网络的开放性和多元性。

该项目于 2020 年 3 月 12 日诞生,灵感来源于开放的网络。其 Logo 由代表世界的星环和代表穿梭的列车组成,寓意在网络世界中穿梭。

每当用户访问加入开往 Travellings 网页时,点击该网页上的开往按钮将随机跳转到另一个加入该项目的网页。无论再次点击开往还是后退网页,都会继续随机跳转到其他参与者网页。

随着越来越多的网页选择加入开往 Travellings 行列,友链网络也在不断扩大,这将进一步推动分享流量的增长,为本项目注入更多活力。

礼品展示

刚打开快递盒,感觉非常惊喜,小小的礼品包装很精致,还添加了纸条防止邮递损坏:

打开里面的礼品盒,首先映入眼帘是一封感谢信,简单说明了开往负责人交替关系:

小礼品是一个亚克力材质的徽章,上面是开往 Logo,背面有别针可以挂在衣服上「其实弄个贴纸或冰箱贴会更好些」

徽章正面有个薄膜,开始杜老师不清楚,怎么拍就感觉模糊,撕掉后的效果还是很不错的:

聊聊项目

开往是个以跳转功能为主的友链接力项目,其名字开往取自开放的网络。

将开往放入您网页,表示乐于分享并支持开放的网络。

每当有人访问加入开往的网页时,点击开往会随机跳转到另一个加入开往的网页。

之后,再次点击网页的开往或后退网页,将继续随机跳转到另一个加入开往的网页。

我们希望这个项目能让友链接力下去,让更多的网页获得流量。站长也可以用开往互相交友。

所以博主间的互动,可以带来流量,及创作的热情。而开往项目就提供一个平台,方便博主之间随机跳转,认识新朋友的同时,也会给自身的博客带来流量,在这里也祝福该项目能越办越好!

项目地址

开往项目官网地址:

1Panel 专业版低价租用

2024年12月2日 00:00

越来越多小伙伴开始选择 1Panel 面板,1Panel 专业版提供的 WAF 和网站监控报表等功能非常好用。不过官方已经不再提供永久版的购买渠道,目前只能按年订阅。杜老师这边囤积了几个专业版激活码,现提供低价格租用服务。

功能列表

以下是社区版和专业版通用功能:

  • 应用商店
  • 网站管理
  • 多种类数据库管理
  • 容器管理
  • 文件管理
  • 主机性能状态监控
  • 网页终端
  • 防火墙及端口转发
  • 进程管理
  • 远程连接管理
  • 计划任务
  • 日志审计

以下是专业版特有功能:

  • WAF 防火墙
  • 网站防止篡改
  • 自定义 Logo
  • 显卡监控
  • 网站监控报表
  • 定制主题配色
  • 内网代理模式
  • 定时病毒扫描

界面效果

激活专业版后,点击左侧面板设置,可看到主题颜色会多出一个自定义项:

如果激活专业版后,发现左侧没有高级功能,可以前往面板设置,找到高级功能菜单隐藏,将所需功能项设置显示即可:

租用价格

下面截图来自官网,可以看到官方的价格是每年 360 元,杜老师这边价格是 90 元一年:

杜老师收到支付款项后,会通过邮件或者聊天私信发送专业版激活文件,点击右上角升级专业版,上传激活文件即可:

租用规则

  1. 点击文章下方的给作者一杯咖啡,根据喜好选择支付宝或微信支付,金额 90 元,备注「1Panel 专业版」即可;

  2. 可通过邮件或者聊天广场私信杜老师,发送支付截图。杜老师收到后,会通过邮件或者聊天私信发送专业版激活文件,点击右上角升级专业版,上传激活文件即可;

  3. 激活码有效期 365 天,到期后会自动失效。期间可以随时按月退费,最终解释权归杜老师说所有;

  4. 激活码的数量有限,目前还剩四份名额「该信息会实时更新」

WAFPRO 防御加速 CDN 新版上线

2024年11月29日 00:00

上篇文章有小伙伴评论说无畏云没有限值,如果遇到被刷流量情况,很有可能会进入黑名单。本次为小伙伴们推荐的 WAFPRO 防御加速 CDN,其使用了流量包月机制,到达流量后即停止服务,防止额度欠费。

介绍

WAFPRO 防御加速 CDN 是一个基于云网站安全防护解决方案,通过 WAFPRO 防御加速 CDN,可以保护网站免受各种攻击。

包括跨站请求伪造、拒绝服务攻击、跨站脚本攻击。

价格

目前套餐价格如下:

套餐流量带宽月价季价年价
个人月 100GB20Mbps39 元88 元299 元
基础月 500GB30Mbps109 元320 元1090 元
标准日 3000GB50Mbps399 元1190 元3999 元
专业日 12000GB100Mbps998 元2900 元9888 元
标准日 45000GB300Mbps2999 元8990 元29999 元

WAFPRO 个人版年付优惠计划,原价基础优惠 200 元,现价 99 元,购买时填入下面优惠码:

wafprovip

官网

WAFPRO 有新旧两个版本,旧版本使用较复杂,这里提供新版本的官网链接:

截图

打开官网并登录后,可以看到网站概览,包括带宽、流量、请求数等信息:

WAFPRO 与后付费 CDN 不同,其使用流量套餐包月制,不会出现额度透支情况。对于不确定使用量,及经常被攻击的小伙伴,WAFPRO 是很不错的选择:

无畏云 CDN 加速免费依旧

2024年11月26日 00:00

在数字化时代,网站的访问速度和稳定性对用户体验至关重要,无畏云 CDN 正是针对这一需求而生,为广大站长提供高效且免费的 CDN 加速服务。本文将介绍无畏云 CDN 的功能、优势及在实际中的应用效果。

平台介绍

无畏云 CDN 是一家融合 CDN 的解决方案提供商,通过整合华为、阿里、火山和 AWS 等顶级厂商的资源,构建一个强大而稳定的节点网络。

无畏云 CDN 在全球范围内拥有几百个节点 IP,覆盖六大洲的主要区域,确保用户无论身在何处,都能享受到快速稳定的访问体验。

功能优势

无畏云 CDN 给予新注册用户每月 30GB 免费流量,这对于小型网站和个人博客来说无疑是一个巨大的福利大大减轻了流量费用的负担。

无畏云 CDN 利用融合的 CDN 技术,实现全球范围内的节点覆盖,这意味着用户的最终访问请求总能被引导至最近的节点,从而显著提高访问速度和稳定性。

无畏云 CDN 后端主要采用华为、阿里、火山和 AWS 基础设施,这些厂商在可靠性和性能上都有着极高的声誉,通过这样合作,无畏云 CDN 能够为用户提供 99.9%服务质量保障。

无畏云 CDN 提供一键开启 HTTPS 和 IPv6 的功能,使得用户可方便地提升网站的安全性和兼容性,控制面板设计简洁直观,即使是初学者也能轻松上手。

官网地址

已经恢复正常使用的无畏云官网:

平台截图

需要注意的是,无畏云使用境内的节点,这意味着用户需要实名验证,且域名需备案才可正常访问:

如果赠送流量不够,也可以购买流量包。支持自选流量包大小及有效时长,价格相比市面的 CDN 便宜很多:

新版本不蒜子统计平台使用说明

2024年11月23日 00:00

杜老师不蒜子统计平台运营至今,经过星辰童鞋版本迭代,增加了很多新功能。更为值得称赞的是,版本升级并没有 BREAKING CHANGE,新版本仍兼容旧版本的调用脚本。使用旧版本的小伙伴不升级脚本也可继续使用!

再次感谢

再次特别感谢星辰童鞋,杜老师自建的国内不蒜子统计平台使用的就是他的开源代码,并且在测试过程中,提供了大量的帮助。

通过 Golang+Redis 实现模仿不蒜子统计功能;UV 通过 IP+UA 统计,PV 通过 Referer 区分。

服务器的配置为 2H4G,下行带宽为 100M,上行为 5M。

主机位于北京,所有流量走境内 CDN。

食用方法

如果是 Volantis 主题:

1
2
3
4
############################# Analytics ############################# > start
analytics:
busuanzi: https://npm.onmicrosoft.cn/penndu@16.0.0/bsz.js # 修改这里即可
############################# Analytics ############################# > end

如果非 Volantis 主题:

1
2
3
4
5
<script defer src="https://npm.onmicrosoft.cn/penndu@16.0.0/bsz.js"></script>
本文总阅读量 <span id="busuanzi_page_pv"></span>
本文总访客量 <span id="busuanzi_page_uv"></span>
本站总访问量 <span id="busuanzi_site_pv"></span>
本站总访客数 <span id="busuanzi_site_uv"></span>

如果是 Butterfly 主题,需修改文件 layout/includes/additional-js.pug,位于 72 行左右:

1
script(async data-pjax src='//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js')

改为:

1
script(async data-pjax src='//npm.onmicrosoft.cn/penndu@16.0.0/bsz.js')

可选参数

在非 Volantis 主题使用方法基础上,可以添加如下参数:

属性默认阈值释义
data-apihttps://bsz.dusays.com:9001/api不蒜子 API 地址
pjaxfalse是否监听 Pjax 的变化
data-prefixbusuanzi标签前缀

使用示例

在一些启用了 Pjax 技术的网站, 可以在 js 标签中加入 Pjax 属性, 来实现当网站切换页面时自动更新页面计数的效果:

1
<script defer pjax src="https://npm.onmicrosoft.cn/penndu@16.0.0/bsz.js"></script>

可使用 data-api 属性, 指定后端 API 的接口:

1
<script defer data-api="https://bsz.dusays.com:9001/api" src="https://npm.onmicrosoft.cn/penndu@16.0.0/bsz.js"></script>

可使用 data-style 属性, 指定数据的显示样式。默认显示完整数据,short 显示短形式, 如 1024 显示为 1k;comma 以逗号分隔数据, 如 1024 显示为 1,024:

1
<script defer data-style="short" src="https://npm.onmicrosoft.cn/penndu@16.0.0/bsz.js"></script>

不同于原版本, 为了更加精简去除了 value 字符, 仍然可以通过指定 data-prefix 属性来进行兼容:

1
<script defer data-prefix="busuanzi_value" src="https://npm.onmicrosoft.cn/penndu@16.0.0/bsz.js"></script>

开启 OpenResty 的 QUIC 支持

2024年11月20日 00:00

QUIC 是种基于 UDP 实现的传输层协议,由 Google 提出,旨在减少握手延迟,实现快速连接建立、多路复用、连接迁移功能。本教程分享如何在 OpenResty 开启 QUIC 支持。

准备工作

确保已经成功安装了 OpenResty。如果看到 OpenResty 的欢迎页面,说明安装成功。

OpenResty 通过集成 Nginx 并利用其模块化特性支持 QUIC。需要在 Nginx 配置文件中启用 QUIC 支持。通常涉及到配置监听 UDP 端口,因为 QUIC 运行在 UDP 上。

OpenResty 从 1.25 版本开始支持 QUIC,如果是之前的版本,需要自行编译安装模块以支持 QUIC。

使用支持 QUIC 的客户端工具测试 QUIC 连接是否成功建立。

监听端口

对于每个站点,需在 Nginx 配置文件中为 QUIC 配置监听端口。由于 QUIC 运行在 UDP 上,需为每个站点配置一个监听 UDP 端口的指令。例如,如果有两个站点 site1site2,可以这样配置:

1
2
3
4
5
server {
listen 443 quic reuseport;
server_name site1.dusays.com;
# site1 的其它配置...
}

这里的 443444 是用于 QUIC 的 UDP 端口,quic 指定 QUIC 协议,reuseport 是为了提高性能:

1
2
3
4
5
server {
listen 444 quic reuseport;
server_name site2.dusays.com;
# site2 的其它配置...
}

端口复用

如果在一台服务器包含多个网站,其中一个网站添加 reuseport 参数后,则其它网站无法再次添加 reuseport 参数:

1
2
3
4
5
server {
listen 443 quic reuseport;
server_name site1.dusays.com;
# site1 的 QUIC 加密和伪装配置...
}

多次添加 reuseport 参数会提示端口冲突,这时可以删除其中的 reuseport 参数,或者使用不同的 UDP 端口。例如:

1
2
3
4
5
server {
listen 443 quic;
server_name site2.dusays.com;
# site2 的 QUIC 加密和伪装配置...
}

测试连接

使用支持 QUIC 客户端工具测试每个站点的 QUIC 连接是否成功建立,这可以帮助验证服务器端的配置是否正确:

推荐一款文字修仙摸鱼页游

2024年11月17日 00:00

博文拖更好久,不知道发点什么好。刚好在 GitHub 上发现一款有趣的文字修仙网页游戏,可以直接托管在 Vercel,也可架设在个人服务器。杜老师已经部署好,欢迎小伙伴们前来体验!

游戏截图

游戏页面清爽直接,小伙伴们可以通过点击文字进行交互,部分选项标有注释,通过点击即可获取提示信息:

游戏方法

首先领取新手礼包,礼包的装备可刷新,装备的级别从大到小分别是天地玄黄。

装备好后,即可开始修练。

到一定级别后,需要探索秘境刷一定数量怪,才可继续修炼。

剩下的就请小伙伴们自行探索了!

在线摸鱼

如果感觉在页面中操作不便「该页面中无法使用右键」点击 这里 在独立页面中打开游戏:

注意事项

游戏数据存于浏览器本地缓存中,杜老师说不会保留任何用户数据,也请大家做好数据备份,避免因缓存清理等原因丢失游戏记录。

如需备份可以点击页面下方游戏设置——导出存档,再次导入即可恢复进度。

终端美化工具 X-CMD 安装与使用

2024年11月14日 00:00

X-CMD 是一款强大的终端美化和功能增强工具,它通过模块化设计和集成的包管理器,为用户提供丰富的功能和便捷的使用体验。无论是日常的命令行操作还是开发环境的搭建,X-CMD 都能提供有效的支持。

概述

X-CMD 是一款开源轻量级 POSIX 脚本工具,集成了 500+语言、工具,不需要 root 权限即可使用,提供了原生命令的增强以及现代化的命令行界面 TUI。

本文将详细介绍 X-CMD 安装、基本使用及一些专业术语和功能特性。

安装

X-CMD 支持在主流 POSIX shell 系统环境下运行,包括 bash/zsh 等。以下是在 Linux 系统的安装步骤,打开终端,输入以下命令之一来安装 X-CMD:

1
eval "$(curl https://get.x-cmd.com)"

或使用 wget,这将下载并执行 X-CMD 安装脚本,自动配置环境变量,使得 X-CMD 命令在任何新终端会话中可用:

1
eval "$(wget -O- https://get.x-cmd.com)"

使用

X-CMD 自带的包管理器 x pkg 可以快速安装并管理脚本引擎,例如 Node.js/Python 等。例如,安装并切换 Node.js 版本,使用下面命令安装并切换到指定版本的 Node.js:

1
2
x env use node=v20.11.1
node -v

支持快速执行代码,如 Python 和 Node.js,下面命令允许用户在不安装语言环境的情况下直接运行脚本:

1
2
x python -c 'print("hello x-cmd")'
x node -e 'console.log("hello x-cmd")'

示例

执行 x theme 后,可以预览每个主题在当前终端的显示情况:

增强版 ls 命令,可更方便地查看文件信息和系统信息:

查看进程,交互式查看 ps 数据:

该模块是使用 POSIX shell、awkfind 实现的增强版 cd 命令:

增强版 stat 命令,以 TUI 方式查看当前路径下所有文件的详细信息:

X-CMD 处理 PATH 变量,交互展示当前环境中 PATH 内二进制搜索目录:

增强型 docker 命令:

X-CMD 增强 git 命令:

PM2 安装与使用

2024年11月11日 00:00

在现代的软件开发和系统管理中,进程管理是一个不可或缺的部分。PM2 作为一个强大的进程管理工具,它可以帮助我们管理和保持应用在线状态,自动重启崩溃应用,并提供负载均衡等高级功能。

主要特点

  • 自动重启:应用崩溃时会自动重启。

  • 负载均衡:在多个实例间分配负载。

  • 集群模式:在所有的 CPU 核心上运行应用。

  • 日志管理:实时日志查看和日志持久化。

  • 监控:实时监控应用资源使用情况。

  • 远程管理:通过 API 或者仪表板远程管理应用。

PM2 的安装

PM2 可以通过 npm 命令轻松安装。如果系统暂未安装相关命令,则执行下面的命令「这里以 Ubuntu 系统为例」

1
sudo apt -y install npm

然后在命令行中运行以下命令即可安装 PM2:

1
npm install pm2 -g

PM2 的使用

要使用 PM2 启动一个应用,可使用 start 命令。例如,如果有一个名为 app.js 的 Node.js 应用,可以这样启动。PM2 会启动应用,并在后台运行:

1
pm2 start api.js

重新启动应用程序:

1
pm2 restart api

重新启动所有应用程序:

1
pm2 restart all

重新启动多个应用程序:

1
pm2 restart app1 app2 app3

停止指定应用程序:

1
pm2 stop api

停止所有:

1
pm2 stop all

删除应用程序:

1
pm2 delete api

删除全部:

1
pm2 delete all

使用 list 命令可以查看所有由 PM2 管理应用的状态,这将显示所有应用的 ID、名称、模式、内存使用情况信息:

1
pm2 list

PM2 提供了实时日志查看功能,使用 logs 命令将显示所有应用的实时日志流:

1
pm2 logs

使用下面命令可重启所有由 PM2 管理的进程,可实现零停机重启:

1
pm2 reload all

输入下面命令来保存当前的进程列表,确保在重启后自动加载这些进程:

1
pm2 save

使用下面命令设置开机自启:

1
pm2 startup

使用下面命令取消开机自启:

1
pm2 unstartup

PM2 的命令

PM2 提供了丰富的命令行工具,用于管理应用程序。以下是一些常用的命令:

命令描述
start启动一个应用程序
stop停止一个应用程序
restart重启一个应用程序
delete删除一个应用程序
list列出所有应用程序
monit监控应用程序
dump导出应用程序的配置
reload重新加载应用程序
sendSignal发送信号给应用程序
update更新应用程序

PM2 提供了一种监听应用程序资源使用情况简单方法。可以使用命令 pm2 monit 从终端轻松监听内存和 CPU:

哪吒监控开源、轻量、易用的服务器监控

2024年11月8日 00:00

一天在聊天广场中分享了服务器监控截图,obaby 说感觉不错,想知道如何部署的。杜老师当时拍着 36A 的胸脯郑重承诺当天晚上会发表。然后……就没有然后了!但人不能言而无信,博客不能拖而不更,它来了它来了,它带着忏悔走来了!

工具特点

支持一键安装面板、监控服务,操作便捷。兼容主流系统,包括 Linux 等。

支持同时监控多个服务器的状态,提供历史网络状态、延迟图表,监控网页、端口可用性以及 SSL 证书状态。

支持故障和流量等状态告警,可通过 Telegram、邮件和微信等多种方式提醒。

提供 API 获取服务器状态,支持 WebSSH 和 DDNS 及流量监控。可设置定时和触发任务,并批量执行服务器任务。

服务端的部署

在面板服务器,运行安装脚本:

1
curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh

如面板服务器位于中国大陆,可以使用镜像:

1
curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh

等待 Docker 安装完毕后,根据实际的情况分别输入以下值:

1
2
3
4
5
6
7
OAuth 提供商
Client ID
Client Secret
用户昵称
站点标题
访问端口
Agent 的通信端口

安装结束后如一切正常,此时可以访问 IP+端口号查看面板:

1
http://IP:8008

客户端的安装

哪吒监控的被控端服务被称为 Agent,这里主要讲解如何在 Linux 中安装 Agent「支持大部分发行版」首先在管理面板添加一台服务器,然后在被控服务器中运行下面的脚本:

1
curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh

如被控服务器位于中国大陆,可以使用镜像:

1
curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh

脚本运行后选择安装监控 Agent,输入服务端的通信 IP 或者域名如:

1
nezha.dusays.com

输入服务端的通信端口,默认如下。之后再输入 Agent 密钥,Agent 密钥在管理面板添加服务器时生成,可以在管理面板中的服务器页中找到:

1
5555

效果展示

支持实时监控多台主机运行情况,含 CPU、内存、硬盘、网络、负载、进程等等:

可对各项服务状态进行监控,包括端口、网页、SSL 等:

可监控各主机网络状态,查看延迟:

支持多款主题切换,支持日间、夜间模式切换:

PCDN 和近期网络攻击频繁的那些事

2024年11月5日 00:00

前段时间接到父母电话,说有自称宽带运营商的工作人员上门检查。父母的安全意识还是很好的,担心会动手脚,人家还没进门,电话就过来了。这让杜老师想起 PCDN 事件,今日整理相关内容,给小伙伴们普及下!

什么是 PCDN

PCDN 或 P2P 是一种基于 P2P 技术和 CDN 的内容分发加速网络。它通过在网络中添加大量的低成本缓存服务器,将用户请求的内容从原始服务器分发到这些缓存服务器,从而实现内容更快、更稳定传输到终端用户。

随着网络技术发展,我们对大带宽的需求也不断增长。各大站群为了用户访问体验,通过 CDN 将用户的请求直接发送到用户所在城市的服务器,从而实现快速、稳定访问。

在内容分发网络服务领域业界普遍采用两种主流的计费模式:流量计费、带宽计费。无论选择哪种计费方式,随着流量的增加其运营成本相应上升,对于任何规模的网站都是一个不容忽视的经济压力。

大型网站由于其庞大的用户基础和高流量需求,对 CDN 服务的依赖则更为显著,因此成本控制成为其运营中关键环节。在这样背景下,一些领先的技术公司开始探索利用家庭宽带资源以优化成本结构。家庭宽带通常有较高的下行速率,而上行速率则相对较低,且普通用户往往未能充分利用其上行带宽。

为更高效地利用这些未被充分利用的上行带宽资源,一些企业推出了挂机宝。这类服务通过在用户设备上部署特定软件,利用用户的闲置带宽进行数据缓存和存储。在需要时,这些数据可以通过用户的家庭网络传输给其他的需求方,从而在减轻大型网站 CDN 负载同时,也为用户带来一定激励回报。

这种模式不仅有效降低了大型网站对传统 CDN 节点的依赖,降低运营成本,而且在经济上对用户也具有一定的吸引力。尽管需要向用户提供一定的激励,但与高昂的 CDN 节点带宽费用相比,这种成本节约是显著的。通过这种方式,企业能够以较低的成本扩展其 CDN 网络,同时为用户提供了一种将闲置资源变现的途径,实现了双方的共赢。

运营商限制 PCDN 原因主要

网络压力:PCDN 产生的海量流量对运营商的骨干传输网络形成了巨大压力。由于用户宽带通常是包月的,而不是按流量计费,因此用户使用越多,运营商网络的压力越大,而且运营商并不能因此收到更多费用。

盈利影响:视频类服务商搭建常规 CDN 服务节点需要租用运营商的高价机房和带宽。而用 PCDN 后,服务商对资源租用需求大幅减少,这直接影响了运营商的盈利。

安全风险:PCDN 节点与其它设备存在数据交互,可能导致隐私数据泄露,甚至产生安全漏洞,遭到恶意攻击。

成本问题:PCDN 业务会导致设备长期开启,增加电能浪费,影响硬盘寿命,甚至整个设备寿命。

PCDN 节点的排查逻辑

运营商对 PCDN 的打击已经产生了扩大化影响。一些地方运营商的政策更加激进,如全面回收 IPv6 地址、限制网络连接数量、网络类型改为 NAT4 等。

运营商需要对网络流量进行监控,区分正常上行流量和 PCDN 流量。这无疑又增加了人力和物力成本,所以大多数运营商都选择封杀 PCDN。

在现代互联网架构中运营商通过精细化的流量数据分析技术,对用户的网络行为进行深入洞察。特别是对上行和下行流量的对比分析,已经成为识别 PCDN 行为的关键指标之一。

普通用户在互联网中主要扮演资源获取者的角色而非资源提供者。因此,从流量分布的一般规律来看,用户的下行流量通常会显著高于上行流量。

这种流量分布的不对称性是家庭宽带非对称带宽特性的直接体现。所谓的非对称带宽,是指在数据传输过程中,上行和下行的带宽速率存在差异,通常情况下下行带宽会高于上行带宽,以适应用户更多下载而非上传的需求。

然而,在特定情况下,如果监测到用户的上行流量异常高甚至超过了下行流量,亦或者上行流量与下行流量的比例超出了正常阈值,这可能表明用户正在作为资源提供方参与到 PCDN 活动。PCDN 利用普通用户的闲置资源,通过 P2P 技术实现内容的分发,这在一定程度上改变了传统上下行流量的分布比例。

近期网络攻击频繁猜想

所谓,上有政策,下有对策。PCDN 服务商面对这种筛查机制,也有其应对的方法「以下内容是杜老师对近期网络攻击频繁的猜想,信息来自于互联网」

上面提到筛查的规则是判断上下行流量的比例,所以一些 PCDN 服务商开始使用刷流量的方式躲避筛查。

他们会在闲时「一般指午夜后」下发指令给 PCDN 设备,使其访问互联网的部分站点,来获得大量的下行流量。

很多博主反馈自己网站在后半夜会有短暂的高流量访问,很有可能就是因为 PCDN 刷流量导致。

面对这种情况,杜老师采用的方式就是根据时段限制流量,如闲时段可以限制带宽,或者流量上限。如触发后及时中断流量,避免因流量造成的资金损失。

最后补充一句,除 PCDN 之外,部分运营商对 PT 的政策也开始收紧了。杜老师的想法非常简单:要么别给那么高的带宽,既然给了,就不要限制我们的使用!

FAST OS DOCKER 容器管理器的安装与使用

2024年6月20日 00:00

今天给小伙伴们分享一款来自于国人大佬开发的一款 Docker 的图形化管理工具,原生中文支持,拥有 Portainer 的大多功能,且界面更简洁好看,适合国人审美。

工具简介

FAST OS DOCKER 和 Portainer 差不多,是一款 Docker 的图形化管理工具。

可为用户提供总览、本地容器管理、远程镜像拉取、主机磁盘映射、服务器网络管理等功能,基本能满足中小型单位对容器管理的全部需求。

工具优点

无需复杂命令,全图形化操作,基本上只需要懂一点点的 Docker 常识就能轻松构建容器。

界面直观简洁,对应功能也是一目了然,那怕新手小白也能快速上手。

FAST OS DOCKER 的后端语言是 Go,前端框架是 Vue,且拥有全面的权限管理机制。

为防止服务器负载过高,进行底层性能优化,较适合 NAS 这种入门级服务器部署安装。且集成 Docker 镜像应用市场,可直接快速安装和部署。

安装步骤

连接服务器后,切换至 root 权限,运行如下命令:

1
2
3
4
docker run --name fastos \
--restart always -p 8081:8081 -p 8082:8082 -e TZ="Asia/Shanghai" -d \
-v /var/run/docker.sock:/var/run/docker.sock -v /etc/docker/:/etc/docker/ \
-v /root/data:/fast/data -e FAST_STORE=http://8.210.124.47:8080 wangbinxingkong/fast:latest

安装完成后在浏览器访问 http://IP:8081。首次登录需要注册,注册成功即可正常使用:

简易教程

主机 Docker 情况总览页,查看硬件配置,Docker 文件安装根目录,主机系统,容器数量,镜像数量,数据卷以及网络环境等配置:

可在镜像菜单处理镜像相关操作:

选择默认简单模式,输入镜像名可拉取镜像:

也可选择高级模式,输入 fromImage=php:7.3.5-fpm&fromSrc=daocloud.io/library/nginx:1.17.8 类似格式字符可拉取镜像:

或者选择搜索模式,搜索后再拉取:

进入数据卷菜单页,删除或添加数据卷:

进入网络菜单,设置网络,添加网络:

进入容器菜单,可实现对容器的增删查改等操作,还可查看日志,监控容器,控制台连接容器等:

进入登记菜单,可以登记第三方私人镜像库,登记后可拉取私人仓库镜像:

进入集群菜单,可连接其它服务器,操作其它服务器的容器,镜像:

群晖 NAS 删除重复文件的两种方法

2024年6月17日 00:00

因工作需求要录制大量教学视频,杜老师的 4K 屏使得录制的视频文件大小会很大,想转存至 NAS 时,发现 NAS 已出现空间告警。通过存储分析发现 NAS 上有大量的重复文件,故此分享两种删除重复文件方法。

使用存储空间分析器删除重复的文件

首先进入到存储空间分析器套件,找到下方报告,点击立即分析报告:

稍等一段时间后会出现报告,即可点击右侧的箭头查看报告:

在报告页面的左侧选择重复文件,如果有多个共享文件夹,可通过筛选分别显示各个目录的重复文件:

如果担心有误删的情况,可以点击操作选择对所有的文件执行细微比较。之后就可以根据颜色来区分组别,勾选需要删除的文件就行了:

使用 Duplicate Cleaner Pro 删除重复的文件

存储空间分析器的删除方式比较麻烦,因为不能快速选择,且每次分析的重复文件数有限制。可通过第三方工具,如 Duplicate Cleaner Pro 删除重复文件。首先设置搜索规则:

接着设置扫描位置,可通过 SMB 协议挂载需查重的目录,添加到右侧的查重列表:

Duplicate Cleaner Pro 可扫描所有重复文件,并可快速选择重复文件:

在删除标签页选择删除模式,点击删除文件即可:

去不图床五周年蹭风 618 活动

2024年6月14日 00:00

不知不觉,去不图床即将运营了五周年「周年日 10 月 28」期间做过一些价格调整「大幅降价」但从未做过任何的活动,自杜老师自建 CDN 后,流量成本得到保障,虽依然有亏损,但不影响持续运营,今蹭风 618 开展优惠活动,感谢小伙伴们对去不图床的支持与活动的积极参与!

写在前面

去不图床从 2019 年 10 月 28 日始至今年即将满五年,期间由免费转为按量付费的图床。

相比其它平台高额的包月费,去不图床始终保持低价、年费、稳定、安全及高速等优势,广受博客圈小伙伴们支持与选择。

然而即便如此,去不图床依旧入不敷出,高昂的流量费是收入无法填补的。

好在今年杜老师开始自建 CDN,保障了流量费用的支出,虽然节点运营成本依旧高昂且超过了收入,但也减少了杜老师运营压力。

杜老师提供图床服务的初衷就是:为广大博客主提供低价、稳定、安全、高速图床服务,让博客主可以专注创作,而不是费心在管理图床。

去不图床从未做过推广、宣传,故此借助 618 这一风,开展优惠活动,感谢小伙伴们对去不图床的支持与活动的积极参与。不忘初心,方能始终!

活动规则

  1. 优惠活动限 2024 年 6 月 14 日 00:00:00 至 2024 年 10 月 28 日 23:59:59 期间;

  2. 优惠活动期间购买的兑换码,可在任意时间兑换;

  3. 优惠活动期间购买的兑换码,有效期至杜老师临终日;

  4. 如有小伙伴大量囤积兑换码,在未兑换之前,可以随时申请退款「每一个兑换码都会由支付宝收取一元的手续费」

  5. 优惠活动期间,仅限选购 5G 套餐可享受八折「24元」优惠,其它套餐皆不享受优惠;

  6. 优惠活动期间选购的 5G 套餐在当前套餐到期后生效;

  7. 优惠活动期间选购的 5G 套餐无法折算其它套餐;

  8. 最终解释权归去不图床所有。

图床架构

去不图床目前使用 16H32G 的配置,图床程序及缩略图存储在 512NVMe,图片数据存储在 1T 三星企业级 SSD,并周期同步至内网 RAID1 存储节点中。保障图床的安全性及稳定性:

杜老师自建 CDN 节点,所选节点皆为 8H8G 高配置,且上行带宽 30M,保障外链服务的高速性。目前暂为 9 个节点,其中境内 8 个,境外「上行千兆」 1 个:

写在最后

未来不知如何,图床前途未卜!

但杜老师会始终秉持着初心,为小伙伴提供低价且稳定的图床外链服务。

后面是否会有相似活动尚未可知,不过希望大家继续关注去不图床,期待更多小伙伴的参与!

图床容量兑换教程请见《去不图床容量兑换》一文,图床相关使用教程请见《去不图床新版升级计划》一文。

DockerUI 容器管理器的安装与使用

2024年6月11日 00:00

本教程给大家带来 DockerUI 的部署方法,通过 DockerUI 我们可以很方便的创建高权限的 Docker 应用,或者随时将配置文件目录挂载到我们的容器中,再通过容器终端去修改配置文件,只要一直保留 DockerUI 不删除,则完全没有后顾之忧了。

介绍

DockerUI 是一个易于使用且轻量级的 docker 管理工具。通过 Web 界面的操作,它方便不熟悉 Docker 指令的用户更快地进入 Docker 世界。

DockerUI 具有易于使用的界面。它不需记住 Docker 指令。只需下载镜像即可完成部署。根据 Docker 的功能,镜像的版本可以直接在 DockerUI 中更新。使用相同设置,可通过重新部署和替换容器,且可以使用最新版本的功能。

DockerUI 覆盖了绝大多数命令功能。通过可视化操作功能在 DockerUI 接口中提供 Docker 环境和 Swarm 管理和维护功能,可以很容易地执行集群环境。

DockerUI 是用于 Docker 容器映像可视化图形管理工具。Dockerui 可用于轻松构建、管理并维护 Docker 环境。它是完全开源和免费的。基于容器安装方法,可实现方便高效的部署。

安装

启动容器「如本地无镜像,则会自动拉取」并映射 8999 端口:

1
docker container run --rm --name docker.ui -v /var/run/docker.sock:/var/run/docker.sock -p 8999:8999 joinsunsoft/docker.ui

容器启动后访问 http://localhost:8999 即可,默认用户名和密码为 dockerui

截图

主页:

镜像列表:

搜索存储库及拉取镜像:

构建镜像:

导出/导入镜像:

推送镜像:

启用映像:

容器列表:

Web 控制台:

容器文件系统:

容器统计:

列出容器进程:

从容器中导出文件:

网络管理:

Swarm 集群管理器:

创建服务:

任务管理:

任务列表:

注意

本教程绿联和群晖同样适用,但是 DockerUI 作者已经不再维护了,所以可以选择《Potainer 容器管理器的安装与使用

DockerUI 虽不再维护,但只是作为一个高权限 Docker 部署或者配置文件目录挂载使用的话已经绰绰有余了。

to do 工具 Vikunja 的安装与使用

2024年6月8日 00:00

应 LongHe 童靴需求,杜老师更新一篇 to do 开源工具 Vikunja 的安装与使用。本来是四月份应该更新,结果因为各种出差各种事情给耽误了,最后还给忘了~还好回访时看到了自己留言,趁空发出来供需要的小伙伴参考!

特性

  1. 列表视图类似待办事项列表、展示任务、其他属性;

  2. 甘特图可规划截止日期;

  3. 看板可组织任务以及确定优先级;

  4. 表格视图可以查看任务详细信息,标记任务;

  5. 可创建过滤器;

  6. 可确定任务优先级,分配任务;

  7. 可附加文件及关联不同任务;

  8. 可设置截止日期及通过链接共享项目。

部署

Vikunja 支持很多种安装方式,作为 Docker 的忠实用户,杜老师分享四个 docker-compose.yml 配置文件,区别是所使用的数据库不同,以下是 MariaDB 作为数据库的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: '3'

services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: http://<the public url where vikunja is reachable>
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: changeme
VIKUNJA_DATABASE_TYPE: mysql
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_JWTSECRET: <a super secure random secret>
ports:
- 3456:3456
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: mariadb:10
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: supersecret
MYSQL_USER: vikunja
MYSQL_PASSWORD: changeme
MYSQL_DATABASE: vikunja
volumes:
- ./db:/var/lib/mysql
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u $$MYSQL_USER --password=$$MYSQL_PASSWORD"]
interval: 2s
start_period: 30s

以下是 PostgreSQL 作为数据库的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3'

services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_PUBLICURL: http://<the public url where vikunja is reachable>
VIKUNJA_DATABASE_HOST: db
VIKUNJA_DATABASE_PASSWORD: changeme
VIKUNJA_DATABASE_TYPE: postgres
VIKUNJA_DATABASE_USER: vikunja
VIKUNJA_DATABASE_DATABASE: vikunja
VIKUNJA_SERVICE_JWTSECRET: <a super secure random secret>
ports:
- 3456:3456
volumes:
- ./files:/app/vikunja/files
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: changeme
POSTGRES_USER: vikunja
volumes:
- ./db:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"]
interval: 2s

如果仅是个人使用,没有那么大数据量,可考虑使用 SQLite:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_SERVICE_JWTSECRET: <a super secure random secret>
VIKUNJA_SERVICE_PUBLICURL: http://<your public frontend url with slash>/
# Note the default path is /app/vikunja/vikunja.db.
# This config variable moves it to a different folder so you can use a volume and
# store the database file outside the container so state is persisted even if the container is destroyed.
VIKUNJA_DATABASE_PATH: /db/vikunja.db
ports:
- 3456:3456
volumes:
- ./files:/app/vikunja/files
- ./db:/db
restart: unless-stopped

Vikunja 支持将数据存放在 Redis,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'

services:
vikunja:
image: vikunja/vikunja
environment:
VIKUNJA_REDIS_ENABLED: 1
VIKUNJA_REDIS_HOST: 'redis:6379'
VIKUNJA_CACHE_ENABLED: 1
VIKUNJA_CACHE_TYPE: redis
volumes:
- ./files:/app/vikunja/files
redis:
image: redis

截图

Vikunja 的默认主页:

使用列表模式展示任务:

使用甘特图的模式展示任务:

使用台子模式展示任务:

使用看板模式展示任务:

Vikunja 支持全局关键词搜索:

Vikunja 可修改背景图片:

Vikunja 支持切换至夜间模式:

终端

Vikunja 除了 Web 端外,还有其它平台终端。为了方便小伙伴们获取,杜老师已经把所有平台的 APP 转存到了网盘:

下载地址

Potainer 容器管理器的安装与使用

2024年6月5日 00:00

Potainer 是一个轻量级容器管理器,它提供了一种简单而高效的方式来管理 Docker 容器。本篇教程简单介绍 Potainer 的特点、安装过程以及使用示例,如有问题欢迎在评论区留言!

工具特点

  1. 简单易用。Potainer 具有直观的用户界面,使得容器管理变得更加容易,即使对于没有 Docker 经验的用户也能快速上手;

  2. 快速部署。通过 Potainer 可快速部署新的容器,节省了时间和精力;

  3. 资源监控。它提供了对容器资源使用情况的监控,有助于更好地管理系统资源;

  4. 可视管理。Potainer 提供了可视化的界面,可以直观地查看容器的状态和日志等信息。

安装过程

首先,需要确保系统已经安装了 Docker。可通过以下命令来检查是否安装了 Docker。若未安装,可以参考《Docker 的安装》一文:

1
docker --version

接下来使用以下命令安装 Potainer:

1
docker pull potainer/potainer

安装完成后可以通过以下命令启动 Potainer:

1
docker run -d -p 9000:9000 --name potainer potainer/potainer

启动后可以在浏览器中访问下面链接来打开 Potainer 界面:

1
http://localhost:9000

使用示例

登录 Potainer 界面后,将看到一个容器的列表,显示了当前运行的容器。

要创建一个新容器,可点击 Create Container 按钮,填写相关信息,例如容器名称、镜像与端口映射等。

还可以查看容器的详细信息,包括日志和资源使用情况等。可点击相应的容器,在右侧面板中可查看其详细信息。

如需要停止或删除容器,只需点击相应操作按钮即可。

效果截图

登录后的效果如下:

强大的自托管 compose.yaml 管理工具 Dockge

2024年6月2日 00:00

Dockge 是 Uptime Kuma 作者新作品,故 UI 风格与 Uptime Kuma 基本一致。Dockge 主打的是简单易上手,与 Potainer 相比界面简洁易用,新手使用不会感到一头雾水。

优点

  1. 通过 Web 页面管理 compose.yaml 文件;

  2. 拉取等响应式操作输出都会实时显示;

  3. 可以将 docker run 命令转换为 compose.yaml 文件;

  4. 可直接存储 compose.yaml 文件,可使用常规 docker compose 命令进行操作。

缺点

  1. 与 Potainer 等相比功能没那么丰富,例如没有单独管理网络、镜像功能;

  2. 无法接管现有正在运行容器。

安装

创建用于存储堆栈与 Dockge 目录,并进入到目录:

1
2
mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge

创建 compose.yaml 文件并填写如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
version: "3.8"
services:
dockge:
image: louislam/dockge:1
restart: unless-stopped
ports:
- 5001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
- /opt/stacks:/opt/stacks
environment:
- DOCKGE_STACKS_DIR=/opt/stacks

根据实际需求修改上面内容,保存后执行下面的命令启动服务:

1
docker compose up -d

如果需要停止使用,可使用下面的命令:

1
docker compose down

截图

初次访问时需创建管理用户,登录后的效果如下:

Coolify 开源自托管的 Heroku/Netlify/Vercel 替代方案

2024年5月30日 00:00

Coolify 是一个开源、自托管应用程序部署和托管平台,旨在为开发人员提供类似 Heroku、Netlify 和 Vercel 的功能。它允许用户在自己的服务器上部署和管理各种应用程序、静态网站、API 后端服务和数据库等。

特点优势

自主托管:Coolify 允许部署资源到几乎任何服务器上,包括个人的服务器、树莓派等。只需要 SSH 连接,就能管理自己硬件资源。

多语言多框架支持:Coolify 与各种编程语言、框架兼容,可以部署和管理各种类型的应用程序。不论静态网站、API 后端服务还是数据库,Coolify 都能提供强大的支持。

SSL 证书和安全性:Coolify 会自动为自定义域名设置和更新 Let’s Encrypt 证书,确保应用程序的安全和加密连接。用户不需要担心证书繁琐设置和更新,Coolify 会自动处理这些问题。

监控、通知:Coolify 会监控部署、服务器磁盘使用情况等,并在发生任何问题时通过电子邮件等渠道通知。

安装脚本

1
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash

注意:Coolify 支持通过源码及 Docker 等方式部署,上面是来自官方的一键部署脚本,可使用与生产环境。

运行要求


支持操作系统:

  1. 基于 Debian 的 Linux 发行版(Debian/Ubuntu 等)

  2. 基于 Redhat 的 Linux 发行版(CentOS/Fedora/Red Hat/AlmaLinux/Rocky 等)

  3. 基于 SUSE 的 Linux 发行版(SLES/SUSE/openSUSE 等)

    支持系统架构:

  4. AMD64 位架构;

  5. ARM64 位架构。

    所需的最低服务器配置:

  6. 双核心 CPU;

  7. 2048 兆内存;

  8. 30GB 以上的磁盘空间。

运行截图

控制面板:

项目列表:

项目设置:

服务堆栈:

环境变量:

命令执行:

运行日志:

后台设置:

节点设置:

通知功能:

Keys 以及 Tokens:

团队协作:

Web-Check 炫酷强大的网站测试工具

2024年5月27日 00:00

随着互联网普及和发展,Web 应用程序的数量越来越多,各种网络问题也是层出不穷,因而监测这些 Web 应用程序的性能和可用性变得非常重要。今天的文章和大家分享一款十分好用的的网站分析项目!

项目简介

Web-Check 是一款开源网站分析工具,能帮助我们快速的扫描网站,检测网站或主机的信息,发现网页性能和兼容性问题,包括 IP/SSL/DNS/Cookies 等信息。

比如,可帮助检测网页的语法错误、标签关闭、属性错误等等,确保网页的正确性;分析网页性能,提供优化建议,提升加载的速度和用户体验。

安装部署

1
docker run -p 3000:3000 lissy93/web-check

注意:项目支持非常多的部署方式,包括 Netlify/Vercel 的一键部署,Docker 部署和本地源码部署。这里仅以 Docker 部署的方式为例,使用上面的命令部署后,可通过 `IP:3000 访问。

配置设置

API 密钥和凭据:

变量说明
GOOGLE_CLOUD_API_KEYGoogle API 的密钥,这可用于返回网站质量指标。
REACT_APP_SHODAN_API_KEYShodan API 的密钥,这将显示给定域关联主机名。
REACT_APP_WHO_API_KEYWhoAPI 的密钥,这将显示比默认作业更全面的 WhoIs 记录。

配置设置:

变量说明
PORT运行 server.js 时提供 API 的端口(如 3000)
API_ENABLE_RATE_LIMIT为/api 端点启用速率限制(如 true)
API_TIMEOUT_LIMITAPI 请求的超时限制,以毫秒为单位(如 10000)
API_CORS_ORIGIN通过此处设置允许的主机名来启用 CORS(如 example.com
CHROME_PATHChromium 可执行文件路径(如/usr/bin/chromium)
DISABLE_GUI禁用 GUI 页,仅提供 API(如 false)
REACT_APP_API_ENDPOINTAPI 的端点,本地或者远程(如/api)

项目截屏

Web-Check 主界面截屏效果如下,在框中输入 URL,如 https://dusays.com,后点击 Analyze:

等待一会之后即可看到包括 IP/SSL/DNS/Cookies 等信息:

点击 Show Details 可查看详细加载信息:

页面的结尾处可以下载页面扫描报告,未来还支持更多的功能:

iStoreOS 路由系统介绍与安装

2024年5月24日 00:00

最近托管在群晖的 GitLab 非常不稳定,想必是群晖的性能不够用了。想着软路由的性能有很多的冗余,就想移植到软路由。结果运行的爱快怎么都不成,看到前段时间宋童靴的推荐,决定更换到 iStoreOS!

系统介绍

iStoreOS 源于 OpenWRT,重点是做了很多很多的交互简化。iStoreOS 入门极客版本 UI 是默认 UI,目标是提供给懂点技术的入门极客爱好者,或者偷懒极客老手,核心特性:

  1. 首页提供网络向导、磁盘向导、Docker 向导等众多向导,不管新手还是老手,都能快速配置自己想要东西;
  2. 修复众多 OpenWRT 不人性的小问题,如 Samba 设置独立用户名密码很麻烦、磁盘挂载;
  3. 更多首页工具帮手,比如在线升级、各种错误检测、网口图形化配置等;
  4. 其它很多常用功能,如 DDNS 配置、Docker 配置等。

iStoreOS 还提供软件中心,尽可能解决插件之间的依赖关系,可让大家自由自在安装插件。手动安装离线包也是支持的。除此之外,为了方便大家折腾不出问题,避免掉坑,还做了很多防坑操作如:

  1. 救援模式,即是固件完全刷坏,也可以进入救援模式救回来;
  2. 沙箱模式,通过 U 盘进入沙箱模式,后续软件安装更新都在沙箱进行。不管如何安装插件搞坏系统,拔掉 U 盘就会回到上个状态。沙箱模式本身也是系统扩容最简单的方法。

系统截图

iStoreOS 的首页截图:

iStoreOS 的软件中心截图:

准备安装

  1. 一个 U 盘;

  2. 一个可连接软路由的显示器;

  3. 一个键盘;

  4. 一台 Windows 系统的电脑。

系统安装

从官网中下载对应版本固件。请注意看中间日期,如 xxx20221123xx-xxx.img.gz,建议下载最新版本。下载完成之后不要解压。电脑上用 Rufus 做 USB 启动盘。电脑插入 U 盘,选择下载好的固件,把固件写入到 U 盘:

选从 U 盘启动,一般按 F11,选择接入 U 盘,就可以启动了。如找不到 U 盘,那么可能是 U 盘不兼容,需换一个 U 盘。登录 U 盘系统,登录成功之后,输入:

1
quickstart

选择 Install X86 一直按确定:

用 Show Interfaces 查看网线插入到了哪个网口,以及查看当前 LAN 口的 IP。系统写入完成,拔掉外接设备,通电启动。使用如下信息进入后台管理:

1
2
3
4
5
6
# 默认地址
http://192.168.100.1
# 默认用户
root
# 默认密码
password

基于 rsync+sersync 实现文件的同步备份

2024年5月21日 00:00

上一篇我们使用了 rsync+inotify 实现文件的实时同步,inotify 常用于监控目标文件变化。本篇教材说明如何通过 sersync 实现文件的同步备份,底层仍使用 rsync+inotify,优点是只对变化的目录数据操作,甚至是一个文件不同的部分进行同步。

工具介绍

rsync 是一个远程数据同步工具,可通过网络在不同的主机之间快速同步文件和目录。

sersync 是基于 rsync 开发的一款高性能的文件同步工具,它提供了更简单的配置和更好的性能。

部署思路

  1. 在需要进行同步的主机上安装 rsync

  2. 配置 rsync 服务器,在源主机配置 rsync 服务器,允许其它主机通过 rsync 连接并获取文件;

  3. 在目标主机安装 sersync

  4. 配置 sersync 指定源主机信息、要同步文件或目录、同步频率;

  5. 启动 sersync 服务使开始执行文件同步备份操作;

  6. 测试并调试相关的服务,具体的配置步骤可能因操作系统和实际需求而有所不同。

配置参考

以下是一个简单的示例,展示了基本的配置思路。源主机上 rsync 服务器配置:

1
2
3
4
5
6
7
8
9
10
11
# 编辑 rsync 主配置文件
vim /etc/rsyncd.conf
# 添加以下内容
[backup]
path = /path/to/backup/directory
read only = yes
list = yes
auth users = backup_user
secrets file = /path/to/rsync/secrets
# 设置密码
chmod 600 /path/to/rsync/secrets

目标主机上 sersync 配置:

1
2
3
4
5
6
7
8
9
10
# 编辑 sersync 主配置文件
vim /etc/sersync.conf
# 添加以下内容
[source]
rsync_server = server_ip:873
username = backup_user
password = password
remote_src = backup
[destination]
local_dir = /path/to/backup/destination

注意事项

请将上述示例中的路径和用户名、密码等根据实际的情况进行修改。然后启动 sersync 服务并确保其在后台运行。

这只是一个基本的示例,实际配置可能更加复杂,如设置过滤器、排除某些文件或着目录、处理冲突。此外还可使用定时任务或监控工具来自动执行同步操作,并根据需要进行错误处理和日志记录。

在配置和使用 rsync+sersync 进行文件同步备份时,务必仔细阅读相关文档、教程,并根据具体需求进行适当调整和优化。

同时确保网络连接稳定,合理安排同步时间,以避免对业务系统造成影响。如果可能,还可以进行测试和备份恢复演练,以确保备份可靠性和有效性。

基于 rsync+inotifywait 实现文件的实时同步

2024年5月18日 00:00

之前有透露过,杜老师的去不图床使用三点备份,除本地备份外,还有内网存储备份,以及云上备份。而内网存储备份是通过 rsync 实现的,同步周期为每半个小时。近期打算配合 inotifywait 实现文件的实时同步!

工具介绍

rsync 是一个用于文件同步和备份的工具,inotifywait 是一种文件系统事件通知机制。

通过结合用 rsyncinotifywait,可实现文件的实时同步。

工具安装

安装 rsync 软件包:

1
sudo apt -y install rsync

安装 inotify-tools 软件包:

1
sudo apt -y install inotify-tools

服务配置

在源服务器上,创建一个 rsync 的配置文件,如/etc/rsyncd.conf,指定要同步的文件或目录及其它相关设置。

安装并配置 inotifywait,确保 inotifywait 模块已加载。使用 inotifywait 命令监视源目录事件。

编写同步脚本,使用 inotifywait 输出触发 rsync 命令,将更改的文件同步到目标服务器。

设置定时任务或者守护进程,使用 cron 或其它合适的工具定期执行同步脚本以实现实时同步。

示例脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
# 定义源目录和目标目录
SRC_DIR=/path/to/source
DEST_DIR=/path/to/destination
# rsync 的命令
RSYNC_CMD="rsync -avz --delete $SRC_DIR $DEST_DIR"
# inotifywait 的命令
INotify_CMD="inotifywait -mre modify,create,delete,move $SRC_DIR"
# 主题循环
while true; do
# 执行 inotifywait 并捕获输出
output="$(eval $INotify_CMD)"
# 如有事件发生
if [ -n "$output" ]; then
# 则执行 rsync 进行同步
echo "Syncing files..."
eval $RSYNC_CMD
fi
# 等待一段时间(例如 1 秒)
sleep 1
done

注意:这只是一个简要的概述,实际实现可能会因具体需求和环境而有所不同。在这个示例中,inotifywait 命令监视源目录修改、创建、删除、移动事件。当事件发生时,rsync 命令会执行,将源目录中的更改同步到目标目录中。

Artalk 评论工具登录功能使用及反馈收集

2024年5月15日 00:00

Artalk 默认只需填写昵称和邮箱即可发表评论,无需验证邮箱。但有时候,我们希望用户能够使用社交账号登录,以减少用户填写信息的时间,或者提高用户信息的真实性,故此杜老师决定开启社交登录来实现这一目的。

写在最前

作为 Artalk 的内测用户,杜老师第一时间启用了社交登录功能。

近期也会收到一部分小伙伴反馈,说看到登录按键后不太习惯。

这里说明一下启用邮箱密码登录功能后仍然可跳过邮箱验证,登录弹窗底部显示跳过按钮,点击后评论框顶部恢复为显示原有的昵称、邮箱、网址。

另外已经向 Artalk 作者反馈相关建议,期待后期升级更多功能。

同时希望小伙伴们积极提供建议,这边都会第一时间反馈给 Artalk 作者,以满足大家的需求。

本站后期也会对接各大社交平台,目前仅支持用邮箱登录。

食用教程

在启用邮箱密码登录后,评论框顶部的昵称邮箱输入框将隐藏,发送按钮将显示为登录按钮。当用户点击登录按钮后,会弹出一个登录框,用户可输入邮箱和密码登录,登录成功即可发表评论:

用户可以通过邮箱注册账号,将向用户邮箱发送一封带有验证码的邮件。验证码有效期为 10 分钟,验证码发送频率限制 1 分钟一次:

登录后如果检测到相同邮箱下有多个不同用户名的账号,将会弹出账号合并工具,用户可选择保留其中一个用户名,该邮箱下的所有评论等数据合并到保留账号下,而原有的账号将被删除,评论显示的用户名将会变更为保留用户名:

用户发表的评论将展示「邮箱已被验证」标识:

支持同时启用多种登录方式,用户可以选择任意一种方式登录:

如果只启用了唯一一种登录,如 GitHub 登录,将直接弹出 GitHub 授权登录页面:

同款说说页面部署代码分享

2024年5月12日 00:00

在一帮小伙伴的帮助下,杜老师终于完成了对说说页面的美化。对此颇有感概,不会前端是真不行,但就是学不会。该代码匹配 Volantis,可自适应夜间模式,感兴趣的可以尝试部署,有问题就不要问了,杜老师也不会~

特性

  1. 统计用户所发说说条数;

  2. 显示用户头像;

  3. 显示用户昵称;

  4. 显示平台的用户名;

  5. 支持大图显示;

  6. 可一键至说说广场进行评论。

效果

正常的浏览效果如下图:

夜间模式的浏览效果如下图:

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<link href="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/css/style.css" rel="stylesheet" type="text/css">
<link href="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/css/highlight.github.min.css" rel="stylesheet" type="text/css">
{% p center logo large, 点图片可放大! %}
<section id="main" class="container">
<div class="total">Total <span id="total">0</span> Memos 🎉</div>
<div id="memos" class="memos">
</div>
</section>
<script type="text/javascript">
var memos = {
host: 'https://s.dusays.com/',
limit: '10',
creatorId: '1',
domId: '#memos',
username: 'penn',
name: 'Teacher Du',
}
</script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/lazyload.min.js?v=17.8.3"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/marked.min.js?v=11.1.1"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/view-image.min.js?v=2.0.2"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/moment.min.js?v=2.30.1"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/moment.twitter.js"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/highlight.min.js?v=11.9.0"></script>
<script type="text/javascript" src="https://npm.onmicrosoft.cn/penndu@13.0.0/memos/js/main.js"></script>
<script>hljs.highlightAll();</script>

注意:如果不是 Volantis 主题需删除{% p center logo large, 点图片可放大! %}所在行。

使用

请根据需求修改对应的内容:

参数说明
host域名
limit每页显示条数
creatorId用户的 ID
domId显示位置
username广场的用户名
name昵称

自建 CDN 联盟试运营

2024年5月9日 00:00

很多小伙伴感觉杜老师说的访问速度很快,去不图床外链比较稳定,经常会问杜老师用的是哪家的 CDN,这里统一回复:杜老师说及其旗下的所有服务用的都是自建 CDN。今日突发奇想打算弄个自建 CDN 的联盟,感兴趣的小伙伴可进来看看加入规则!

最低配置

所加入的服务器需满足以下最低配置:

项目配置
CPU1H
内存2G
硬盘50G
架构X86_64

系统版本

所加入的服务器需使用以下系统对应版本,并保证系统纯净度「指装好系统后,并未安装任何其它服务」

系统版本
Ubuntu18
Ubuntu20
Ubuntu22
Debian10
Debian11
Debian12
CentOS7
CentOS8
CentOS8 Stream
CentOS9 Stream
Rocky Linux8
Rocky Linux9

端口列表

所加入的服务器需开放以下端口:

端口说明
8000主控通信控制端口
80节点程序必用端口
443节点程序必用端口

入盟规则

  1. 满足以上配置、系统、端口需求;

  2. 节点名额仅有 40 个,当名额耗尽时,将根据服务器配置排位,将最低配置服务器移除联盟;

  3. 节点入联盟后需要完全托管,节点服务器上不能安装任何其它服务;

  4. 联盟根据节点带宽发放对应积分,按每兆一元积分来兑换;

  5. 平台使用积分兑换使用流量,费用为每 G 每小时 0.01 元积分「不足 1G 仍按 1G 计算」例如本日杜老师说 7-9 点流量消耗为 500M/1G/1.5G,则收费为 0.04 元;

  6. 本联盟为杜老师闲着没事突发奇想的,感兴趣的小伙伴可以考虑下,试运营的截止时间为文章发布日所在年的年底「即 2024-12-31」最终解释权归杜老师说所有。

通过 FFmpeg 替换音轨解决群晖不支持当前所选音轨问题

2024年5月6日 00:00

最近经常刷到「无耻之徒」的短视频,特别喜欢卡尔那段,瞬间激发了杜老师的收集欲。看不看另外说,先下载进群晖。但通过 Video Station 无法播放,提示不支持当前所选的音轨。这里分享如何通过 FFmpeg 替换音轨解决群晖不支持当前所选音轨问题!

问题截图

杜老师是通过磁链下载 MKV 格式的版本,目前网上影视资源大多都是这个版本,群晖也支持该格式,只是该版本使用的是 DTS 音轨,自群晖升级至 7 版本后,就不再支持该音轨,提示界面如下:

压缩分区

1
ffmpeg -i input_video.mp4 -c:v copy -c:a aac -strict experimental output_video.mp4

注意:要使用 FFmpeg 替换视频文件中的音轨,需要安装 FFmpeg 并确保它已正确安装。确保输入的音频流和视频流的采样率和声道数兼容。如果需要,可使用-ar-ac 来指定采样率和声道数。

命令解释

这里参数解释如下:

参数解释
-i input_video.mp4指定输入视频文件。
-c:v copy仅复制视频流,不重编码。
-c:a aac指定输出音频编码格式为 AAC。
-strict experimental用于解决某些编解码器问题。
output_video.mp4是输出文件的名称。

解决截图

通过上面命令,将原有的 DTS 音轨转换为群晖支持的 AAC 音轨,再次上传至群晖后,即可通过群晖内置播放套件观影:

Windows 更新时出现的错误代码 0x80070643 解决方案

2024年5月3日 00:00

本文介绍如何解决 Windows 更新时出现的错误代码 0x80070643,原因是 WinRE 恢复环境空间不足。先通过进入命令提示符,禁用掉 WinRE,调整磁盘管理工具,扩展 C 盘空间并创建新的 WinRE 分区,最终重启 WinRE 并完成系统更新。

问题截图

如果最近更新 Windows 时,在安装的状态卡了一会,随后报错,并显示错误代码 0x80070643:

首先明确故障来源,错误代码 0x80070643 对应的是系统的 WinRE 恢复盘分区容量不足。这个 RE 盘在资源管理器中是看不到的,可通过磁盘管理器查看它的分区容量。我们可以通过右键点击开始——磁盘管理看到如下界面。可以看到恢复分区不足 750 兆,需要对其扩容:

压缩分区

通过上面截图可以看出,恢复分区的临近分区是 C 盘,我们接下来要从 C 盘中,获取一定的空间给恢复分区。首先要进入命令提示符界面,在搜索框中输入 cmd,右键点击命令提示符并在弹出菜单中选择以管理员身份运行:

打开命令提示符界面后,我们将 WinRE 恢复功能临时禁用,便于后续分区修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\Users\Administrator>reagentc /info
Windows 恢复环境(Windows RE)和系统初始化配置
信息:

Windows RE 状态: Enabled
Windows RE 位置: \\?\GLOBALROOT\device\harddisk0\partition4\Recovery\WindowsRE
引导配置数据(BCD)标识符: c9a5b046-496f-11ec-b9e7-ed5c24c96968
恢复映像位置:
恢复映像索引: 0
自定义映像位置:
自定义映像索引: 0

REAGENTC.EXE: 操作成功。


C:\Users\Administrator>reagentc /disable
REAGENTC.EXE: 操作成功。

开启磁盘管理工具,进入目标磁盘 C 盘。接下来输入 list disk,先检查下磁盘列表,确定我们要进入的是磁盘 0,则输入 sel disk 0。接下来检查磁盘 0 的分区列表输入 list partition。找到 C 盘对应分区号 3 后输入 sel part 3。使用 shrink desired=200 minimum=200 命令从目标分区切出 200 兆容量备用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
C:\Users\Administrator>diskpart

Microsoft DiskPart 版本 10.0.20348.1

Copyright (C) Microsoft Corporation.
在计算机上: WIN-B1NQBKNC2UU

DISKPART> list disk

磁盘 ### 状态 大小 可用 Dyn Gpt
-------- ------------- ------- ------- --- ---
磁盘 0 联机 60 GB 1024 KB *

DISKPART> sel disk 0

磁盘 0 现在是所选磁盘。

DISKPART> list partition

分区 ### 类型 大小 偏移量
------------- ---------------- ------- -------
分区 1 系统 100 MB 1024 KB
分区 2 已保留 16 MB 101 MB
分区 3 主要 59 GB 117 MB
分区 4 恢复 616 MB 59 GB

DISKPART> sel part 3

分区 3 现在是所选分区。

DISKPART> shrink desired=200 minimum=200

DiskPart 成功收缩卷: 200 MB

可再次进入到磁盘管理器中查看是否分离成功:

扩容分区

删除原有恢复分区。通过上面操作,我们可以确定恢复分区编号为 4,输入 sel part 4 选择并输入 delete partition override 删除该分区:

1
2
3
4
5
6
7
DISKPART> sel part 4

分区 4 现在是所选分区。

DISKPART> delete partition override

DiskPart 成功地删除了所选分区。

回到磁盘管理页面核对是否删除成功:

右键未分配的分区,选择新建分区,在创建过程中选择不分配分区号:

并指定分区名为 Windows RE Tools

完成更新

回到命令提示符中输入 reagentc /enable 重启 WinRE,输入 reagentc /info 确认 WinRE 启用成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
C:\Users\Administrator>reagentc /enable
REAGENTC.EXE: 操作成功。


C:\Users\Administrator>reagentc /info
Windows 恢复环境(Windows RE)和系统初始化配置
信息:

Windows RE 状态: Enabled
Windows RE 位置: \\?\GLOBALROOT\device\harddisk0\partition3\Recovery\WindowsRE
引导配置数据(BCD)标识符: c9a5b048-496f-11ec-b9e7-ed5c24c96968
恢复映像位置:
恢复映像索引: 0
自定义映像位置:
自定义映像索引: 0

REAGENTC.EXE: 操作成功。

接下来回到 Windows 更新界面,重新安装补丁,这次没有报错,很快就完成了升级:

Linux 中挂载 WebDAV 的详细教程

2024年4月30日 00:00

应 Python_Ryan 小伙伴的需求,更新一篇 Linux 中挂载 WebDAV 的详细教程。另外杜老师目前在延吉旅游,行程较满,近期更新暂缓,且评论也是抽空回复的。如有任何问题可以留言,杜老师看到后会尽快回复处理的!

操作步骤

确保已经安装必要的软件包。这里以 Ubuntu 系统为例,可以使用以下命令安装 davfs2 软件包,该软件包用于挂载 WebDAV 的资源:

1
sudo apt install davfs2

创建 WebDAV 挂载点。选择一个目录作为 WebDAV 资源挂载点。例如,如果要将 WebDAV 挂载到/mnt/webdav 目录中,可使用以下命令创建该目录:

1
sudo mkdir /mnt/webdav

挂载资源。使用以下的命令挂载 WebDAV 资源。将 URL 替换为 WebDAV 服务器 URL:

1
sudo mount -t davfs https://URL /mnt/webdav

验证挂载。完成挂载,可以使用以下命令检查挂载是否成功:

1
df -h | grep webdav

挂载选项

设置挂载选项。可以根据需要设置一些挂载选项,如果 WebDAV 服务器需要身份验证,可以使用-o user=username-o pass=password 选项来提供用户名和密码。例如:

1
sudo mount -t davfs https://URL /mnt/webdav -o user=yourusername -o pass=yourpassword

默认情况下挂载 WebDAV 资源可能只有读取权限。如果需要写入权限,可使用-o rw 选项。例如:

1
sudo mount -t davfs https://URL /mnt/webdav -o rw

自动挂载

如希望在系统启动时自动挂载 WebDAV 资源,可以将挂载命令添加到/etc/fstab 文件中。使用下面的命令编辑/etc/fstab 文件:

1
sudo vim /etc/fstab

在文件的末尾添加以下行的内容。注意将 URL/mnt/webdav 等替换为实际值:

1
https://URL /mnt/webdav davfs rw,noauto,user=yourusername,pass=yourpassword 0 0

注意事项

本教材中使用 HTTPS 协议挂载 WebDAV 资源,但 WebDAV 服务器可能并不支持 HTTPS。可以通过 Nginx 或其它代理服务器将 WebDAV 服务器转换为 HTTPS 协议。反代服务配置参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
location ^~ /
{
proxy_pass http://URL;
proxy_set_header Host DOMAIN;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_ssl_server_name on;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;

add_header X-Cache $upstream_cache_status;
#Set Nginx Cache



if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
expires 1m;
}
proxy_ignore_headers Set-Cookie Cache-Control expires;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 301 302 60m;
}

在测试时遇到上传大文件失败的问题,可以调整 Nginx 主配置文件中的 client_max_body_sizekeepalive_timeout 值:

1
2
client_max_body_size 50m;
keepalive_timeout 60;

Cloudreve 部署公私兼备的网盘系统「进阶配置」

2024年4月27日 00:00

别问,问就是没时间,问就是在水文。但杜老师保证,这是最后一篇,以后不再更新有关 Cloudreve 的教程,除非有小伙伴有所需求。之后得空杜老师会更新一些有意思的服务,但仅提供教材,服务器的资源有限,暂不提供服务平台。

配置文件

首次启动,Cloudreve 会在同级目录下创建名为 conf.ini 的配置文件,可以修改此文件进行一些参数的配置,保存后需要重新启动 Cloudreve 生效。也可在启动时使用如下命令指定配置文件路径:

1
./cloudreve -c ./conf.ini

一个完整配置文件示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
[System]
; 运行模式
Mode = master
; 监听端口
Listen = :5212
; 是否开启 Debug
Debug = false
; Session 密钥, 一般在首次启动时自动生成
SessionSecret = 23333
; Hash 加盐, 一般在首次启动时自动生成
HashIDSalt = something really hard to guss
; 呈递客户端 IP 时使用的 Header
ProxyHeader = X-Forwarded-For

; SSL 相关
[SSL]
; SSL 监听端口
Listen = :443
; 证书路径
CertPath = C:\Users\i\Documents\fullchain.pem
; 私钥路径
KeyPath = C:\Users\i\Documents\privkey.pem

; 启用 Unix Socket 监听
[UnixSocket]
Listen = /run/cloudreve/cloudreve.sock
; 设置产生的 socket 文件的权限
Perm = 0666

; 数据库相关,如果你只想使用内置的 SQLite 数据库,这一部分直接删去即可
[Database]
; 数据库类型,目前支持 sqlite/mysql/mssql/postgres
Type = mysql
; MySQL 端口
Port = 3306
; 用户名
User = root
; 密码
Password = root
; 数据库地址
Host = 127.0.0.1
; 数据库名称
Name = v3
; 数据表前缀
TablePrefix = cd_
; 字符集
Charset = utf8mb4
; SQLite 数据库文件路径
DBFile = cloudreve.db
; 进程退出前安全关闭数据库连接的缓冲时间
GracePeriod = 30
; 使用 Unix Socket 连接到数据库
UnixSocket = false

; 从机模式下的配置
[Slave]
; 通信密钥
Secret = 1234567891234567123456789123456712345678912345671234567891234567
; 回调请求超时时间 (s)
CallbackTimeout = 20
; 签名有效期
SignatureTTL = 60

; 跨域配置
[CORS]
AllowOrigins = *
AllowMethods = OPTIONS,GET,POST
AllowHeaders = *
AllowCredentials = false
SameSite = Default
Secure = lse

; Redis 相关
[Redis]
Server = 127.0.0.1:6379
Password =
DB = 0

; 从机配置覆盖
[OptionOverwrite]
; 可直接使用 `设置名称 = 值` 的格式覆盖
max_worker_num = 50

配置案例

数据库改为 MySQL。默认情况下 Cloudreve 会使用内置的 SQLite 数据库,并在同级目录创建数据库文件 cloudreve.db,如果您想要使用 MySQL,请在配置文件中加入以下的内容,并重启 Cloudreve。注意,Cloudreve 只支持大于或等于 5.7 版本的 MySQL,且更换数据库的配置后,Cloudreve 会重新初始化数据库,原有数据将会丢失:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Database]
; 数据库类型,目前支持 sqlite/mysql/mssql/postgres
Type = mysql
; MySQL 端口
Port = 3306
; 用户名
User = root
; 密码
Password = root
; 数据库地址
Host = 127.0.0.1
; 数据库名称
Name = v3
; 数据表前缀
TablePrefix = cd
; 字符集
Charset = utf8

使用 Redis 做缓存。可在配置文件中加入 Redis 相关设置,注意请为 Cloudreve 指定未被其它业务使用的 DB 以避免冲突。重启 Cloudreve 后,可注意控制台输出,以确定 Cloudreve 是否成功连接 Redis 服务器:

1
2
3
4
[Redis]
Server = 127.0.0.1:6379
Password = your password
DB = 0

覆盖从机节点的配置项。Cloudreve 的某些配置项是存储在数据库中的,但是从机节点并不会连接数据库,可以在配置文件中覆盖相应的配置项。比如,从机节点作为存储端运行时,可通过下面的配置设定从机生成的缩略图规格:

1
2
3
4
5
6
7
8
[OptionOverwrite]
thumb_width = 400
thumb_height = 300
thumb_file_suffix = ._thumb
thumb_max_task_count = -1
thumb_encode_method = jpg
thumb_gc_after_gen = 0
thumb_encode_quality = 85

如果从机节点作为离线下载节点使用,可以通过下面的配置覆盖默认的重试、超时参数,以避免默认的数值过于保守导致文件转存失败:

1
2
3
4
5
6
7
[OptionOverwrite]
; 任务队列最多并行执行的任务数
max_worker_num = 50
; 任务队列中转任务传输时,最大并行协程数
max_parallel_transfer = 10
; 中转分片上传失败后重试的最大次数
chunk_retries = 10

Cloudreve 部署公私兼备的网盘系统「单服务篇」

2024年4月24日 00:00

Cloudreve 除了支持 Docker 容器部署,官方还提供单服务部署方式。操作十分简单,仅需要一个文件即可搭建运行 Cloudreve。本文介绍了 Cloudreve 部署过程,及通过注册服务或守护进程方式实现后台运行。

部署过程

Linux 下,直接解压并执行主程序即可。这里以 3.8.3 版本为例,首先至官网下载压缩包,解压获取到主程序:

1
tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz

赋予执行权限:

1
chmod +x ./cloudreve

启动服务:

1
./cloudreve

Cloudreve 在首次启动会创建初始管理员账号,请注意保管管理员密码,此密码只会在首次启动出现。如忘记初始管理员密码,需删除同级目录下的 cloudreve.db,重新启动主程序以初始化新的管理员账户。Cloudreve 默认监听 5212 端口。可以在浏览器中通过下面地址访问 Cloudreve:

1
http://IP:5212

注册服务

通过上面的方式运行 Cloudreve,会一直占用着终端。为了不影响终端的使用,我们可将 Cloudreve 注册为服务,这样就算服务器重启后,Cloudreve 也可以自动启动。使用如下命令编辑配置文件:

1
vim /usr/lib/systemd/system/cloudreve.service

这里运行目录以/home/cloudreve 为例,参考配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target

[Service]
WorkingDirectory=/home/cloudreve
ExecStart=/home/cloudreve/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed

StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target

配置好文件后,使用下面命令使其生效:

1
systemctl daemon-reload

启动服务命令如下:

1
systemctl start cloudreve

设置开机启动命令如下:

1
systemctl enable cloudreve

停止服务命令如下:

1
systemctl stop cloudreve

重启服务命令如下:

1
systemctl restart cloudreve

查看状态命令如下:

1
systemctl status cloudreve

守护进程

首先要安装 supervisor,这里以 Ubuntu 系统为例,命令如下:

1
sudo apt-get install supervisor

初始化全局配置文件的命令如下:

1
2
sudo touch /etc/supervisord.conf
sudo echo_supervisord_conf > /etc/supervisord.conf

编辑全局配置文件:

1
sudo vim /etc/supervisord.conf

将文件底部的[include]分区注释符删除,加入新的配置文件包含路径:

1
2
[include]
files = /etc/supervisor/conf/*.conf

创建 Cloudreve 应用配置所在文件的目录,创建打开配置文件:

1
2
sudo mkdir -p /etc/supervisor/conf
sudo vim /etc/supervisor/conf/cloudreve.conf

根据实际情况填写以下内容:

1
2
3
4
5
6
7
8
[program:cloudreve]
directory=/home/cloudreve
command=/home/cloudreve/cloudreve
autostart=true
autorestart=true
stderr_logfile=/var/log/cloudreve.err
stdout_logfile=/var/log/cloudreve.log
environment=CODENATION_ENV=prod

配置好文件后,使用下面命令指定配置文件运行守护进程服务:

1
supervisord -c /etc/supervisord.conf

启动服务命令如下:

1
sudo supervisorctl start cloudreve

停止服务命令如下:

1
sudo supervisorctl stop cloudreve

查看状态命令如下:

1
sudo supervisorctl status cloudreve

反向代理

1
2
3
4
5
6
7
8
9
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5212;

# 如果您要使用本地存储策略,请将下一行注释符删除,并更改大小为理论最大文件尺寸
# client_max_body_size 20000m;
}

注意:如果需使用 HTTPS,亦或是需要与服务器上其他 Web 服务共存时,可能需使用主流 Web 服务器反向代理 Cloudreve。需要在 Web 服务器中新建一个虚拟主机,然后在网站配置文件中加入反代规则。这里以 Nginx 为例,在网站的 server 字段中加入如上代码。

Cloudreve 部署公私兼备的网盘系统「Docker Compose 篇」

2024年4月21日 00:00

Cloudreve 的一个特性,就是可以和 Aria2 整合实现离线下载功能。上篇教程仅说明了 Cloudreve 的部署,并没有说明如何部署 Aria2 以及如何整合。本篇教程说明如何通过 Docker Compose 部署 Cloudreve 及 Aria2。

部署脚本

在此之前,需要创建 data 等目录作为离线下载临时中转目录,可以使用下面命令创建目录结构:

1
2
3
4
5
6
mkdir -vp cloudreve/{uploads,avatar} \
&& touch cloudreve/conf.ini \
&& touch cloudreve/cloudreve.db \
&& mkdir -p aria2/config \
&& mkdir -p data/aria2 \
&& chmod -R 777 data/aria2

然后将下面的脚本保存为 docker-compose.yml,放置当前目录。同时修改文件中 RPC_SECRET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: "3.8"
services:
cloudreve:
container_name: cloudreve
image: cloudreve/cloudreve:latest
restart: unless-stopped
ports:
- "5212:5212"
volumes:
- temp_data:/data
- ./cloudreve/uploads:/cloudreve/uploads
- ./cloudreve/conf.ini:/cloudreve/conf.ini
- ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
- ./cloudreve/avatar:/cloudreve/avatar
depends_on:
- aria2
aria2:
container_name: aria2
image: p3terx/aria2-pro
restart: unless-stopped
environment:
- RPC_SECRET=your_aria_rpc_token
- RPC_PORT=6800
volumes:
- ./aria2/config:/config
- temp_data:/data
volumes:
temp_data:
driver: local
driver_opts:
type: none
device: $PWD/data
o: bind

运行镜像

通过下面命令运行镜像,运行时的输出信息会直接显示在当前控制台中,可以看到管理员的账号及密码:

1
docker-compose up

为了不占用前台的使用,可使用下面的命令切换后台运行模式:

1
docker-compose up -d

如需关闭当前运行容器,可以运行以下命令。注意此步骤不会删除挂载的配置文件以及相关目录:

1
docker-compose down

如需升级 Cloudreve 容器的版本,可以使用以下命令获取最新镜像:

1
2
3
docker-compose down
docker pull cloudreve/cloudreve
docker-compose up -d

Cloudreve 部署公私兼备的网盘系统「Docker 篇」

2024年4月18日 00:00

之前发了一篇个人网盘工具搭建教程,有小伙伴反馈部分功能无法正常使用,还是希望杜老师能推荐其它网盘系统。纠结许久,杜老师还是决定把 Cloudreve 拿出来,至于纠结的原因嘛,毕竟很多小伙伴都写过类似教程。杜老师都想复制粘贴水文了~

什么是 Cloudreve

Cloudreve 可快速搭建起公私兼备的网盘系统。Cloudreve 在底层支持不同的云存储平台,用户在实际使用时无须关心物理存储方式。

可以使用 Cloudreve 搭建个人用网盘、文件分享系统,亦或针对大小团体的公有云系统。

工具特点

多样化的外部存储。支持对接多种外部存储的存储端,文件的上传和下载全部为客户端直传,无需经过服务器的中转。

虚拟文件系统。Cloudreve 基于 DBMS 构建了一层文件系统抽象,将用户文件和物理文件结构隔离,用户管理文件时无需关注底层的存储方式,也可同时管理多个外部存储。

从机存储节点。可以将多个 Cloudreve 实例组成主从集群,将文件离线下载任务分配到不同的服务器处理。

压缩文件支持。可在线解压缩文件,或是创建新的压缩文件。

打包下载。选择任意数量文件,直接下载打包后的文件,支持 Web 端打包和服务端打包。

安全登录。使用 FIDO2 物理验证器登录,或者为账号设定两因素登录验证。

管理后台。管理员可以通过后台面板图形化配置站点,审计站点内容。

文件检索。可通过自定义文件标签检索文件,或通过关键字搜索文件。

网盘部署

首先请确保运行 Cloudreve 之前创建目录结构,进入到部署目录中,运行下面命令:

1
2
3
mkdir -vp cloudreve/{uploads,avatar} \
&& touch cloudreve/conf.ini \
&& touch cloudreve/cloudreve.db

创建好上面的目录及文件后,运行下面命令即可自动下载 Cloudreve 容器并启动服务:

1
2
3
4
5
6
7
8
docker run -d \
--name cloudreve
-p 5212:5212 \
--mount type=bind,source=./cloudreve/conf.ini,target=/cloudreve/conf.ini \
--mount type=bind,source=./cloudreve/cloudreve.db,target=/cloudreve/cloudreve.db \
-v ./cloudreve/uploads:/cloudreve/uploads \
-v ./cloudreve/avatar:/cloudreve/avatar \
cloudreve/cloudreve:latest

使用效果

待服务运行后,通过 http://IP:5212 可访问 Cloudreve 的登录页面,运行下面的命令可查询到管理员密码:

1
docker logs cloudreve | grep password

使用默认管理员账号 admin@cloudreve.org,及上面查询的密码,登录后即可看到网盘主页面:

GitHub 库自动同步脚本分享

2024年4月15日 00:00

杜老师复刻了 70 多个库,每次源库更新后都需要一一手动同步,太过麻烦。今天分享一个自动同步脚本,有需要的小伙伴可以试一下。注意如对本地库有修改,建议使用 PR 来同步,避免代码覆盖。

代码同步

不太清楚小伙伴们同步代码方式,有人习惯用 PR,有人喜欢用下图同步的方式。不管哪种方式,都需要手动操作的。如有仓库过多,每个都要同步一遍,想想是多大工作量。杜老师分享了 GitHub 库自动同步脚本,供有需要的小伙伴参考:

脚本分享

进入要同步的库中,切换至 Actions,点击 New workflow 项:

打开新页面后,点击篮字的 set up a workflow yourself:

设置文件名 sync.yml「可自定义,不与其它脚本同名即可」

将下面的脚本填到输入框中,点击右上方 Commit changes 即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
name: Upstream Sync

permissions:
contents: write

on:
schedule:
- cron: "0 0 * * *" # every day
workflow_dispatch:

jobs:
sync_latest_from_upstream:
name: Sync latest commits from upstream repo
runs-on: ubuntu-latest
if: ${{ github.event.repository.fork }}

steps:
# Step 1: run a standard checkout action
- name: Checkout target repo
uses: actions/checkout@v4

# Step 2: run the sync action
- name: Sync upstream changes
id: sync
uses: aormsby/Fork-Sync-With-Upstream-action@v3.4
with:
upstream_sync_repo: arnidan/nsfw-api
upstream_sync_branch: main
target_sync_branch: main
target_repo_token: ${{ secrets.GITHUB_TOKEN }} # automatically generated, no need to set

# Set test_mode true to run tests instead of the true action!!
test_mode: false

- name: Sync check
if: failure()
run: |
echo "[Error] 由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,您需要手动 Sync Fork 一次。"
echo "[Error] Due to a change in the workflow file of the upstream repository, GitHub has automatically suspended the scheduled automatic update. You need to manually sync your fork."
exit 1

使用 Docker 部署 JmalCloud 个人网盘

2024年4月12日 00:00

很多小伙伴习惯使用 Alist 和 Cloudreve 等软件来管理存储,今天杜老师为搭建推荐另外一款网盘工具。JmalCloud 是款私有云存储网盘项目,能够简单安全管理云端文件。

工具优点

  • 支持 OSS/COS 和 MinIO 等。

  • 支持图片、音频、视频等文件的在线预览。

  • 支持 Word/Excel/PPT 及流程图和思维导图的编辑和预览。

  • 可支持 X86/ARM64。

  • 提供强大的在线文本编辑器。

  • 支持超大文件上传、断点续传。

服务部署

将下面的代码保存为 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
version: "3"
services:
jmalcloud:
container_name: jmalcloud_server
image: jmal/jmalcloud:latest
environment:
MONGODB_URI: mongodb://mongo:27017/jmalcloud
TZ: Asia/Shanghai
volumes:
- ./docker/jmalcloud/files:/jmalcloud/files/
restart: unless-stopped
mongo:
container_name: jmalcloud_mongodb
image: mongo:4.4
environment:
TZ: Asia/Shanghai
volumes:
- ./docker/jmalcloud/mongodb/data/db:/data/db
restart: unless-stopped
command: --wiredTigerCacheSizeGB 0.5
nginx:
container_name: jmalcloud_nginx
image: jmal/jmalcloud-nginx:latest
ports:
- 7070:80
- 7071:8089
environment:
TZ: Asia/Shanghai
links:
- jmalcloud
- office
- drawio-webapp
restart: unless-stopped
office: # Optional
container_name: jmalcloud_office
image: onlyoffice/documentserver:7.0.0.132
environment:
TZ: Asia/Shanghai
restart: unless-stopped
drawio-webapp: # Optional
container_name: jmalcloud_drawio
image: jgraph/drawio:20.2.3
environment:
TZ: Asia/Shanghai
restart: unless-stopped

使用下面命令即可创建并启动 JmalCloud:

1
docker compose up -d

重置密码

等待 JmalCloud 启动后,即可通过 http://IP 访问 JmalCloud。用户名 admin ,默认密码为 jmalcloud。如果密码遗失,可使用下面的命令重置:

1
docker exec -it jmalcloud_mongodb mongo jmalcloud --eval "db.getCollection('user').update({ 'creator': true }, {\$set: { 'password': '1000:c5b705ea13a1221f5e59110947ed806f8a978e955fbd2ed6:22508de12228c34a235454a0caf3bcaa5552858543258e56' }}, { 'multi': false, 'upsert': false })"

执行完重置命令后,还需重启容器才可生效,重置后的密码为 jmalcloud

1
docker restart jmalcloud_server

部分截图

JmalCloud 个人网盘的登录页面:

支持在线新建文本、思维导图、流程图等::

支持在线编辑文本文件:

支持 Word 等格式文件在线编辑:

支持在线新建及编辑流程图:

支持在线编辑思维导图:

可直接在页面中直接拖拽来上传或是移动文件:

支持各种类型文件识别:

比白嫖更加可怕的是滥用

2024年4月9日 00:00

前两天发现评论区的表情加载速度变慢了,杜老师一直使用渺软公益 CDN,就想着去项目页面反馈一下,结果就看到项目线路切换的通知。再找 NPM 加速节点时发现可用的很少了,故而写下此篇~

话题背景

随着网络技术进步,现在搭建网站成本越来越低。很多小伙伴都使用和老师一样的博客框架。

通过这种静态化的框架,我们可以零成本地搭建一个博客。

但是这种零成本导致很多人不在意博客的维护。

之前在整理友情链接时,发现不少的小伙伴已经 AFK 了,也就是不再维护自己的博客。

杜老师不提倡铺张浪费,但个人感受是有成本地维护博客可以更好地调动运营积极性。

毕竟花出一定的成本和精力去维护时,肯定会想着去捞回这个成本,甚至可以挣点儿小零花,这样可以更好地调动积极性。

白嫖服务

话说远了,我们再说回来。之前杜老师推荐了很多公益项目,几乎都是关于公益 CDN 的。

自从 jsDelivr 被墙后,很多人开始白嫖 elemecdn,最终人家被薅怕了,宣布停止回源。

很多热心的小伙伴也开始提供相关的加速服务。但前几天发现渺软公益 CDN 无法使用后,尝试使用之前推荐的公益 CDN 项目,但是发现这些项目都已下线。

像饿了么、知乎和百度的 CDN 等,它们同步时间和同步库都是不固定的。因此,现在可用的公益 CDN 越来越少。

有小伙伴可能会问,杜老师为什么不提供这种 CDN 服务?

这不是说不想,而是成本太大了根本耗不起。

资源滥用

杜老师想提到的下一个话题就是滥用。

不少小伙伴为了降低博客的运营成本,不断白嫖网络上的资源。

如果仅是白嫖还好,就怕资源滥用。

比如我们之前提到的公益 CDN,很多小伙伴为了减少服务器的存储成本和运营成本,不使用专业的图床服务,而是通过公益 CDN 做图床。

图片的资源占用远大于脚本,会大量消耗 CDN 流量。

再加上会遇到刷流量的恶意用户,这些成本可想而知。

写在最后

之前杜老师在分享优化博客的思路时,还提倡过尽量做分布式,即尽量使用开源镜像 CDN,这样可以实现流量分流,尽可能减少服务器带宽占用。

奈何目前可用资源越来越少……杜老师只能在这里提议避免资源滥用,另外如果小伙伴们有相关的资源,欢迎在评论区留言,分享给需要的小伙伴们!

Docker 自建超炫酷监控页面系统

2024年4月6日 00:00

Kener 是一款开源状态页面工具,旨在使服务监控和事件处理变得轻而易举。它提供了一个时尚和用户友好的界面,简化跟踪服务中断,并改善在事件发生时的沟通方式。最棒的是 Kener 与 GitHub 的无缝集成,使在协作和友好的环境中更轻松地跟踪和解决问题。

项目特征

监控跟踪:

  1. 实时监控;
  2. 为访问者处理时区;
  3. 将监控器分为不同部分;
  4. 基于计划任务的监控器调度;
  5. 使用 YAML 灵活配置监控器;
  6. 支持监控器的默认状态。

定制品牌:

  1. 使用 YAML 或代码定制状态页面;
  2. 为监控器的状态和正常运行时间生成徽章;
  3. 支持自定义域;
  4. 浅色、深色主题。

事件管理:

  1. 可使用 Github 创建事件;
  2. 或使用 API 创建事件。

用户体验:

  1. 易于安装、设置;
  2. 用户友好界面;
  3. 适合各种设备的响应式设计;
  4. 自动搜索引擎优化。

部署安装

创建配置文件目录:

1
mkdir -p /host/path/to/config

将下面代码根据实际需求修改后保存为 docker-compose.yml,然后执行 docker-compose -f docker-compose.yml up -d 即可创建和启动服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
version: '3.7'
services:
kener:
image: rajnandan1/kener:latest # assuming this is final namespace/image
container_name: kener
environment:
- TZ=Asia/Shanghai
#- GH_TOKEN=
#- API_TOKEN=
#- API_IP

# If running on a LINUX HOST and not podman rootless these MUST BE SET
# run "id $user" from command line and replace numbers below with output from command
#- PUID=1000 # gid
#- PGID=1000 # uid

### Most likely DO NOT need to change anything below this ###

#- PORT=3000 Port app listens on IN CONTAINER

### If any of the below are changed make sure the bound volume is correct as well ###
#- CONFIG_DIR=/config
#- PUBLIC_KENER_FOLDER=/config/static
#- MONITOR_YAML_PATH=/config/monitors.yaml
#- SITE_YAML_PATH=/config/site.yaml

ports:
- '3000:3000/tcp'
volumes:
- '/host/path/to/config:/config:rw'

定制监控

可使用 vim /host/path/to/config/monitors.yaml 命令编辑配置文件,参考模版如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- name: Google Search
description: Search the world's information, including webpages, images, videos and more.
tag: "google-search"
image: "/google.png"
api:
method: GET
url: https://www.google.com/webhp
- name: Svelte Website
description: Cybernetically enhanced web apps
tag: "svelte-website"
api:
method: GET
url: https://svelte.dev/
image: "/svelte.svg"
- name: Earth
description: Our blue planet
tag: "earth"
defaultStatus: "UP"
image: "/earth.png"
- name: Frogment
description: A free openAPI spec editor and linter that breaks down your spec into fragments to make editing easier and more intuitive. Visit https://www.frogment.com
tag: "frogment"
image: "/frogment.png"
api:
method: GET
url: https://www.frogment.com

修改好文件后,使用下面命令重启服务:

1
docker restart kener

效果截图

默认显示 90 天内的服务状态,最细粒度到分钟级:

支持 API 监控服务的状态:

可通过脚本调用在站内显示监控数据:

可直接在页面引用监控数据细节:

可在 GitHub 中直接创建事件:

监控数据支持各种调用方式:

部署完成后可通过 http://IP:3000 访问,支持反向代理:

支持浅色、深色模式切换:

MinIO 的部署及与 Memos 的整合

2024年4月3日 00:00

之前杜老师将说说广场资源转存至缤纷云,没想到刚用没两天,免费的资源就被用光了。对于 CDN 这种无底洞,杜老师还是决定买个服务器,自行部署存储服务。这里整理了部署和整合步骤,供需要的小伙伴们参考。

MinIO 的介绍

MinIO 是种高性能、S3 兼容的对象存储。

专为大规模 AI/ML、数据湖和数据库工作负载而构建,并且它是由软件定义的存储。

无需购买任何专有硬件,就可以云上和普通硬件上拥有分布式对象存储。

MinIO 拥有开源 GNU AGPL v3 和商业企业许可证双重许可。

MinIO 的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
services:
minio:
command: server /data --console-address :9001 --address :9000
container_name: minio
deploy:
resources:
limits:
cpus: 0
memory: 0
environment:
MINIO_BROWSER: "on"
MINIO_BROWSER_LOGIN_ANIMATION: "on"
MINIO_BROWSER_REDIRECT_URL: http://127.0.0.1:9001
MINIO_BROWSER_SESSION_DURATION: "12h"
MINIO_ROOT_PASSWORD: "minioadmin"
MINIO_ROOT_USER: "minioadmin"
MINIO_SERVER_URL: http://127.0.0.1:9000
image: minio/minio:RELEASE.2024-02-26T09-33-48Z
labels:
createdBy: Apps
logging:
driver: json-file
options:
max-file: "10"
max-size: 5M
ports:
- 9001:9001
- 9000:9000
restart: always
volumes:
- ./data:/data
- ./certs:/root/.minio/certs
version: "3"

注意:将上面的内容,根据实际需求略作调整「因为自定义项较多,杜老师就不一一标注了.如有问题可以自行搜索,或在评论区中留言」保存为 docker-compose.yml,之后使用命令 docker-compose -f docker-compose.yml up -d 启用就行了。

初始设置

打开浏览器输入 http://IP:9000/,输入 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 的值 minioadmin,登录到控制台:

目前暂无中文界面,不过好在配置简单,且不需要太多配置。点击左侧的 Buckets,再点击右侧 Create Bucket。在 Bucket Name 框中输入存储桶的名称,后点击 Create Bucket 即可:

待页面刷新后,点击刚创建好的存储桶,点击 Summary->Access Policy 项,将值设置为 Public:

之后点击左侧的 Access Keys 创建一个密钥。这里需要注意的是 Secret Key 项仅创建时可见,请保持好!如有遗忘可以重新创建:

与 Memos 整合

参考下图中的参数配置即可。需要注意的是,9000 是控制台的端口,API 的端口是 9001

Linux 安装杀毒软件 ClamAV

2024年3月31日 00:00

前两天有小伙伴找到杜老师询问是否可以帮忙查杀服务器的木马病毒,原因是凉心云的安全中心提示有病毒,但自动查杀功能要付费,而且费用较高。正好杜老师最近在研究 Linux 平台的杀毒软件,分享一下 ClamAV 的使用方法。

软件介绍

ClamAV 是一个开源防病毒工具包,专为邮件网关上的电子邮件扫描设计。

它提供了许多实用程序,包括灵活且可扩展的多线程守护程序、命令行扫描程序和用于自动数据库更新的高级工具。

该软件包的核心是以共享库形式提供的防病毒引擎。

除了邮件之外,还可用其扫描系统中的木马病毒。

软件特征

  • 实时保护。ClamD 扫描守护程序 ClamOnAcc 客户端在现代版本的 Linux 上提供按访问扫描。这包括在扫描文件之前阻止文件访问可选功能。

  • ClamAV 可检测数百万种病毒、蠕虫、特洛伊木马和其他恶意软件,包括 Microsoft Office 宏病毒、移动恶意软件以及其它威胁。

  • ClamAV 的字节码签名运行时由 LLVM 或自定义字节码解释器提供支持,允许 ClamAV 签名编写器创建和分发非常复杂的检测例程,并远程增强扫描仪功能。

  • 签名数据库确保 ClamAV 将仅执行受信任的签名定义。

  • ClamAV 扫描存档和压缩文件,还可防止存档炸弹。支持几乎所有邮件文件格式。

  • 高级数据更新程序,支持脚本更新、数字签名和基于 DNS 的数据库版本查询。

软件安装

在 CentOS 操作系统上安装 ClamAV,请分别执行以下的命令「其中 clamav 是扫描工具,clamavd 是实时保护服务,clamav-update 是毒库升级工具」

1
2
yum -y install epel-release
yum -y install clamav clamavd clamav-update

在 Ubuntu 操作系统上安装 ClamAV,请分别执行以下的命令「其中 clamav 是扫描工具,clamav-daemon 是实时保护服务」

1
2
apt update
apt -y install clamav clamav-daemon

软件使用

安装完后,我们在扫描签,建议先运行以下命令更新病毒库:

1
freshclam

然后使用下面命令扫描即可「其中-r 是递归扫描,-i 是仅显示被感染文件,/tmp/ 是设置扫描路径,-l /var/log/clamav.log 是保存日志文件位置」需要注意的是,该命令仅扫描病毒,不会删除病毒文件,需 rm 手动删除。

1
clamscan -r -i /tmp/ -l /var/log/clamav.log

说说广场资源转存至缤纷云

2024年3月28日 00:00

杜老师最近太忙了,平时也是撒手掌柜,很少管理旗下平台,除非遇到问题才会第一时间解决。恰好昨天下午得空看了一下说说广场,没想到超过了百人。图片加载速度好慢,就想着托管到其它平台!

什么是 S3

S3 存储是亚马逊推出的一种对象存储服务。提供了一个高度可扩展、可靠且安全的数据存储解决方案,用于存储和管理各种类型的数据对象,例如文件、图像、视频、文档。

使用了 S3 存储,用户可以通过 API 或与 S3 兼容的工具来上传、下载、检索、管理数据对象。S3 还支持数据版本控制、生命周期管理、数据备份和恢复等功能。

Bitiful 缤纷云

缤纷云的界面是非常简洁的,而且还挺好看,概述页面可以看到资源的使用量:

缤纷云每月会赠送 50G 的存储容量,CDN 流量 10G,API 请求 10 万次。具体费用可见官方文档:

整合说说

下面说说整合过程。首先注册登录到缤纷云,切换到对象存储 AccessKey 页面,点击右侧的添加 Key,根据流程填写对应内容即可:

进入到 Memos 后台,点击设置——存储——创建,参考下图输入相关内容「杜老师做了些调整,如果效果不太理想,可以在评论区留言询问」

使用体验

有一说一,加载速度还是非常快的,毕竟是专业的存储加 CDN。不过并发请求貌似有些问题,每次批量加载都会出现很多请求失败问题。不过还好不影响前端的调用:

也许您的下一个主机应该是软云

2024年3月25日 00:00

在当今数字化时代,云主机服务成为企业和个人建设网站、部署应用重要选择。然而,面对众多云主机服务商,如何挑选到最适合自己需求的呢?今天,杜老师向小伙伴们推荐一家服务器提供商!

写在前面

一周前杜老师接到一个赞助邀请,是软云的工作人员,赞助杜老师说一台云服务器,说是希望可以帮忙推广一下。

在此之前杜老师也接到过其它服务器提供商的合作邀请,不过他们并没有像软云一样自信,又或者说福利很好。

其它服务器提供商都是扔出一篇软文,然后说首页置顶多少天就给多少钱之类的。杜老师要求先测试一段时间,再发文章之类要求,直接被拒绝了。

软云这边就比较自信了,直接给出一台云服务器,并仅要求挂个链接即可,至于文章的话并没有明确的要求。

当杜老师表示需测试后才会发文等一系列要求,软云这边都表示没问题。

经过一周高强度的性能、稳定性和安全性的测试,杜老师决定发文推荐下软云主机。

性能测试

为了让小伙伴们可以直观的看到服务器的数据,杜老师选了个通用性的测试脚本,运行下面命令即可:

1
wget -qO- bench.sh | bash

测试结果如下「杜老师的主机为定制款,没有出现在套餐列表中。另测速表中删掉了一些境外测试数据」

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
-------------------- A Bench.sh Script By Teddysun -------------------
Version : v2023-10-15
Usage : wget -qO- bench.sh | bash
----------------------------------------------------------------------
CPU Model : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
CPU Cores : 8 @ 2294.684 MHz
CPU Cache : 46080 KB
AES-NI : ✓ Enabled
VM-x/AMD-V : ✓ Enabled
Total Disk : 130.9 GB (8.0 GB Used)
Total Mem : 7.8 GB (948.3 MB Used)
Total Swap : 4.0 GB (524.0 KB Used)
System uptime : 4 days, 1 hour 57 min
Load average : 0.02, 0.06, 0.02
OS : Ubuntu 22.04.4 LTS
Arch : x86_64 (64 Bit)
Kernel : 5.15.0-101-generic
TCP CC : cubic
Virtualization : KVM
IPv4/IPv6 : ✓ Online / ✗ Offline
Organization : AS58519 Cloud Computing Corporation
Location : Beijing / CN
Region : Beijing
----------------------------------------------------------------------
I/O Speed(1st run) : 225 MB/s
I/O Speed(2nd run) : 199 MB/s
I/O Speed(3rd run) : 213 MB/s
I/O Speed(average) : 212.3 MB/s
----------------------------------------------------------------------
Node Name Upload Speed Download Speed Latency
Speedtest.net 26.36 Mbps 196.86 Mbps 29.30 ms
Los Angeles, US 28.13 Mbps 87.58 Mbps 204.70 ms
Shanghai, CN 27.72 Mbps 190.41 Mbps 40.78 ms
Singapore, SG 27.79 Mbps 156.85 Mbps 220.28 ms
----------------------------------------------------------------------
Finished in : 8 min 32 sec
Timestamp : 2024-03-24 22:16:17 CST
----------------------------------------------------------------------

配置价格

软云主要提供主机和服务器,节点位于香港和内蒙古,以下是香港主机配置及价格:

以下是内蒙主机配置及价格,年付有八折优惠哦:

扶持活动

软云在 2024 年提供了站长扶持计划,可免费为站长们赞助服务器,所提供的主机可选香港节点或内蒙古节点,主机配置可以协商,可选范围如图:

计划规则以及主机购买地址如下,感兴趣的小伙伴可以去看看:

PostgreSQL13 升级 14 两种方法

2024年3月22日 00:00

经常会有小伙伴来聊天广场摸鱼,杜老师之前尝试直接更换 PostgreSQL 版本,结果差点导致数据丢失。最近整理了一些 PostgreSQL 版本升级方法,供有需要的小伙伴参考。

pg_upgrade 法

在开始升级前,请确保数据库已经完整备份。这可以通过使用 pg_dump 工具完成。

确保服务器已经安装 PostgreSQL14,包括客户端库。如果服务器上已经安装了 PostgreSQL13,需要先卸载它,然后再安装 PostgreSQL 14。

使用 pg_upgrade 工具来升级数据目录。例如,如果当前的数据目录位于/var/lib/postgresql/13/main,那么升级命令可参考 pg_upgrade -b /var/lib/postgresql/13/main -B /var/lib/postgresql/14/main -d /usr/local/pgsql/14/bin -u postgres

确保使用正确的路径和 PostgreSQL 14 的安装路径。

编辑主配置 postgresql.conf 文件,修改任何可能与新版本不兼容的设置。

使用 PostgreSQL14 启动服务器。

使用 psql 连接到数据库并检查版本信息,确保一切正常。

一旦确认升级成功,可以删除旧版本的数据目录。

pg_dump 法

在升级前,务必备份 PostgreSQL 数据库。可以使用 pg_dump 命令来创建数据库的备份:

1
pg_dump -h localhost -U postgres -Fc -f backup.dump mydb

安装新版本 PostgreSQL:

1
2
sudo apt-get update
sudo apt-get install postgresql-14

升级 PostgreSQL 的数据版本:

1
2
sudo pg_dropcluster --stop 13 main
sudo pg_upgradecluster 13 main

恢复数据:

1
pg_restore -h localhost -U postgres -d mydb backup.dump

删除旧版本 PostgreSQL:

1
sudo apt-get purge postgresql-13

重启 PostgreSQL 的服务:

1
sudo systemctl restart postgresql-14

Docker 搭建轻量高颜值个人导航页面

2024年3月19日 00:00

最近拜访博客圈的小伙伴时,发现很多博主习惯在主页内加一个导航页。之前杜老师也在纠结是否要添加,其实是因为没找到心仪的导航页。恰好近期在网上闲逛时,发现了这款轻量高颜值的导航页,分享给需要的小伙伴们!

工具介绍

Flare 是一款轻量、快速、美观个人导航页面,适用于 HomeLab 或其它注重私密的场景。

可支持 Docker 一键部署,维护方便。

无任何数据库依赖。应用数据完全开放透明。

支持在线编辑。支持 x86 及常见的 ARM 设备。应用资源消耗很低。

工具特点

服务资源消耗极低,可以跑在任何规格的机器上。

程序页面性能较好,渲染速度更快,支持同时渲染大量书签。

使用声明的配置来进行导航内容管理,无需担心数据迁移问题。

简化了天气数据的获取方式,不再需要申请天气网站的 API_KEY,避免不必要的成本开销。

内置大量风格统一、高质量的矢量图标,确保界面长期耐看。

默认使用免登陆的模式,避免了 HomeLab、本地使用的用户有额外登录操作。

工具部署

启动应用非常简单,如果您习惯使用 Docker,可以执行:

1
docker run -d -p 5005:5005 -v `pwd`/app:/app soulteary/flare

如果您习惯使用 docker-compose,只需要执行 docker-compose up -d

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '3.6'

services:
flare:
image: soulteary/flare
restart: always
# 默认无需添加任何参数,如有特殊需求
# 可阅读文档 https://github.com/soulteary/docker-flare/blob/main/docs/advanced-startup.md
command: flare
# 启用账号登陆模式
# command: flare --nologin=0
# environment:
# 如需开启用户登陆模式,需要先设置 `nologin` 启动参数为 `0`
# 如开启 `nologin`,未设置 FLARE_USER,则默认用户为 `flare`
# - FLARE_USER=flare
# 指定你自己的账号密码,如未设置 `FLARE_USER`,则会默认生成密码并展示在应用启动日志中
# - FLARE_PASS=your_password
# 是否开启“使用向导”,访问 `/guide`
# - FLARE_GUIDE=1
ports:
- 5005:5005
volumes:
- ./app:/app

效果截图

部署完成之后,访问服务器 5005 端口,就能看到下面的界面啦:

在 Flare 启动之后,您可以随时访问/guide,获取 Flare 基础界面功能的介绍:

为满足随时随地编辑的需求,程序新增了在线编辑的页面。地址是/editor

为了减少不必要的地址记忆负担,程序新增一个帮助页面,默认展示所有程序内的工具页面。地址是/help

又一款开源且炫酷的多功能监控平台

2024年3月16日 00:00

之前为小伙伴们推荐了一款高颜值的监控工具,但其监控维度较少,不符合部分高需求用户。今天为小伙伴们推荐另一款监控工具,不仅可以监控服务器的状态,还可监控各类服务,甚至是应用程序等,感兴趣的小伙伴可点进文章查看。

工具介绍

phoenix 是一个灵活可配置的开源监控平台,主要用于监控应用程序、服务器各参数、容器、各平台数据库、网络、TCP 端口以及 HTTP 接口,通过实时收集、汇聚以及分析监控信息,实现在发现异常时立刻推送告警信息,并且提供了可视化系统进行配置、管理、查看。

工具特点

  1. 可分布式;

  2. 可跨平台;

  3. 可支持 Docker 部署;

  4. 实时监测告警;

  5. 数据加密传输;

  6. 灵活配置;

  7. 用户界面支持 PC 端、移动端等;

  8. 基于 HTTP 接口支持拓展实现监控其它编程语言编写的程序。

监控 UI 端部署

1
docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 443:443 --pid host --net host --name phoenix-ui phoenix/phoenix-ui /bin/bash

phoenix 服务端部署

1
docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 16000:16000 --pid host --net host --name phoenix-server phoenix/phoenix-server /bin/bash

phoenix 客户端部署

1
docker run -itd -v /tmp:/tmp -v /liblog4phoenix:/liblog4phoenix -v /etc/localtime:/etc/localtime:ro -p 12000:12000 --pid host --net host --name phoenix-agent phoenix/phoenix-agent /bin/bash

效果截图

推荐一款超高颜值开源服务器仪表盘

2024年3月13日 00:00

随着互联网技术的飞速发展,服务器已经成为现代社会不可或缺的基础设施。为了保障服务器的稳定运行,我们需对服务器进行有效的监控。传统的服务器监控工具往往功能复杂,配置繁琐,不太友好。今天给大家介绍一个高颜值开源项目,非常适合于个人服务器。

工具介绍

dash.是一款开源的服务器监控工具,旨在为用户提供简洁易用以及功能强大的监控体验。dash.采用 TypeScript 语言开发,可监控服务器的 CPU、内存、磁盘、网络等多种指标及维度。下面是该项目的 GitHub 地址:

工具安装

dash.支持 Docker 一键部署,可参考下面的命令:

1
2
3
4
5
docker container run -it \
-p 80:3001 \
-v /:/mnt/host:ro \
--privileged \
mauricenino/dashdot

如需要监控 GPU 数据,可使用下面的命令部署:

1
2
3
4
5
6
7
docker container run -it \
-p 80:3001 \
-v /:/mnt/host:ro \
--privileged \
--gpus all \
--env DASHDOT_WIDGET_LIST="os,cpu,storage,ram,network,gpu"
mauricenino/dashdot:nvidia

效果截图

dash.白天版页面效果截图,其中显示整体 CPU 使用率:

dash.夜间版页面效果截图,其中显示各核 CPU 使用率:

功能扩展

如有一些自定义的参数设置,可使用下面的代码:

1
2
3
docker container run -it \
--env DASHDOT_ENABLE_CPU_TEMPS="true" \
# ...

全部自定义的参数,可至官网 Wiki 页面中查看:

Tiny RDM 一个轻量优美的 Redis 客户端

2024年3月10日 00:00

可能在这之前大部分的人一直用的是 RedisDesktopManager 或者是 Redis 的官方可视化工具 RedisInsight 来对 Redis 进行操作和管理。前段时间不经意看到了颜值高且简约的 Redis 可视化工具 Tiny RDM。Tiny RDM 是一个现代化轻量级的跨平台 Redis 桌面客户端。

功能特性

  • 极度轻量,无内嵌浏览器。

  • 界面精美易用,提供浅色/深色主题。

  • 多国语言支持:英文/中文。

  • 更好用的连接管理。

  • 增删查改一应俱全。

  • 支持多种数据查看格式以及转码/解压方式。

  • 轻松处理数百万键列表。

  • 操作命令执行日志展示。

  • 支持命令实时监控。

  • 支持导入/导出数据。

  • 支持发布订阅。

  • 支持导入/导出连接配置。

效果截图

工具支持双语言的切换「中文、英文」默认会根据系统语言自动的切换:

可针对多数据库做查询、修改:

官网地址

Tiny RDM 的官网地址如下,默认为英文的界面,可在右上角切换为中文:

下载地址

Windows 绿色版:

下载地址

苹果系统 X86 架构版:

下载地址

苹果系统 ARM 架构版:

下载地址

DEB 安装包:

下载地址

YesPlayMusic 高颜值的第三方网易云播放器

2024年3月7日 00:00

之前发布了一篇高颜值的第三方网易云播放器部署教程,但随着版本的更新,原有的版本不可用。前几天刚好一个小伙伴有部署的需求,杜老师就重新编译了下,整理该篇教程,供有需要的小伙伴参考!

特性

  • 使用 Vue.js 全家桶开发。

  • 可扫码登录网易云账号。

  • 可支持 MV 播放。

  • 支持歌词显示。

  • 可支持私人 FM。

  • 每日推荐歌曲。

  • 没有任何社交功能。

  • 每日自动签到。

  • 支持音乐云盘。

  • 自定义快捷键和全局快捷键。

  • 可支持 PWA,在 Chrome/Edge 里点击地址栏右边的安装到电脑。

  • 可支持 Mpris。

部署

杜老师已经将最新版本编程成 Docker 并传至 Docker Hub,可使用下面的命令一键部署。注意-p 8080:80 中的 8080 可自定义,用于访问或者反代:

1
docker run -d --name YesPlayMusic -p 8080:80 penndu/yesplaymusic

如使用 Docker Compose 管理,可以将下面的内容保存为 docker-compose.yml 文件,并通过命令 docker-compose up -d 启动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
services:
YesPlayMusic:
image: penndu/yesplaymusic
container_name: YesPlayMusic
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./docker/nginx.conf.example:/etc/nginx/conf.d/default.conf:ro
ports:
- 80:80
restart: always
depends_on:
- UnblockNeteaseMusic
environment:
- NODE_TLS_REJECT_UNAUTHORIZED=0
networks:
my_network:

UnblockNeteaseMusic:
image: pan93412/unblock-netease-music-enhanced
command: -o kugou kuwo migu bilibili pyncmd -p 80:443 -f 45.127.129.53 -e -
# environment:
# JSON_LOG: true
# LOG_LEVEL: debug
networks:
my_network:
aliases:
- music.163.com
- interface.music.163.com
- interface3.music.163.com
- interface.music.163.com.163jiasu.com
- interface3.music.163.com.163jiasu.com
restart: always

networks:
my_network:
driver: bridge

效果

歌词模式:

音乐库的夜间模式:

专辑详情页面:

首页界面:

歌手界面:

搜索界面:

首页页面:

发现界面:

下载

YesPlayMusic 支持 Windows/macOS 等平台客户端,下面是 Windows 版的下载地址:

下载地址

FileCodeBox 文件快递柜

2024年3月4日 00:00

很多时候,我们都需要将一些文件或文本传送给别人,或者跨端传递一些信息,但我们又不想为了分享,而去下载一些客户端的软件,这个时候,我们就可以使用口令传送箱。

主要特色

  • 轻松上传:复制粘贴,拖拽选择。

  • 多种类型:文本,文件。

  • 防止爆破:错误次数限制。

  • 防止滥用:可针对 IP 限制上传次数。

  • 口令分享:随机口令,存取文件,自定义次数以及有效期。

  • 匿名分享:无需注册,无需登录。

  • 管理面板:查看所有文件,删除文件。

  • 一键部署:可使用 Docker 一键部署。

准备工作

新建一个空白目录:

1
2
mkdir /opt/FileCodeBox
cd /opt/FileCodeBox

在上面的目录中新建一个.env 环境变量文件,将下列字段内容替换成您自己的「如没有新建此文件,将会使用系统默认配置」

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 端口
PORT=12345
# Sqlite数据库文件
DATABASE_URL=sqlite+aiosqlite:///database.db
# 静态文件夹
DATA_ROOT=./static
# 静态文件夹URL
STATIC_URL=/static
# 开启上传
ENABLE_UPLOAD=True
# 错误次数
ERROR_COUNT=5
# 错误限制分钟数
ERROR_MINUTE=10
# 上传次数
UPLOAD_COUNT=60
# 上传限制分钟数
UPLOAD_MINUTE=1
# 删除过期文件的间隔(分钟)
DELETE_EXPIRE_FILES_INTERVAL=10
# 管理地址
ADMIN_ADDRESS=admin
# 管理密码
ADMIN_PASSWORD=admin
# 文件大小限制,默认10MB
FILE_SIZE_LIMIT=10
# 网站标题
TITLE=文件快递柜
# 网站描述
DESCRIPTION=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件
# 网站关键词
KEYWORDS=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件
# 存储引擎
STORAGE_ENGINE=filesystem

一键部署

一键安装:

1
docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:beta

一键更新:

1
docker pull lanol/filecodebox:beta && docker stop filecodebox && docker rm filecodebox && docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:beta

后端地址:

1
/#/admin

后台密码:

1
FileCodeBox2023

效果截图

FileCodeBox 首页效果图:

点击首页左下角的上传图标,可以选择上传文件:

标签切换至文本后,即可粘贴文本:

在后台可对 FileCodeBox 网站名称、描述等配置项进行设置:

在文件管理页面中可对已上传的文件进行管理:

支持日间、夜暗模式切换:

❌
❌