普通视图

发现新文章,点击刷新页面。
昨天以前首页

繁杂

2025年5月2日 08:36

22点44,同事把4月最后一天单位的作业数据发出来。理论上在22点30,单位的作业就算结束了,再往前推,实际上大概在21点30的时候,最后一车已经完成过磅,也就是说21点30-22点30大家只是在等待约定的结束时间而已。之前我也试过提前行动,结果是居然在22点28的时候,又来了几台车,他们是压着点过来的,于是我只能把之前已经做好的东西推翻重来。这一次,我不想推翻了,所以我真的是等到了22点30以后才开始行动,在同事把作业数据发出来之前,其实我已经整理好我的那部分了。一直以来我都是这么干的,这需要有非常好的预判,同时也意味着我不是在等待他们发号司令才开始做我的事情。

确认最终数据之后,我又花了一个小时,把接下来的事情做完。那包括核对库存,做各种各样的表,以及之前把已经做好,但没有提交的完成最后的步骤。为什么我会有月末焦虑呢?因为虽然这些事情都很琐碎,但是累积起来得用几十去形容,它们之间有很强的关联性。当你需要报送的东西越来越多以后,除了把那个数据做出来以外,你也得保证它们互相是不打架的,虽然它们都来自于同一个数据源,但是因为某些特殊情况,会有一些意外的发生。比如说一些非典型业务的出现,就很容易导致没有把数据反映上去,又或者没有把某些数据剔除掉。因为类似的东西要报很多,所以很重要的一点就是,我有没有漏掉?有时候我会做着做着,突然间不知道自己下一步要做什么了,尤其是当我做完一件事,然后被打断的时候。我也说不准这到底是我记忆力不好了还是真的太繁杂了。近几年那些加码的事情得用离谱去形容,以前我只需要管好纸质的东西。现在纸质的东西得管,系统也得管,因为系统的东西实际上是人工录入的,而且系统还一个又一个添上去。纸质的东西也就那样了,但系统的东西,还有一些你预测不到的,比如明明该到你报送的时候了,系统却打不开,又或者没办法转到你需要报的那个表上面,简直让人无语。

到该报报表的时候,报送报表的那个网站打不开是让人很抓狂的。第一次遇到的时候,我的第一反应是可能网站出状况了,我等一等,但是等了半天,还是那样。我差点就要找我的上级反映我报不了数据了,但是在反映这个事情之前,我把那个网站在另外一个浏览器里打开,结果居然就开了。谁知道你是什么情况呢?一直我都是用Firefox做那个报表,为什么Firefox现在就是打不开呢?那个系统是浪潮做的,浪潮干的事,什么状况都有可能发生。根据我的经验,这种有些浏览器能打开,有些浏览器打不开,尤其是我经常用的浏览器打不开的状况,通常清除一下这个网站的cookie就好了。结果真如我所料,我清除了那个网站的cookie,网页就打开了。当我跟网友吐槽起我这个差点给上级上报很囧的事情以后,他的回复是实际上清除缓存不应该由我这个使用者完成,而是应该在做网页设计的时候就写好清除缓存的脚本。使用者无论任何时候,只要不是服务器那边挂了,都可以正常访问使用。这证明了,不是我的问题,不是Firefox的问题,又是浪潮不知道哪位干的好事。

又一个月末挺过去了,但这个月末我居然有种其实我也不确定我是不是都干完了,还是说有些事情我漏掉还没做的迷糊。

静态网站优化方案

2025年2月27日 10:11
最近加了不少好友的友链,认识了许多网站上的朋友。由于众所周知的原因,有些国外服务在国内访问较慢,部分朋友的站点因此影响了国内用户的访问体验。为了帮助大家提高访问速度,我写了这篇文章,简单介绍了一些我所了解的网站加速方案,希望能够帮助更多朋友改善速度问题。

VPS, 专用服务器和云托管专用服务器: 主要区别和建议

2025年1月27日 06:30

理解VPS、专用服务器和云管理专用服务器

选择合适的托管解决方案可能会让人感到困惑,尤其是在当今可用选项繁多的情况下。其中,虚拟专用服务器(VPS)、专用服务器和云管理专用解决方案各自具有独特的优势。在本文中,我们将深入探讨它们之间的区别,并提供建议,帮助您做出明智的决定。

什么是VPS?

虚拟专用服务器(VPS = Virtual Private Server)是在物理服务器上创建的虚拟化环境。使用VPS托管时,您与其他用户共享物理服务器的资源(CPU、内存、存储)。然而,虚拟化技术确保您获得这些资源的专用部分,相比共享主机,提供了更多的控制、灵活性和性能。

VPS托管非常适合需要可扩展性的中小型项目,而不需要支付专用服务器的高成本。

什么是专用服务器?

专用服务器(Dedicated Server)为您提供一整台物理机器,专供您使用。此设置提供无与伦比的性能、定制性和控制力。没有资源共享,您可以根据特定的工作负载优化服务器,使其适用于高流量网站、大型数据库或有高要求的应用程序。

尽管专用服务器提供顶级性能,但它们的价格较高,并且需要高级的技术知识来进行管理。

什么是云管理专用服务器?

云管理专用服务器(Cloud-Managed Dedicated Servers)将专用硬件的优势与云基础设施的灵活性和便捷性结合起来。例如,许多供应商提供裸金属云解决方案,提供专用的CPU和内存,同时融入云的特性,如快速部署、可扩展性和按需计费。

这些解决方案提供专用服务器的原始计算能力,但消除了传统服务器管理的复杂性。它们非常适合那些希望在性能、可扩展性和易用性之间找到平衡的企业。

关键区别

以下是这些托管解决方案之间的主要区别:

  • VPS:共享物理资源,价格实惠,可扩展,适合中等负载的项目。
  • 专用服务器:专用物理资源,价格昂贵,高度可定制,适合资源密集型任务。
  • 云管理专用服务器:专用物理资源,具有云特性如可扩展性和简化的管理。

建议:什么时候选择哪种?

  • VPS托管:最适合创业公司、小型企业或正在发展中的开发者,他们需要一个性价比高且可扩展的解决方案。
  • 专用服务器:最适合企业、大型网站或需要不妥协性能和完全服务器控制的应用程序。
  • 云管理专用服务器:推荐给那些需要专用服务器的计算能力,但又希望拥有云平台的灵活性和管理简易性的企业。

对比表:VPS vs 专用服务器 vs 云管理专用服务器

特性 VPS 专用服务器 云管理专用服务器
资源分配 共享物理服务器和虚拟化资源 完全专用的物理服务器 完全专用的物理服务器
性能 中等
可扩展性 良好 有限(需要硬件升级) 优秀
成本 实惠 昂贵 中等到昂贵
管理 需要一定的技术知识 需要高级专业知识 由提供商管理,更简便
最适合 中小型项目 高流量网站、大型应用 需要在性能和灵活性之间找到平衡的企业

结论

在选择VPS、专用服务器和云管理专用解决方案时,理解您的项目需求至关重要。如果您刚刚起步,VPS托管是一个不错的选择。对于高性能需求,可以选择专用服务器。若您需要在性能、灵活性和管理简便性之间找到平衡,云管理专用服务器值得考虑。

您可以使用VPS数据库工具比较一些VPS供应商。

英文:VPS vs Dedicated Servers vs Cloud-Managed Dedicated Servers: Key Differences and Recommendations

服务器

本文一共 1103 个汉字, 你数一下对不对.
VPS, 专用服务器和云托管专用服务器: 主要区别和建议. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c VPS, 专用服务器和云托管专用服务器: 主要区别和建议 云计算 服务器 资讯 运维
The post VPS, 专用服务器和云托管专用服务器: 主要区别和建议 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  2. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  3. 推荐英国三文鱼的烹饪方法 Tesco超市里都有卖三文鱼, 我最喜欢的是这种没有被烟熏过的. 产地挪威, 生的. 昨天圣诞节特价, 原价 24 镑, 半价只要 12 镑. 果断买了一盒. 其实我最喜欢生吃, 沾着介末吃, 老婆也很喜欢,...
  4. 共享主机(Shared Hosting)和VPS主机的比较 共享主机 vs VPS 主机:关键区别 当我开始我的互联网之旅时,我将我的个人网站放在资源有限的共享主机上,后来我学会了管理服务器(Linux),并将我的网站迁移到 VPS 服务器。我开始开发 Web 应用程序和 API,甚至有一些应用程序在专用服务器(Dedicated Server)上运行。 简介 选择合适的主机托管方案对于网站的性能、可扩展性和安全性至关重要。目前流行的两种选择是共享主机(Shared Hosting)和虚拟专用服务器(VPS Hosting)。虽然它们都相对经济实惠,但在资源分配、性能和管理控制方面存在显著差异。本文将深入探讨这些区别,帮助您做出明智的决策。...
  5. SteemIt 高级定制微信文章列表 RSS/API/阅读器 v2.0 The Advanced Wechat Group Posts Feed/API/Reader v2.0 Abstract: I have added five parameters to the...
  6. 时代不同, 我儿子10岁就能通过github pages做一个静态网站 今天,我二娃搞了一个网页/网站,他通过 GitHub Pages 完成的,其实不难。几天前,他注册了一个 GitHub 账户(被戏称为全世界最大的“同志网站”——gayhub),取了个 ID,叫做 faceless15748。他说 faceless15 已经被人注册了。 他还自学了 HTML 和 Markdown,并且稍微懂一些 JavaScript...
  7. 怎么样改变屏幕的显示方向? 只要我在家里办公,我儿子们总能趁我起身(泡茶)一小会儿的功夫去按我的键盘.这不,一会儿不知道怎么回事, 我的屏幕就成这样子了. 后来查了, 发现儿子(更有可能是两个儿子各按到一些键)是碰巧按到 CTRL + ALT + 方向下 键.这得是多小的概率啊. 同理,屏幕方向朝上需要按快捷键 Ctrl + Alt +...
  8. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...

如何轻松创建并托管你的 GitHub Pages 站点 (无服务器静态应用)

2025年1月24日 05:10

创建一个 GitHub Pages 站点是一个简单的过程,可以免费为你的个人、项目或组织创建网站/博客。按照此指南开始。

步骤 1:创建 GitHub 仓库

  • 登录你的 GitHub 账户。
  • 点击“新建”来创建仓库。
  • 对于个人站点,命名为 .github.io。
  • 对于项目站点,使用任何有效的名称。

步骤 2:添加你的站点文件

使用以下命令克隆仓库到本地机器:

git clone https://github.com/<username>/<repository-name>.git

创建一个 index.html 文件,包含你想要的内容。这里是一个例子:

<!DOCTYPE html>  
<title>我的 GitHub 页面</title>
<h1>欢迎访问我的站点</h1>
<p>这是我的第一个 GitHub Pages 站点。</p>

或者,你可以使用 README.md(Markdown)作为首页。

## 我的 Github 页面
### 欢迎访问我的站点
THis is my first Github Pages site.

将你的更改提交并推送到 GitHub:

git add .
git commit -m "Initial commit"
git push origin main
how-to-setup-github-pages-static-apps 如何轻松创建并托管你的 GitHub Pages 站点 (无服务器静态应用) Github 学习笔记 小技巧 程序设计 网站信息与统计 计算机 计算机

Github 上启用 Github Pages 的步骤

步骤 3:启用 GitHub Pages

  • 转到你的仓库设置。
  • 在侧边栏点击“Pages”。
  • 在“源”下选择分支(例如,main)和文件夹(如果适用)。
  • 点击“保存”。

步骤 4:查看你的站点

  • 对于个人站点:访问 https://<username>.github.io/。
  • 对于项目站点:访问 https://<username>.github.io/<repository-name>/。

步骤 5:自定义你的站点

要添加主题,请转到 Pages 设置并选择“选择一个主题”。

你还可以上传额外的 HTML、CSS 和 JavaScript 文件以进行进一步的自定义。

为什么 GitHub Pages 是“无服务器静态应用” / Serverless Apps

GitHub Pages 作为无服务器静态应用运行,因为它们直接向用户提供预构建的静态 HTML、CSS 和 JavaScript 文件,而不依赖后端服务器或运行时动态内容生成。相反,这些文件托管在 GitHub 的全球内容分发网络(CDN)上,确保快速有效的交付。

优点:

  • GitHub 提供的免费托管。
  • 不需要服务器维护。
  • 由于 CDN 分布,加载速度快。
  • 简化了静态站点的部署和扩展。

缺点:

  • 仅限于静态内容;不支持像数据库这样的服务器端功能。
  • 高级工作流的自定义需要技术知识。
  • 依赖于 GitHub 的基础设施。

GitHub Pages 的总结

GitHub Pages 是一个令人赞叹的免费托管网站的工具。只需几步,你就可以为你的项目、作品集或个人使用创建一个站点。通过利用无服务器模型,你可以构建轻量、高效且维护最小的站点。

英文:How to Setup and Create GitHub Pages (Serverless Static Apps)

本文一共 587 个汉字, 你数一下对不对.
如何轻松创建并托管你的 GitHub Pages 站点 (无服务器静态应用). (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c 如何轻松创建并托管你的 GitHub Pages 站点 (无服务器静态应用) Github 学习笔记 小技巧 程序设计 网站信息与统计 计算机 计算机
The post 如何轻松创建并托管你的 GitHub Pages 站点 (无服务器静态应用) first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 英国房子的EPC节能报告(Energe/Efficiency Performance Certificate) EPC (Energe/Efficiency Performance Certificate) 是英国房子的节能报告, 法律上规定, 每个房子都必须要有一个EPC报告, 报告的有效期为十年. 房东在把房子出租或者想卖房的时候, 这个EPC就必须有效, 在一些情况下 比如出租房子的时候, 这个EPC报告还必须符合一些最低标准, 比如房子必须满足 F档(类似及格线)...
  2. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  3. 最好的发财策略就是忘记它 在群里我和 @nationalpark 说到我用STEEM换了3000多个 YOYOW的时候我还有点沾沾自喜, 谁知道他一针见血: 听说你是steem换的我顿时心理平衡了 才突然想起来, 我半个月前是拿 500 个 STEEM 换了 将近3300个YOYOW. 今天 STEEM的价格8美元,...
  4. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  5. 英国TESCO超市有偿回收瓶子 前不久, 英国剑桥 Bar Hill 的的 TESCO乐购超市推出了一个回收瓶子的机器, 这机器就在超市入入口出. 只需要把瓶子放进去, 机器自动识别, 然后每个瓶子10P也就是相当于1块人民币. 完成后会给个小票, 买东西可以拿来当折扣用. 如果嫌麻烦, 在回收完成还可以选择捐给慈善机构. 机器非常人性化,...
  6. 面试刷题更像是一种服从性测试 在许多求职者看来,面试中的刷题环节似乎是对技术能力的直接考察。然而,从另一个角度来看,这一过程或许更像是一场服从性测试。 想象一下,当一个公司要求候选人解决复杂的算法问题或设计一个系统架构时,真正的目的并不仅仅是判断候选人是否能完成这项任务。许多时候,公司更关心的是你是否愿意花时间和精力去迎合他们的流程和标准。 为什么这样说呢?从实际工作中来看,绝大多数岗位并不需要员工每天都在解决高难度的算法问题或从零设计分布式系统。相反,工作中的任务更偏向于理解业务逻辑、维护现有系统以及团队协作。那么,为什么刷题依然是很多公司青睐的筛选方式? 答案或许在于,刷题能有效筛选出那些愿意投入大量时间准备,并在面试中展现高度配合精神的候选人。这种配合精神,是公司希望在未来的工作中看到的品质。一旦你通过了这些测试,公司就会认为你是一个值得信赖的员工,一个能遵从流程、适应规则并在需要时投入额外努力的人。 还有就是以前说的:面试刷力扣是大公司过滤的成本较低的方法之一:为啥有名的IT公司的程序员面试都这么难?,可以过滤掉大部分 False Positive,当然也有可能过滤掉人才(胜任工作的求职者)。不过对于大厂来说,招进来一个False Positive的损害要远远比错过一个False Negative大。 此外,随着AI技术的飞速发展,刷题的技术价值正在逐渐降低。像ChatGPT这样的AI工具,已经可以轻松解决LeetCode或Codeforces上的许多高难度问题,并给出清晰的解题过程。这表明,算法题不再是人类独有的技术优势,而是可以被高效地自动化处理的任务。这种变化进一步凸显了刷题在实际工作中的局限性,因为日常工作更多依赖于沟通、业务理解和对系统的长期维护,而不是短时间内解决某个抽象问题。 OpenAI推出o3大语言AI模型。 Codeforces 评分:2727——相当于全球人类程序员编码竞赛中,排名第 175 位。...
  7. 英国 NatWest 银行推出 Reward Current Account 用来交水电费等帐单可以省钱 英国 NatWest 银行推出 Reward Current Account 银行帐号, 每个月需要交会费 3 英镑, 一年则需要36英镑 并不便宜, 但是好处是 只要通过该帐号以 Direct...
  8. 离开 NPower – 在英国选择便宜的电气公司 extraenergy 在彻底离开 谢菲尔得的那一天 和房东一起读了 电表, 公寓里只用电 没有媒气 所以做饭也用电 特别贵. 虽然在 13年底装了 两个电表. 白天一个 晚上 12点到早上7点另一个表, 所以两个计费....

WordPress 极简主题 Dear v1.2.0

2025年1月15日 15:53

独立博客至今仍是不少热爱分享的博主珍贵的自留地,会愿意投入精力去维护和滋养。通过博客,可以分享自己的专业知识、经验和见解,向读者提供有价值的信息,或展现魅力,或暗自陶醉。

来自读者的评论,有意义的互动,可能就是很多人坚持的原因。甚至有人提出,关闭了评论的博客,还叫博客吗?但总有利弊,开启评论意味着你需要投入更多的时间去回复和管理,抵抗 Spam 和无聊评论的骚扰,甚至引发言语攻击的事件。

所以,Dear 主题评论功能已增加,按需自取,哈哈。本次仅更新 WordPress 版本, Typecho 版本择日再改。

主要更新内容:

- 增加评论功能及样式(请在"设置">"评论"中关闭头像显示)
- 可选回复评论框跟随,默认禁用
- 部分样式优化

新版本请从主题发布页面获取 Github 链接:WordPress 版本

通过 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

新年给博客迁新服

2025年1月6日 22:48

✨1/8日更新:3天AWS新服体验不佳,吃灰已久的Jetpack宕机监控功能3天下来跳了几次,已迁至阿里云港服。从 🇸🇬🇯🇵 再到 🇭🇰,博客站物理位置离自己更近了👏


博客重新上线时用的是Amazon Lightsail最低标准,配置是512MB内存 2vCPU,每月3刀,一个WordPress小博客站点够用了。用了一段时间有了折腾后发现不够用,就单单一次上传多个图片就能给整爆失联,得重启服务器恢复。后来干脆快照形式搬迁至1GB内存 2vCPU配置,每月5刀,用到现在没出现什么问题,期间亚马逊AWS还涨过一次价至7刀。

以上用的实例位置均在新加坡,期间有博友发现其无法畅通访问得挂梯子并告诉我(其实我自己用的网络环境中并没有遇到过,网络运营商处理这些在我看来有点玄学)。之后就心念着想换位置,理想位置是香港,毕竟是没有备案的最佳选择。还有一个想换的原因是用Bitnami栈打包的Apache服,怎么说呢,Bitnami非常好非常安全非常稳定,但对我来说太麻烦了,修改一些文件权限要整来整去,一些服务版本的更新还得大动干戈,就想换成原味。主要是自己的懒惰,就一直搁着。

新年嘛,就趁新年第一个周末给站点搬家。看了阿里云ECS和腾讯云CVM,最终选择了老东家亚马逊。亚马逊的EC2有港服,但没港服的Lightsail它更便宜!选了和原来一样的配置7刀/月,不同的是位置从新加坡换到了日本,离中国近一点哈哈,经过测试真的是快了一点~阿里云和腾讯云的轻量应用服务器也便宜且有港服,但当我看到“建站内容也是受限制的,出现违规域名会被封禁。”时总觉得会缺少点什么,虽然自己爱国守法,但还是算了,这些年使用过和正在使用的服全是外面的,也无所谓运营商玄学,就对搬回来这欲望并不是那么强烈。

周六上午就开好实例,用Debian12作服务器系统,习惯了Debian,很好。下午只需要旧服备份数据新服搭建环境后一气呵成。然而过程中出了一些状况,需要放下手头其他事,搁置了已经进行到一半的搬迁事宜。当时就连把域名解析回旧服ip从而恢复访问的操作都不想做,出现502 404 TIMED OUT之类已经无所谓了,因为儿子生病了。

周六当天儿子出现两次呕吐症状,第一次呕吐物比较少,里面有少许上午吃的水果。期间儿子还说过自己肚子痛痛,但我们仅凭他当时精神状态很正常,并就有没太多处理,只是揉揉肚子和各种无知的揣测原因。隔三四个小时后出现第二次呕吐,我们这时才意识到问题的严重性,并立马带他去医院,医生给的诊断结果是小儿病毒性肠炎。晚上儿子就出现发热症状,又是一个不眠夜。第二天还在发热,但属于低烧范围,已经不会再呕吐,也说肚子不痛痛了,状态也不错。

周日下午才有完全属于自己的时间接着去处理搬新服后续的事,算是比较顺利。出现问题是服务器莫名过载让网站无法访问,SSH也连接不上且持续很长时间,得重启服务器恢复。线索来源于“PHP message:Connection refused”,先排查插件发现W3TC所使用的缓存方式会导致此问题,Redis与Memcached都试过但问题依旧,干脆先停用,反正新服速度不错。病根应该是php,先搁置,等有空再处理~ //已解决,PHP权限问题

Lightsail真的很Light很轻量,CPU给压的死死的,便宜嘛,这货持续高负载就卡挂。属于突增型,就是说你平时使用CPU的利用率低于10%时(性能基准,实例配置不同基准百分比不同),能积累一种“能量”,当CPU利用率高于10%时,累积的“能量”就会消耗,如果持续高负载直至“能量”耗尽,CPU最大利用率就会压回10%,这就是为什么会挂掉的原因。以上是我对突增型服务器的理解,也罢,够用!

2025年了,看到大家都在写总结,晒清单,立新年Flag,由衷佩服大家的行动力,这是身为一个博主应该拥有的积极人生态度啊,反观自己真的是弱爆了。我属于是佛系,博客更新频率低,写的东西也属于肤浅的记录。时间是有的,陪小朋友、玩游戏、刷手机是我工作时间以外最放松的时候,所以不想“浪费”在写博文上。偶尔打开Follow看看大家写了啥,说真的点开订阅也成为另一种心理负担,因为每次点开后这么多的未读文章,每篇都想点进去瞄一眼,这时间就刷刷走了~

2024 年个人博客回顾

2024年12月25日 00:08

捣腾

本年度共捣腾自己的博客主题6次,见“更新日志”。新年第一天全新改版,半年后首页又换回了原来的样式。当前这个主题从2017年开始使用,至今快7年,期间捣腾很多个版本,但主旋律还是“移除”、“简化”和“禁用”。虽然7年后样式没有太大的变化,但主题从1.5M精简至100多K,插件使用量从12个精简到2个。现在我可以安心的把精力放在别的事情上了。

 

克制

今年努力克制自己不捣鼓新应用/程序,成功逃过 Memos、TiddlyWiki、Calibre-web、Freshrss、Follow、CouchDB、NAS 等等对我的诱惑。明年我可能也不会尝试。太容易安装部署的 Docker 容器,眼花缭乱的功能,耗时,收益太少。爱做笔记的朋友们,今年应该换过不少笔记程序。所谓开源、离线、块编辑、白板、多维表、点对点、自托管、一键部署、全平台,确实强大,但很累人。

 

主题

自2023年底一个月发了3个主题(DearPaperWriting)之后,今年只发了一个新主题(Text Only),各个主题都进行了一次的版本更新。明年暂时只计划对 Dear 进行更新。感谢使用和支持的朋友们,感谢厚爱!

 

发文

今年文章发表量比去年多一倍,共62篇,但水文居多,很多都是拍照凑数。无心插柳,弄了个“独立博客自省问卷15题”,最终收集答卷 46 份,是年度最高评论数文章,89条评论(别笑,已知足)。写了三篇关于“纯文本生产力”的探讨,是年度最高阅读量文章,1万7千多阅读次数。我一般不在网络上吐槽,但“都是浮云”一文成为年度最多评论的纯图片文章。

共发布 62 篇文章,浏览最多的 10 篇文章如下:
值得拥有的纯文本生产力 (17,358)
再见 2023, 2024 笃志不倦 (11,058)
2024 龙年春节出游小结 (10,573)
微言雅语 @2024-01 (9,940)
我的几个小坚持 (8,054)
如何在Bing和Baidu屏蔽CSDN和知乎的搜索结果 (6,168)
日常山野漫步 Vol.5 之凤凰山 (6,006)
日常山野漫步之大镜山至香山湖 (5,962)
珠海母亲河前山河 (5,859)
纯文本生产力方案探讨 (5,458)

共收到 1740 条评论,评论最多的 10 篇文章如下:
独立博客自省问卷15题 (89)
再见 2023, 2024 笃志不倦 (80)
都是浮云 (73)
值得拥有的纯文本生产力 (70)
2024 龙年春节出游小结 (66)
我的几个小坚持 (54)
博客2024年的最后小迭代 (46)
游中山收音机博物馆 (44)
如何在Bing和Baidu屏蔽CSDN和知乎的搜索结果 (42)
《独立博客自省问卷15题》答卷收集 (41)

 

不足

就不吐槽自己了,心知肚明就好。

 

致敬

明年,希望自己在力所能及的范围内给中文博客圈作出更多一点点的贡献。致敬热爱分享,尊重知识产权,充满正能力的小伙伴们!@印记@陈仓颉@S@风清@1900@响石潭老师@夜未央@网友小宋@老何@ACEVS@粽叶加米,还有更多,不一一罗列。

2025,继续努力。

博客2024年的最后小迭代

2024年12月8日 15:15

利用周末对博客的服务器及程序进行了一次升级。切换了 PHP 的版本,并对 Nginx 和 Memcached 都进行了升级。

此次更新主要还是为了启用 AVIF 格式的图片,AVIF 需要 PHP8 才支持。考虑到 92.9% 的主流浏览器已经支持 AVIF 格式,所以我没有考虑对低版本的浏览器进行兼容,直接整站图片替换为 AVIF 格式,删除了原图。整站图片从压缩前的 1.3GB 直接降到了 700MB,效果显著。

我的方法是使用 XnConvert 软件在本地全量压缩后上传至服务器进行切换,再使用 SQL 命令对 wp_posts 和 wp_postmeta 两个表进行图片后缀更新。主要涉及 wp_posts 表的 post_content, guid, post_mime_type 字段,和 wp_postmeta 表的 meta_value 字段。

切换 PHP 版本后,程序扩展还是 Memcached 搭配 opcache,切换 Redis 感觉没必要。WordPress 插件还是 object-cache 搭配 Autoptimize,目前也只使用这两个插件,其他都删除了,更多依赖在服务器端进行优化。

本次是2024年的最后一次折腾博客啦。

主要更新记录如下:
- PHP 版本切换至 PHP8
- 对 PHP8 进行代码适配
- 升级 Nginx 至最新版
- 升级 Memcached 至最新版
- 整站图片替换为 AVIF 格式
- 其他一些小细节优化

Kagi 搜索引擎美化分享

2024年12月4日 23:05

Kagi 是一款以用户隐私和高质量搜索结果为核心的付费搜索引擎,具有无广告、高度可定制、隐私保护、AI 功能等特点。今天通过链接 (文中有) 领取到了三个月的免费体验,整体体验不错。为优化使用 Kagi 时的体验,我按照博客色彩风格进行了 CSS 自定义,有兴趣的朋友可以参考一下。

Kagi 搜索引擎美化分享最先出现在Jack's Space

黑五了,不看看这些活动么

2024年11月28日 23:42

黑色星期五(Black Friday)是美国感恩节后的一天,即每年11月的第四个星期五,也就是今年的 11月29日。这一天标志着圣诞购物季的开始,各大商家会推出大量的折扣和促销活动,吸引消费者进行疯狂购物。随手收集了一些正在进行黑五活动的 VPS、软件和服务,看官可以瞧一瞧有没有自己感兴趣的,不要错过了一年一次的活动呀。

黑五了,不看看这些活动么最先出现在Jack's Space

瞧,这小子又换域名了

2024年10月4日 06:37

俺们这小破站又换域名了,上一篇说过,之前趁着便宜时刀了几个自认为的域名,最终把这个俺们觉得最短,有那么一点意思的域名给启用了(其实中文也没想好,待定吧,先用英文顶着),小姨子域名刚启用的时候,就有好多人说来这个迟早得换(额,不换当然也没啥影响的),但既然都刀了其它域名了,那就换了它吧,反正也没多少人会去关注到我这点改动,小站有时就是可以这么的“随性”。

国庆三天假期马上就要过去了,1号、2号逛新商场(从上个月30号晚上就开始逛了),吃了不少钱,也花了不少钱,没办法,总要贡献点吧,今天一天是“特种兵”式的跑了几个地方,也就一百公里的地方,其中有一半都是山路,来来回回的转,开的我都快晕了,后排的那几位更加,好在中午的铁锅炖鱼还行,连我家那挑剔的小朋友都吃了好几块,也算是不虚此行吧(别问我为什么去,我就是个司机,哈哈)。

明天估计可以待家好好歇歇了,媳妇后天就要上班了,所以得收敛一些,要不然后天上班又要没精神了。

给主页添加一个轮播memos动态

2024年11月25日 19:12

常来我博客逛的朋友们应该都注意过,我的右上角有个寄语。如下图:

我在想有没有一种可能直接拉取Memos的数据,从而动态去取呢。
反正是用js的写起来,测起来都很方便。
随后花了半小时,写了个脚本,看起来它运作的不错。
顺便让豆包给了段样式,做了淡入淡出。
有需要的朋友可以自取,注意下版本号,由于是js拉取的,所以你在本地建一个html也可以进行测试。

以下Memos的API版本为:Version: v0.22.4

网页部分

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html lang="en">
<script src="./a.js"></script>

<body>
<div id="description">
<a>最近在搜寻有趣博客中...</a>
</div>
</body>

</html>

js脚本

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
String.format = function () {
if (arguments.length == 0)
return null;
var str = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
str = str.replace(re, arguments[i]);
}
return str;
}


let data = {}
let index = 0

function refreshContentInterval() {
if (index >= 4) index = 0;
index++;
var firstData = data[index]
var result = firstData.snippet;
if (result.length > 30) {
result = result.slice(0, 30) + "...";
}
let post_index = "改成转跳的页面";
const descriptionDiv = document.getElementById('description');
descriptionDiv.innerHTML = '';
const aTag = document.createElement('a');

aTag.textContent = result;
aTag.href = post_index;
aTag.id = "fading-a"
descriptionDiv.appendChild(aTag);
}

function showFirstContent() {
var bbUrl = "https://你的memos域名/api/v1/memos?filter=creator=='users/1'&&visibilities=='PUBLIC'&&pageSize=5";
fetch(bbUrl).then(res => res.json()).then(resdata => {
data = resdata.memos;

refreshContentInterval();
setInterval(refreshContentInterval, 3000);
});
}


// 当页面加载完成后执行的函数
window.onload = function () {
showFirstContent();
}

css样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 定义要添加淡入淡出效果的a标签样式 */
a#fading-a {
opacity: 0; /* 初始设置为完全透明 */
animation: fadeInOut 3s ease-in-out infinite; /* 应用淡入淡出动画,持续时间3s,缓动效果为ease-in-out,无限循环 */
}

/* 定义淡入淡出动画关键帧 */
@keyframes fadeInOut {
0% {
opacity: 0; /* 开始时完全透明 */
}

30% {
opacity: 1; /* 中间达到完全不透明 */
}

80% {
opacity: 1; /* 中间达到完全不透明 */
}

100% {
opacity: 0; /* 结束时又回到完全透明 */
}
}

以上,晚饭后半小时的摸鱼杰作。

遭遇Follow源失效

2024年11月4日 14:07

rss订阅本质上就是访问一个存于网站的不定期发布的xml文件,我的网站每次生成静态页面的时候都会更新这个文件。
从上周五开始,我在follow上的源显示失效,实际上是可以正常访问的(通过浏览器访问这个文件)。
https://vrast.cn/atom.xml?t-1730687790025
本文记录一下这个问题以及如何去解决。

询问

找到博客圈的大佬 dujun,帮忙看看是否能访问,结果是不行。

@keyle 嗯,你网站现在不能访问了。我本地可能有缓存。我用国内和境外的两台云电脑访问你的网站,都提示 DNS_PROBE_FINISHED_NXDOMAIN。

合理推测

由于之前套了又拍云,本质上是将自己的站点做了反代,访问过来的流量实际上会走又拍云的服务器。
使用 https://tool.chinaz.com/speedworld/vrast.cn/atom.xml 站长测试工具,测试果然是有问题的。
又拍云的小鸡在外网访问速度都是0,应该是做过隔离处理。
将套的CNAME停用,等了十分钟再次测试,结果如下,直连可以访问。

解决问题

再次在Follow上刷新订阅源,问题解决。

再次感谢 @dujun 的帮助,如果你也套了CDN发现类似无法访问问题,也可以用站长工具测试下,外网是否被屏蔽。屏蔽的话,这个follow肯定就拉不到源的。

后记

我在又拍云提交了一个工单,很快就收到了回复。原来又拍云是可以控制是否启用全球访问。
这里要给又拍云大量的夸夸!真的很棒!

CDN性能优化一栏内可以找到这个选项

杜老师说网站更新图解

2022年6月25日 00:00

想知道杜老师每次发布新文章时,网站的更新流程吗?耗时半天设计的流程图,展现杜老师卓越的艺术细菌!点进来看看吧~

更新图解

看懂的小伙伴记得评论:

流程详情

  1. 首先判断更新的是主题还是文章,如果是文章则直接上传至 GitLab;

  2. 如果是主题则通过 Webhook 触发服务器生成本地时间点标识文件并上传至 GitLab;

  3. GitLab 文件更新会触发 gitlab-runner 开始自动化构建;

  4. 进入指定目录「文章或是主题」开始同步最新代码;

  5. 如果是主题则执行清理数据缓存;

  6. 生成网站页面代码;

  7. 压缩网站页面代码;

  8. 网站源码上传至 GitHub;

  9. 触发 Vercel 获取源码后生成站点;

  10. 通过套路云 CDN 加速展示。

参与设备

自动构建所用到的设备是套路云的 ECS,配置为 1H2G。构建速度还算可以,但部署比较慢,最大瓶颈是 1M 的小水管!

代码托管在自家 NAS。配置不多说了,毕竟 GitLab 存储代码和触发事件都不需要太多资源。

写在最后

估计很多小伙伴看完杜老师的图解后,都会忍不住说一句:其实不用这么麻烦!

确实这道工序有些复杂。

有些小伙伴曾好奇杜老师是做什么的。杜老师是一枚不称职的云计算运维工程师,为什么说不称职呢?因为目前在 CEC 做云计算运维讲师,而且一做就是七年。

习惯大型集群架构的杜老师喜欢套用多种服务实现一个功能,让每一层独立处理自己的事。虽然效率不高,但和做人是一样的,最重要就是开心嘛!

修改 GitLab 默认地址及端口

2021年10月22日 00:00

为了方便更新文章,杜老师使用 Docker 搭建 GitLab 做文章管理,后期迁移到群晖上,并做了外网的映射。迁移后需要修改 GitLab 的域名及端口,那么就分享下修改方法。

地址修改

查询绑定地址或 IP 的命令为:

1
grep ^external_url /etc/gitlab/gitlab.rb

如需修改绑定地址,则编辑文件/etc/gitlab/gitlab.rb:

1
external_url http://gitlab.dusays.com;

端口修改

如需修改修改端口,则编辑文件/etc/gitlab/gitlab.rb:

1
nginx['listen_port'] = 8080

记得取消注释。最后提醒任何配置修改完后,需要重跑一下配置:

1
gitlab-ctl reconfigure

如何将 Hexo 部署到 OSS

2021年10月19日 00:00

鉴于最近 GitHub 从中国大陆访问网速较慢,而且现在国内阿里云 OSS 支持将静态网站部署在上面,而且访问速度尚可。今天杜老师为大家介绍一款插件,可以将 Hexo 部署到 OSS。

准备工作

已搭建 Hexo 博客,如果还未搭建,可以参考《杜老师说同款博客搭建》一文。同时需拥有阿里云账号,注意部署静态网站需要实名认证,且域名需备案:

插件安装

1
npm i -S hexo-deployer-oss-aliyun

注意:在 Hexo 博客目录下执行上面的命令。

插件配置

1
2
3
4
5
6
deploy:
type: aliyunoss
region: Endpoint
bucket: Bucket
accessKeyId: AccessKey ID
accessKeySecret: AccessKey Secret

注意:在 Hexo 配置文件 _config.yml 中添加上面配置,并按实际情况修改,如有任何问题,可在评论区中留言。

写在最后

改好之后记得保存,保存好之后执行 hexo d,一般没问题的话就可以将 Hexo 生成的静态文件上传到 OSS 中。默认将文件上传到阿里云 OSS Bucket 根目录下,如需要部署到其它目录,在 deploy 下添加 remotePath 选项进行指定。

另外在创建阿里云 OSS Bucket 时,应将存储权限设置为公共读。

两种通过 Nginx 实现强制 HTTPS 访问方法

2021年10月13日 00:00

现在 HTTPS 已非常普遍,很多网站都加了 SSL 证书,但仍然有许多访客使用 HTTP 的方式访问,今天杜老师分享下两种通过 Nginx 实现强制 HTTPS 访问方法。

强制跳转访问

1
2
3
4
5
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END

注意:将上面的代码无需任何编辑,直接复制到 Nginx 的配置文件中即可,当用户通过 HTTP 访问,会强制跳转到 HTTPS 的形式。

强制安全访问

1
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

注意:max-age 为强制最大时间,单位为秒,设置 31536000 则含义为一年内强制使用 HTTPS 的形式访问;includeSubDomains 含义为包含二级域名,如存在该设置,则 dusays.comcdn.dusays.com 都要验证;always 为响应所有的请求头。

80 端口重定向三种解决方案

2021年7月27日 00:00

当搭建非 80 端口服务时,是无法直接通过域名访问的。一般我们会通过 Nginx 的反向代理功能实现端口重定向,今天我们聊一下三种重定向解决方案。

通过 Nginx 等反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#PROXY-START/
location /
{
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
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;

add_header X-Cache $upstream_cache_status;

#Set Nginx Cache

add_header Cache-Control no-cache;
expires 12h;
}

#PROXY-END/

注意:其它 Web 引擎的反向代理配置,可以参考《常见 Web 引擎的反向代理配置参考》一文。

通过 CDN 指定源地址

以阿里云 CDN 为例,演示如何配置实现反向代理:

通过 IPTABLES 防火墙

1
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

注意:如果需本机也可以访问,则需配置 OUTPUT 链,可参考命令 iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080,外网访问需要经过 PREROUTING 链,但是 localhost 不经过该链,因此需要用 OUTPUT。

通过 firewalld 防火墙

1
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080

注意:如果需开启 IP 地址伪装,则运行 firewall-cmd --permanent --add-masquerade

正向、反向代理区别

2021年2月16日 00:00

正向代理是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。

正向代理介绍

这种代理其实在生活中是比较常见的,比如访问谷歌网站技术,其用到的就是代理技术。

用户想要访问某国外的网站,该网站无法在国内直接访问,但是我们可以访问到一个代理服务器,这个代理服务器可以访问到这个国外网站。这样用户对该国外网站的访问就需要通过代理服务器来转发请求,并且该代理服务器也会将请求的响应再返回给用户。这个上网的过程就是用到了正向代理。

所以,正向代理,其实是代理服务器代理了客户端,和目标服务器进行交互。

通过正向代理服务器访问目标服务器,目标服务器是不知道真正的客户端是谁的,甚至不知访问自己的是一个代理。

正向反向区别

  1. 正向代理其实是客户端代理,帮助客户端访问其无法访问的服务器资源。反向代理则是服务器的代理,帮助服务器做负载均衡、安全防护等等;

  2. 正向代理一般是客户端架设,如在自己的机器上安装一个代理软件。而反向代理一般是服务器架设的,比如在自己的机器集群中部署一个反向代理服务器;

  3. 在正向代理中,服务器不知道真正的客户端到底是谁,以为访问自己的就是真实客户端。而在反向代理,客户端不知道真正的服务器是谁,以为自己访问的是真实的客户端;

  4. 正向代理、反向代理的作用和目的不同。正向代理主要是来解决访问限制问题。而反向代理是提供负载均衡、安全防护等等作用。二者均能提高访问速度。

常见 Web 引擎的反向代理配置参考

2021年2月10日 00:00

反向代理是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

反向代理介绍

反向代理在计算机网络中是代理服务器的一种。服务器根据客户端请求,从其关系的一组或多组后端服务器上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的地址,而不知道在代理服务器后面服务器集群的存在。通过反向代理服务器访问目标服务器时,客户端是不知道真正的目标服务器是谁的,甚至不知道自己访问的是一个代理服务器。

反向代理用途:

  1. 隐藏服务器真实 IP。使用反向代理,可以对客户端隐藏服务器的地址;
  2. 负载均衡。反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上;
  3. 提高访问速度。反向代理服务器可以对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度;
  4. 提供安全保障。反向代理服务器可作为应用层防火墙,为网站提供对基于 Web 的攻击行为例如 DDoS 的防护,更容易排查恶意软件等。还可为后端服务器统一提供加密和 SSL 加速,提供 HTTP 访问认证等。

引擎配置示例

Apache 的配置示例:

1
2
3
4
5
6
7
8
#PROXY-START/
<IfModule mod_proxy.c>
ProxyRequests Off
SSLProxyEngine on
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</IfModule>
#PROXY-END/

Nginx 的配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#PROXY-START/
location /
{
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
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;

add_header X-Cache $upstream_cache_status;

#Set Nginx Cache

add_header Cache-Control no-cache;
expires 12h;
}

#PROXY-END/

OpenLiteSpeed 的配置示例:

1
2
3
4
5
6
7
8
9
extprocessor 反代示例 {
type proxy
address http://127.0.0.1:8080
maxConns 1000
pcKeepAliveTimeout 600
initTimeout 600
retryTimeout 0
respBuffer 0
}

Apache 主配置、站点配置文件参考

2020年12月21日 00:00

我们在搭建网站时,为了方便管理,常常会选用 PHP+MySQL 这种架构,Web 引擎可选择 Apache 或是 Nginx。今天杜老师说一下,选择 Apache 时,主配置文件和站点配置文件如何改写!

Nginx 主配置文件

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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
ServerRoot "/www/server/apache"
Listen 80
Listen 443
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule mpm_event_module modules/mod_mpm_event.so
oadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule http2_module modules/mod_http2.so
<IfModule http2_module>
ProtocolsHonorOrder On
Protocols h2 http/1.1
</IfModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar|apk|7z|so|iso|app|doc|ppt|xls|wps|dll)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm|mpeg|asf|wmv|wma|3gp|mkv|flv|f4v|webm|mpg|acc)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/*
AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
<IfModule unixd_module>
User www
Group www
</IfModule>
ServerAdmin you@example.com
ServerName 0.0.0.0:80
<Directory />
AllowOverride All
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.htm index.php
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "/www/wwwlogs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "/www/wwwlogs/access_log" common
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/www/server/apache/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/www/server/apache/cgi-bin">
AllowOverride All
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-default.conf
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
TraceEnable off
IncludeOptional /www/server/panel/vhost/apache/*.conf
ServerLimit 1600

注意:以上为 Apache 主配置文件参考,这里假设已安装相关的模块。日志目录为/www/wwwlogs/,Nginx 安装目录/www/server/apache/,站点信息配置文件目录为/www/server/panel/vhost/apache/。

站点配置文件

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
<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot "/www/wwwroot/7bu.top/public"
ServerName e0a2fcea.7bu.top
ServerAlias 7bu.top www.7bu.top
ErrorLog "/www/wwwlogs/7bu.top-error_log"
CustomLog "/www/wwwlogs/7bu.top-access_log" combined
<Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$>
Order allow,deny
Deny from all
</Files>
<FilesMatch \.php$>
SetHandler "proxy:unix:/tmp/php-cgi-72.sock|fcgi://localhost"
</FilesMatch>
<Directory "/www/wwwroot/7bu.top/public">
SetOutputFilter DEFLATE
Options FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php index.html index.htm default.php default.html default.htm
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin webmasterexample.com
DocumentRoot "/www/wwwroot/7bu.top/public"
ServerName SSL.7bu.top
ServerAlias www.7bu.top 7bu.top
ErrorLog "/www/wwwlogs/7bu.top-error_log"
CustomLog "/www/wwwlogs/7bu.top-access_log" combined
SSLEngine On
SSLCertificateFile /www/server/panel/vhost/cert/7bu.top/fullchain.pem
SSLCertificateKeyFile /www/server/panel/vhost/cert/7bu.top/privkey.pem
SSLCipherSuite EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLHonorCipherOrder On
<FilesMatch \.php$>
SetHandler "proxy:unix:/tmp/php-cgi-72.sock|fcgi://localhost"
</FilesMatch>
<Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$>
Order allow,deny
Deny from all
</Files>
<Directory "/www/wwwroot/7bu.top/public">
SetOutputFilter DEFLATE
Options FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php index.html index.htm default.php default.html default.htm
</Directory>
</VirtualHost>

注意:以去不图床的配置文件为例,可自定义项分别是:监听端口、站点域名、网站目录、端口转发、证书信息、强制跳转、地址重写、文件缓存、文件屏蔽等等。

Nginx 主配置、站点配置文件参考

2020年11月14日 00:00

我们在搭建网站时,为了方便管理,常常会选用 PHP+MySQL 这种架构,Web 引擎可选择 Apache 或是 Nginx。今天杜老师说一下,选择 Nginx 时,主配置文件和站点配置文件如何改写!

Nginx 主配置文件

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
user  www www;
worker_processes auto;
error_log /www/wwwlogs/nginx_error.log crit;
pid /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
multi_accept on;
}
http
{
include mime.types;
include proxy.conf;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server_tokens off;
access_log off;
include /www/server/panel/vhost/nginx/*.conf;
}

注意:以上为 Nginx 主配置文件参考,这里假设已安装相关的模块。日志目录为/www/wwwlogs/,Nginx 安装目录/www/server/nginx/,站点信息配置文件目录为/www/server/panel/vhost/nginx/。

站点配置文件

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
server
{
listen 80;
listen 443 ssl http2;
server_name 7bu.top www.7bu.top;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/7bu.top/public;
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
ssl_certificate /www/server/panel/vhost/cert/7bu.top/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/7bu.top/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
if ($host ~ '^www.7bu.top'){
return 301 http://7bu.top$request_uri;
}
include /www/server/panel/vhost/open_basedir/nginx/7bu.top.conf;
include enable-php-73.conf;
include /www/server/panel/vhost/rewrite/7bu.top.conf;
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
location ~ \.well-known{
allow all;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log off;
access_log /dev/null;
}
location ~ .*\.(js|css)?$
{
expires 12h;
error_log off;
access_log /dev/null;
}
access_log /www/wwwlogs/7bu.top.log;
error_log /www/wwwlogs/7bu.top.error.log;
}

注意:以去不图床的配置文件为例,可自定义项分别是:监听端口、站点域名、网站目录、端口转发、证书信息、强制跳转、地址重写、文件缓存、文件屏蔽等等。

网站时间的那些事

2020年11月8日 00:00

我们想访问一个网站时,每次按下回车或是点击链接,都希望网站页面能尽快的映入到我们眼帘,那您知道每次等待的时间中,都发生了什么?

域名查询时间

我们需要知道,在网络中,两个设备间的通信是需要 IP 地址才可以的,也就是说,您每次访问网站时,都是通过 IP 地址实现的,可您输入的明明是域名,并不是 IP,这又是什么情况呢?

原因就是您的电脑,会自动去询问设置在您电脑上的 DNS 服务器,然后通过 DNS 服务器返回的 IP 地址访问网站。而询问的过程,就是域名查询时间,大家可以用 Ping 命令,测试一下与 DNS 服务器的连接时间,可以大致得出域名查询时间。为什么说大致,因为 Ping 命令只可以测出连接时间,DNS 还需要处理!

网络队列时间

电脑知道要访问网站的 IP 后,就会与之通信,而在网络中与之通信的不止是您一个,那么多人同时访问,先处理谁后处理谁?这时就需要排队了!排到您了,服务器自然会处理您的请求。

当然不只是网络资源要排队,服务器的内部处理进程,也需要排队的,等待排队还有数据处理,都需要时间的!

页面生成时间

以我们的常见的博客程序 WordPress 为例,WordPress 是用 PHP 语言所写,通过 MySQL 来存储数据,Nginx 为页面解析。所以 PHP 首先去找 MySQL 索要数据,然后再通过 Nginx 服务生成页面数据。

您的每次浏览 PHP 都需要去 MySQL 中索要一次数据,然后再经过 Nginx 生成,所以您会发现,有些网站打开后再刷新,速度并没有变很快!

文件传输时间

页面数据传输到您的浏览器之后,您的浏览器就会开始加载页面数据包含的文件,例如 JavaScript 库、CSS 样式表、图片等等,这些时间就取决于您的带宽和浏览器的处理能力了。

一般的浏览器会默认缓存这些静态类文件「简单来说就是不会经常变的文件」使得再刷新时,不用重新下载,从而加快浏览速度!

常用页面加载速度优化方法

2020年3月10日 00:00

我们在打开网站时,会发现有些网站打开特别慢,有些网站瞬间打开,今天杜老师与大家聊聊常用页面加载速度优化方法!

加载速度

一个网站加载速度受很多因素的影响,在客户端方面,主要受网速和电脑性能影响。当然,浏览器也影响加载速度!

当然服务端的优化更为重要,受服务器性能、网速等综合因素的影响,我们下面说说优化细节。

合并文件

将 JavaScript 代码和 CSS 样式分别合并到一个共享的文件。这样不仅简化代码,而且执行 JavaScript 文件的时候,如果 JavaScript 文件比较多,就需要进行多次 GET 请求,延长加载速度,将 JavaScript 文件合并在一起后,自然就减少 GET 请求次数,提高加载速度。

图片技术

sprinting 是一种网页图片应用处理方式。它是将一个页面涉及到所有零星图片都包含到一张大图中去,然后用 CSS 技术展现出来。

这样一来,当访问页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来,可以减少整个网页图片大小,并利用 sprinting 能很好地减少网页的 HTTP 请求,从而大大地提高页面的性能。

压缩文件

压缩技术如 gzip 可有效减少页面加载的时间。包括 HTML/XML/JSON/JavaScript 和 CSS 等,压缩率都可以在大小 70% 左右。

文本压缩用得较多,一般直接在空间开启就可以,而图片的压缩就比较随意了,很多都是直接上传,其实还有很大压缩空间。

一个小博客的成长

2020年2月24日 00:00

有学生找到我,说想做一个和我这个一样的博客,但不知道如何操作。今天杜老师与大家聊下,如何搭建一个博客,以及一个小博客的成长!

博客初建

首先你在博客的运营商,例如网易、新浪 and so on 上注册,他们提供免费域名,免费空间,甚至免费程序模板,我们所要做的,就是安心写写文章。

过段时间之后,你会发现,小博客无法满足你的要求了,例如代码高亮,自定义导航栏。这时我们就可以申请个空间,去搭建真正属于自己的博客。

前期的博客只是写着玩,无非花费太多,在目前的互联网上,你可以找到免费的空间,免费域名,甚至免费程序。不过一段时间之后,你会发现免费的才是最贵的,动不动就出现一些问题,让你没法安心的写博客。

既然如此,我们转战收费市场,在知名度较高的服务商,买个空间以及域名,将之前的博客转移过去。在你感叹终于可以安心写博客时,你的访问量也逐渐升高。服务商不断打电话催你:你的网站访问太大,小小的空间无法让你再施展,建议你升级下空间。

然而,空间的升级是无止境的,所以你干脆狠下心,买一台服务器。但服务器价格太高,买一个 VPS 也还不错。自己定义环境,想要啥就有啥。在你幻想再也不用听客服哔哔时,突然发现网站宕了。

原来,VPS 也无法满足你了,看来,网站的访问量已经特别高了,如果你想,相信访问量带来的广告费已经可以支付购买服务器的差价了。

最终,你还是将博客,运行在服务器上面。你想升级之路到此为止?非也,后面的路还长着呢!

博客做的越来越大,以致于一台服务器也承受不了时,我们就需要扩展架构了。

博客升级

要做的就是 Web 和数据库分离,使 Web 可以存放更多文件,数据库的存取效率更高。请求先发送到 Web 端,Web 端判断请求信息为静态还是动态的,静态本地处理直接返回,动态的就连接到数据库调用数据。

增加一台 Web 服务器,专门用于存放静态文件,在此上做 Nginx 基于文件类型的分发,静态的自己去处理,动态交给另一台服务器处理。这样就把大量请求分流,减少动态服务器的压力。

再增加一台 Web,同样进行动态文件处理,更大程度减少动态服务器的压力。

增加一台数据库服务器,将两台服务器读写分工,一台只负责读,另一台只负责写入。

在 Web 和数据库之间加入 Memcached 缓存服务器,加速数据处理过程。

大量购买节点,搭建 CDN 服务器,在最外层分担压力。

如何建好家装论坛

2020年2月18日 00:00

有个同学,父亲开了一家装修公司,想在网上搭建一个平台,做宣传的同时,也可以和同行相互交流。最后他来问我,选什么平台比较好,如何搭建这种平台,那杜老师就来说下如何建好家装论坛!

何为论坛

网络论坛是一个和网络技术有关的网上交流的场所。一般就是大家口中常提的 BBS。BBS 的英文全称是 Bulletin Board System,翻译为中文就是电子公告板。

BBS 最早是用来公布股市价格等类信息,当时 BBS 连文件传输的功能都没有,且只能在苹果计算机上运行。因为现在网络知识流行太快,每个行业都会有一个自己在网络中进行交流的一块区域,论坛是最好的地方。

搭建步骤

首先需要选择一个域名,最好配合地区以及行业。

其次选择一个网站空间,就是存放网站文件用的。如果是做论坛,建议选择国内空间,因为做起来后,对带宽的要求很大。虽然国外空间可以满足带宽要求,不过因为传输距离等等原因,速度不能达到理想标准。

然后选择程序,如果是做论坛,建议选择国内的 Discuz 或 PHPwind。虽然都是论坛,不过国外程序不太符合国人使用习惯。而且 Discuz 和 PHPwind 也有些不同,要先选个自己较熟悉的,往往后期再去熟悉可能会影响网站的访问。如果没有头绪,建议选 Discuz,它的模板插件都很丰富,而且使用率很高的,出现问题也很容易处理。

接下来就是模板了。一定要选个符合论坛主题的模板,当然前期可以使用默认,然后要合作者或是论坛会员投票选取,不要经常换取模板,因为模板的套接字不同,每换一次模板,百度都要重新收录一次,要知道人家可没有心情经常更新。

插件不是越多越好,先要讲究实用,因为过多插件也会拖慢论坛访问速度。建议多选择互动性插件,例如论坛任务插件等等。

上面提到了合作者。很多人可能优先想到了美工、运维技术人员,其实这些都不重要,模板可以解决美工问题。如果空间是主机商购买来的,那恭喜你,技术问题你也不用担心,他们都会帮你处理。最好的合作者是业内的同行,他们的专业性文章以及想法,都会提升论坛价值。

最后说下论坛内容。前期版块不需要弄太多,我见过一个新论坛,刚建不久各种版块。先不说专业不专业,一堆版块就会给人感觉太空,感觉这个论坛并不太受欢迎。毕竟论坛是建立在互动基础上的,人气是论坛价值的体现。

建议按照个人擅长,建立对应领域版块,等人气上来了,再扩充子版块,或是根据论坛会员以及论坛发展需求建立对应版块。

给网站首页的文章标题下添加评论预览

2024年10月13日 13:23

起因是我想在博客的主页就看到水友们的评论,这样方便我一一回复,而不是每次都点进去。
有时候回复多了,会忘记是在哪个页面出现的评论。
正巧我看到 姜先森 的博客,是如下的样式。
这不刚好能借鉴一下,随后对本博客进行了一个小范围的改造。

去除了网页右侧的最近8条评论,添加了首页的文章前五条评论预览


我这边风格是比较朴素的,所以去掉了前面的icon。

twikoo API 调用注意事项

我发现了twikoo的getRecentComments API ,给它限定数量的话他会累积所有post url的评论总和前x条评论。
很显然这不符合需要,正常我们需要的都是每条post的前几条评论,随后对这个API进行每个URL分别调用。

老规矩放下代码,感兴趣的可以直接参考下面的代码进行调整:

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
83
84
85
86
87
88
89
90
91
92
93
94
!function () {
const elements = document.querySelectorAll('.twikoo-comment-count');
const postUrls = [];

elements.forEach(element => {
const url = element.getAttribute('url');
if (url) {
postUrls.push(url);
}
});

twikoo.getCommentsCount({
envId: 'https://twikoo.vrast.cn',
urls: postUrls,
includeReply: false
}).then(function (res) {
elements.forEach((element, index) => {
const elementUrl = element.getAttribute('url');
const matchingRes = res.find(item => item.url === elementUrl);
if (matchingRes) {
element.textContent = `${matchingRes.count} 条评论`;
}
});
}).catch(function (err) {
console.error(err);
});

//需求2 预览部分评论
const commlistElements = document.querySelectorAll('.commlist');
const postUrls2 = [];

commlistElements.forEach(element => {
const url = element.getAttribute('url');
if (url) {
postUrls2.push(url);
}
});


postUrls2.forEach(postUrl => {
twikoo.getRecentComments({
envId: 'https://twikoo.vrast.cn',
urls: [postUrl],
pageSize: 5,
includeReply: false
}).then(function (res) {
commlistElements.forEach(commlistElement => {
if (commlistElement.getAttribute('url') === postUrl) {
let commentCount = 0;
res.forEach(item => {
if (commentCount <= 5) {
const li = document.createElement('li');
// const divAvatar = document.createElement('div');
// divAvatar.classList.add('avatar', 'letter-fallback');
// divAvatar.setAttribute('data-fallback', item.nick[0]);
// divAvatar.style.backgroundColor = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;
// divAvatar.style.transform = 'rotate(0deg)';
// divAvatar.style.transition = 'transform 0.5s ease-in-out';

const a = document.createElement('a');
a.href = item.url + '#' + item.id;
a.title = item.comment;

// 使用 DOMParser 解析评论内容
const parser = new DOMParser();
const commentFragment = parser.parseFromString(item.comment, 'text/html').body;

// 将评论内容添加到昵称后面
a.textContent = item.nick + ': ' + commentFragment.textContent;

const spanContent = document.createElement('span');
spanContent.classList.add('comment-content');
spanContent.appendChild(a);

const spanRight = document.createElement('span');
spanRight.classList.add('right');
spanRight.textContent = item.relativeTime;//new Date(item.created).toLocaleDateString();

// li.appendChild(divAvatar);
li.appendChild(spanRight);
li.appendChild(spanContent);

commlistElement.appendChild(li);
commentCount++;
}
});
}
});
}).catch(function (err) {
console.error(err);
});
});
}()

《独立博客自省问卷15题》答卷收集

2024年10月12日 13:05

独立博客自省问卷15题》一文发布后收到不少反馈。原意只是发篇文章自省自娱,没想到收到不少博主的答题卡,也有在自己博客上发文答卷的,而且答题都十分认真,想法也很有意思。

为此,我收集了一些分享到本文中。欢迎大家在原文评论或者在自己博客发布后留言给我。如果不希望你的答卷出现在本文,也可以联系我删除。

目前已收集答卷 47 份。


CCABD CBADC DADDA

来自 天一生水


DDADD DACDC CADDB

来自 陈仓颉,已重新发文补充,点此查看


第五条,每天一换,哈哈

来自 段先森,已重新发文补充,点此查看


1.随机,看心情
2.B
3.A
4.D
5.D
6.随机,看心情
7.一次开发
8.C
9.D
10.D
11.C
12.扯闲篇
13.D
14.D
15.没有/取悦自己

来自 大致,已重新发文补充,点此查看


最近天天折腾主题,没有文学造诣,瞎写一通,纯自娱自乐,没有变现的初衷。

来自 飞絮落叶雪,已重新发文补充,点此查看


CAADC DBCDC CABCC

来自 冰剑


摆烂,随性,取悦自己的而已=w=

来自 白熊阿丸


1 C 纯粹懒
2 C
3 A 早期在CSDN倒是还有转载
4 B 多少有点意义
5 B 自己写的,算B吧,几个月没动了,但是后面肯定又会改
6 C 算C吧,除非专门找时间来改动,不然只是很细微的小调整
7 B 自己写的,就随便改了,看到别人样式好看就考虑模仿一下
8 C 不是拿来陶醉的,只是经常会看一下和别人博客的样式哪里不同
9 D 域名就那样了,用着就行
10 C 记得就看看统计
11 D 拒绝广告,除非能流量大到免费无法承受
12 A 肯定看别人写的内容,内容才是优先的
13 D 看内容(除非网页看着非常难受
14 D 看内容
15 AB 都有,主要还是学习到了东西

综上:CCABB CBCDC DADDA

来自 sehnsucht


1、C 保持基本月更。
2、A 恰逢假日,毕竟博客建立的目的就是为了记录
3、AB 生活都是鸡毛,类技术有部分参考
4、BC 无论生活技术类,或多或少都是有帮助,就像我们可以通过博客了解不同环境国度的神奇经历。
5、D 这个真懒
6、D 有需求才会折腾
7、B 极少,博客的最终我觉得还是极简。
8、C 以前几乎天天打开,现在随机看rss
9、D 有中意的,但是目前这个也有感情了。
10、C 偶尔看看吧!
11、C 没想过,因为情怀因素占了大部分。
12、A TO 4
13、D 极少留意域名,但是速度和风格很加分,当然内容才是最重要。
14、D 内容,这肯定,谁会一直注意内容以外的三个选项
15、ABC 哈哈 能订阅的都是人才啊!还是那种有点性格的。

来自 网友小宋,已重新发文补充,点此查看


1、D.最近都是几个月已更
2、B.上周
3、B.部分借鉴
4、C.每日每周流水账(自己的流水账)
5、D.凭良心说,我多年都是一个主题(很久不换主题了)
6、D.一年有那么一次
7、A.直接配置使用,省心不折腾(技术能力有限)
8、C.看心情
9、D.目前挺好,没想法
10、C.记得就看看
11、D.拒绝广告,保证阅读体验
12、A.学习别人分享的知识/C.看看别人怎么装修博客,自己也抄一下,感觉都比自己的好
13、E.(以上都是)
14、E.(以上都是)
15、E.(以上都是)

来自 二猫


1、A(有时候多,有时候少,平均下来一两周一篇)
2、C(十一出去玩了,这段时间无更新)
3、A
4、B(努力在做)
5、D(二十多年来,换过两三次)
6、D
7、A(改过一点点,年龄大了,折腾的越来越少,主要是搞点内容方面的创作了)
8、A
9、D(还是因为年龄大了,不想折腾了,也没有很好的新想法了)
10、C
11、C
12、A
13、D
14、D
15、A(个人觉得,相比较近几年大量碎片化的信息,写博客算是一种能静下心来好好思考的途径)

来自 风雨行者


CABBD
CBADD
CABDB
总结:自己在写文章时,会非常开心,有成就感。虽然已经有许多的沉默成本,但会坚持,爱好很少,坚持很重要。

来自 云心怀鹤


1.C
2.A
3.A
4.B
5.每个几年自己重新写一套,换换新鲜感
6.C
7.自己写的主题,时常改
8.C
9.D
10.C
11.C
12.看看别人的生活,吹水一波
13.D
14.D
15.AB

好歹也玩了10多年博客了,有过功利,但现在都是浮云。

来自 威言威语


1、你的博客更新频率是多少?

A.每周更新

2、你的博客上次更新是什么时候?

A.本周

3、你的博客文章是原创的吗?

B.部分借鉴

4、你觉得自己的文章对他人有帮助吗?

D.自我陶醉就好,管他呢

5、你上次换博客主题/程序是什么时候?

B.上个月

6、你上一次捣腾博客主题代码是什么时候?

A.昨天,撸代码到凌晨

7、你会对博客主题进行二次开发?

B.时不时自己改改,搞点新花样,换图片,换字体,爽

8、你多久打开自己博客自我陶醉一次?

A.每天数次

9、你近期对自己博客域名什么感受?

D.目前挺好,没想法

10、你每天都会看网站的流量统计吗?

C.记得就看看

11、你通过博客的广告赚到钱了吗?

E. 没赚到

12、你去浏览别人的博客/网站主要为什么?

C.看看别人怎么装修博客,自己也抄一下,感觉都比自己的好

13、看到别人分享了一篇文章,你打开第一反应是什么?

B.哇,这网站速度真快,图片延迟加载丝滑

14、你觉得博客哪方面更重要?

D.内容

15、近期通过写博客有哪些新收获?

B.认识了新朋友

来自 Yawata


1、你的博客更新频率是多少?
D.几个月一篇

2、你的博客上次更新是什么时候?
C.上个月

3、你的博客文章是原创的吗?
A.坚持原创

4、你觉得自己的文章对他人有帮助吗?
C.每日每周流水账

5、你上次换博客主题/程序是什么时候?
C.去年

6、你上一次捣腾博客主题代码是什么时候?
C.每月有那么一次

7、你会对博客主题进行二次开发?
D.改得面目全非,但保留原作者版权信息或注明

8、你多久打开自己博客自我陶醉一次?
C.看心情

9、你近期对自己博客域名什么感受?
B.如果域名能再短几个字符就更好了

10、你每天都会看网站的流量统计吗?
C.记得就看看

11、你通过博客的广告赚到钱了吗?
D.拒绝广告,保证阅读体验

12、你去浏览别人的博客/网站主要为什么?
A.学习别人分享的知识

13、看到别人分享了一篇文章,你打开第一反应是什么?
D.看看文章内容

14、你觉得博客哪方面更重要?
D.内容

15、近期通过写博客有哪些新收获?
B.认识了新朋友

比较随性,有空就来看看博友们。

来自 粽叶加米


1、你的博客更新频率是多少?

B.一周数篇

2、你的博客上次更新是什么时候?

A.本周

3、你的博客文章是原创的吗?

A.坚持原创

4、你觉得自己的文章对他人有帮助吗?

D.自我陶醉就好,管他呢

5、你上次换博客主题/程序是什么时候?

B.上个月

6、你上一次捣腾博客主题代码是什么时候?

C.每月有那么一次

7、你会对博客主题进行二次开发?

A.直接配置使用,省心不折腾

8、你多久打开自己博客自我陶醉一次?

A.每天数次

9、你近期对自己博客域名什么感受?

D.目前挺好,没想法

10、你每天都会看网站的流量统计吗?

D.没有搞流量统计,都是浮云

来自 Gruntz


D C A D C D B C D D C A D D A
多少有点随心所欲了。

来自 土拨许


1.无定论,看情况,因为鬼知道有没有人提供灵感/我有没有刚需
2. 7天,京东暴雷现状教训(rolling)
3.尽量坚持原创,有时引用其他人文章(会放链接)
4.B
5.D,主要是看情况,一般不会倒腾主题
6.D
7.B,主要是用的WordPress的2023主题,那玩意儿感觉还要再等几年才能看起来没啥问题,不喜欢折腾主题,够用就得,除非有啥事需要推广会直接写在主题里面
8.A,最近要拿文章内容填课程报告,唉,当初想不出内容拿之前写的东西填那玩意儿,然后真答辩完发现原文还不能直接填进去(最低要求10页)
9.D,主要是因为没钱
10.B,主要看Jetpack,然后CloudFlare
11.C
12.A,谁特么看博客是为了抄主题的啊;谁特么是为了搬运啊,别人都写了自己没思想只搬运那不就成内容农场了吗,我为何不直接去看来源?
13.D,没钱;广电,广大炮,广断网,广没六,广五十兆,超级小广,广just works,十年广电宽带历练让我基本上对速度不敏感,基本上也就是看看observatory之类的针对自己强迫症改改
14.D,没内容建个毛博客,费钱费力,不如对蔡英文打胶,或者蹭蹭抱枕,亦或是跟Linux互相上演丽塔的蔷薇一梦的戏码,反正不管怎么说,没内容分享的话,基本不会考虑博客
15.没有,因为博客没啥人看没人给什么建议,最近一次是针对博客样式崩坏提出的意见(打算不去管了,试图在新发布的文章绕过去)

来自 TuskedEvening0


1. D 之前更得勤快些,高三以来都基本没怎么写过了。
2. A 这周一时兴起写了一篇
3. A 全部原创。之前有段时间博客拆了又建,建了又拆,因为那时候自己写的文章不堪入目,删文章又费劲,直接把网站文件删掉重建。
4. D 详见 https://www.xiaozonglin.cn/meaning-of-blog-posts-and-commenting/
5. C 没怎么记,大概是。
6. 没折腾,跟主题的作者有联系,在同一座城市,他经常拿我的博客看看他的代码有没有问题。
7. 同上
8. D
9. D
10. D
11. D 之前有申请过谷歌联盟,但被驳回了。
12. B
13. B
14. D
15. B

来自 林林杂语


发文的答卷:
- @1900'Blog
- 印记
- Muel-Nova
- 秋风于渭水
- 大大的小蜗牛
- ACEVS
- 破袜子
- 飞絮落叶雪
- 竹炉山房
- 段先森
- Dennis
- 园子里的日光
- WangDedou
- 陈仓颉
- 网友小宋
- 我与我周旋久
- Justin
- 梅之夏
- 记录生活,精彩一刻
- 菲兹克斯喵
- 风清的精神角落
- 草方块
- 弈趣極光
- 浮心物语
- 土拨许
- Peter
- 子书沐晨
- 初白
- 揽星
- 扶苏
- Pinpe
- ztrztr
- 时光流·言

最后更新于 2025-02-26 21:13

独立博客自省问卷15题

2024年10月9日 23:50

以下问卷纯粹自省自娱,自我调侃,勿对号入座。

如有不适,请及时关闭浏览器窗口。

如有启发,建议每隔一段时间服用一次。

 

1、你的博客更新频率是多少?

A.每周更新

B.一周数篇

C.一月1-2篇

D.几个月一篇

 

2、你的博客上次更新是什么时候?

A.本周

B.上周

C.上个月

D.上季度

 

3、你的博客文章是原创的吗?

A.坚持原创

B.部分借鉴

C.AI 帮我写的

D.搬运别人的,而且不署名

 

4、你觉得自己的文章对他人有帮助吗?

A.旨在对他人有启示

B.多少有点意义

C.每日每周流水账

D.自我陶醉就好,管他呢

 

5、你上次换博客主题/程序是什么时候?

A.上周

B.上个月

C.去年

D.凭良心说,我多年都是一个主题

 

6、你上一次捣腾博客主题代码是什么时候?

A.昨天,撸代码到凌晨

B.每周必捣腾

C.每月有那么一次

D.一年有那么一次

 

7、你会对博客主题进行二次开发?

A.直接配置使用,省心不折腾

B.时不时自己改改,搞点新花样,换图片,换字体,爽

C.删除主题作者版权信息,改改样式,然后自我感觉良好

D.改得面目全非,但保留原作者版权信息或注明

 

8、你多久打开自己博客自我陶醉一次?

A.每天数次

B.每周一次

C.看心情

D.一般都是照镜子,不看博客

 

9、你近期对自己博客域名什么感受?

A.想搞到一个 .COM 的域名

B.如果域名能再短几个字符就更好了

C.今年才换双拼域名了,明年再看看

D.目前挺好,没想法

 

10、你每天都会看网站的流量统计吗?

A.每天看几次,今天又多了100PV

B.每周回顾,看看流量趋势

C.记得就看看

D.没有搞流量统计,都是浮云

 

11、你通过博客的广告赚到钱了吗?

A.有,能覆盖建站费用

B.有,但付出大于收入

C.没考虑通过博客流量赚钱

D.拒绝广告,保证阅读体验

 

12、你去浏览别人的博客/网站主要为什么?

A.学习别人分享的知识

B.搬运别人的内容

C.看看别人怎么装修博客,自己也抄一下,感觉都比自己的好

D.不爱看别人博客,自己爱写啥写啥

 

13、看到别人分享了一篇文章,你打开第一反应是什么?

A.哇,这域名真不错,怎么我没想到

B.哇,这网站速度真快,图片延迟加载丝滑

C.哇,这程序/主题不错,我也要抄一抄/留言问问哪里搞的

D.看看文章内容

 

14、你觉得博客哪方面更重要?

A.域名

B.服务器

C.主题

D.内容

 

15、近期通过写博客有哪些新收获?

A.知识面有拓展

B.认识了新朋友

C.写作水平提升

D.通过知识变现

 

年轻的时候,谁不曾执着过?回头想想,大多是浮云。捣腾后有沉淀,有长足的进步,有输出,未尝不可。但切记人生有限,岁月如梭。

以上部分问题也适用于捣腾知识管理工具上。

如有好问题,欢迎建议。

将评论组件切换到twikoo

2024年10月8日 12:39

原因很简单,waline的响应太慢了,拉个20余条的评论居然要半分钟。
实在无法忍受,直到今天才抽空换一下评论组件,现在将组件切换为twikoo。
基本做到了评论2秒内刷出来的程度。
下面简单介绍下基于 Maupassant 主题进行评论迁移的过程。
大部分的流程都类似, https://twikoo.js.org/ 的流程文档也比较细,照做就行了。
我这边使用的本地部署,所以直接用docker就行了。

使用twikoo加载完毕回调

这个 onCommentLoaded 回调函数,按照官方文档来讲就是评论区渲染完毕后调用。
我有个需求是将评论数量取出来,放到页面头部,进行一个显示与点击转到评论区。
如果你也有类似功能可以参考下面的初始化代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if theme.twikoo.enable == true
#tcomment
script(src='https://registry.npmmirror.com/twikoo/1.6.39/files/dist/twikoo.all.min.js')
script.
twikoo.init({
envId: '#{theme.twikoo.envId}',
el: '#tcomment',
region: '#{theme.twikoo.region}',
path: '#{theme.twikoo.path}',
onCommentLoaded: function () {
const commentCountElement = document.querySelector('.tk-comments-count');
const targetElement = document.querySelector('.waline-comment-count');
if (commentCountElement) {
const countSpan = commentCountElement.querySelector('span:first-child');
const commentCount = parseInt(countSpan.textContent);
targetElement.textContent = commentCount;
} else {
console.log('未找到评论数量元素');
}
}
})

填写twikoo的初始化参数

如果是本地化部署,需要注意下面的参数填写,envId 一栏填写评论组件的地址即可,其他不需要填写

1
2
3
4
5
twikoo: ## See: https://twikoo.js.org
enable: true ## If you want to use twikoo comment system, please set the value to true.
envId: https://twikoo.vrast.cn ## Tencent CloudBase envId
region: ## Tencent CloudBase region, e.g. ap-shanghai
path: ## Article path, e.g. window.location.pathname

评论数据迁移

waline的数据可以直接导出为json,在twikoo的后台界面直接导入即可。

数据备份

他的数据位于 app/data 内,定期备份下面几个json文件就行了。

入门blog回忆录

2024年9月29日 09:33

周六早上,我发现有人在我的blog上留言,问我为什么可以坚持那么久,为什么要写blog,以及怕不怕有隐私的问题。这条评论我已经回复过了,所以具体是怎么回复的,我也就没有必要再详细说明。

每一代人都有每一代人的特点以及习惯。对我来说,我在最花样的时候接触到了blog这种东西,也把这个东西一直坚持了下来。在开始blog之前,我已经有了做网站的想法,但是要怎么做网站呢?自己用花生壳搭建一个,然后买个域名绑上去?我真的有想象过那样做,但是这样干的话,如果我把电脑关了,那岂不是不能访问?如果不是这样,我还得先买个空间。在哪里买?得花多少钱?对学生时代的我来说,那些要花钱的东西基本上我都不会考虑。还有一点,搭建一个网站,我应该用什么软件呢?当时我想搭建一个网站,主要的思路是搭建一个静态的网站,所以肯定得把整个网站的内容都做好了,然后放到网上,但关键是我要做什么内容呢?一开始我想到的是The X-Files。我为什么要做那个呢?纯粹因为喜欢?别人的网站做得比我详细比我好,唯一的问题就是那些都是英文的,仅此而已。我把那全站翻译过来也没什么意义,因为我模仿不出那个效果。当我有那个念头的时候,网站上很流行用flash之类的东西。那个时候的我对flash可以说是一窍不通的。高中的时候,电脑选修课程我选的是photoshop。在我有网站念头,但不知道该如何操作的时候,我遇到了blog。因为Yo soy Betty la Fea,我遇到了danzhu,准确来说是遇到了danzhu的网站。没有那么多花哨的东西,吸引我的只有内容。她的网站几乎没有图片,又或者说实际上是有的,但不是直接以图片的方式贴出来,而仅仅是发一个链接而已。如果某篇里有个图片,大多时候是某个工具的使用,而不是粉丝花痴的内容。从那个时候开始,我就觉得blog这种方式很赞。之所以我会停留在那个网站不停地翻看,一遍又一遍阅读是因为那些内容、那些文字,以及那些链接带出来的信息。第一次看的时候可能是看文字。第二次看的时候是找链接。第三次看的时候可能是记得好像见过某个东西,但又好像找不到了,于是不停地在那里翻。当时danzhu的网站是在blogger上面建的,域名是新浪的。当时danzhu的那个网站不完全是Yo osy Betty la Fea 的内容,也有她自己的东西,她自己的生活以及她的生活和这部电视剧产生的某些联系,还有一些她对这部电视剧又或者是她搜索相关资料之后的感想。那是我第一次知道,原来网站是可以这么干的。有些人把blog作为一个专业的网站,但我更习惯于danzhu的这种方式,以至于后来其实我也在遵循或者说是模仿,或者是融入了自己的东西继续这种形式。在Google上建立网站不用钱,但关键是在国内不能直接访问,所以你得买个域名,然后绑上去。虽然当年我经常访问那个网站,基本上打开电脑之后,我就一定要去那个地方,但现在我居然忘了域名到底是什么,网站名到底是什么?后来新浪的域名估计再也没有续费了,这网站不能访问。因为那里丢空了太久,danzhu自己也忘记了对应的blogger账号,所以她也没办法访问后台,把网站的内容导出。当时我称呼danzhu为danzhu姐姐。唯一肯定的是她一定比我大,因为我首次接触的时候,我只是个高中生,但她已经工作多年了。她好像是从事IT工作的,但具体做的是什么,她并没有在那个网站上有非常详细的描述,不像现在我自己的blog那样,基本上里里外外没有什么保留着。

那个网站,让我明白到分享的乐趣,或许写那些的时候,她没有想过其他人会搜索,会喜欢上,而且是非常喜欢。对她自己而言,可能更是一个记录,因为她自己喜欢那个东西,所以她就把自己的爱好记录下来。可能,她开始做的时候,没有想过因为她的这个网站,会聚集了一帮喜欢的人,同时也让我成为了她的粉丝之一,最后也让我走上了blog这条不归路,一发不可收拾。

现在如果你突然问我,有什么是让我觉得很骄傲的。把一件事坚持20年,而且还一直保留着高度的热情。我觉得,起码对我来说,到现在为止,这肯定是我觉得最骄傲的事情。

WordPress & Typecho 极简主题 Dear v1.1.0

2024年9月22日 21:11

周末对 Dear 主题 WordPress & Typecho 版本都进行了小更新。主要增加独立的“搜索模板”,并对行距、次要字体等地方进行了小优化。

Dear 主题首页设置页面 id 后,会引用该页面的所有内容和样式,同学们可以对该页面尽情发挥想象力,以满足个性化需求。比如展示订阅地址、社交网站地址等等,也可以贴个封面图作为首页 Banner 等。如下图 Follow Me:WordPress & Typecho 极简主题 Dear v1.1.0-雅余

本次版本主要更新内容:

- 增加独立“搜索模板”
- CSS 样式移至 style.css 文件
- 首页默认显示8篇文章
- 部分样式优化

新版本请从主题发布页面获取 Github 链接:

WordPress 版本Typecho 版本

给嵌入的memos添加评论

2024年9月14日 14:53

事情的起因还是博友评论,为什么我这边memos页面无法进行单独的说说评论。

凡事先要纠结下

我就想看看有没有别的博主做过类似的解决方案。

别说我还真找到了一个宝藏博主 用Memos API实现hexo博客的动态说说页面

又要迁移评论?

由于要接入这个评论twikoo,之前的评论只能是导出再迁移进twikoo。

我这个博客评论开了一个月,就算需要迁移,数量也不多,三百条都不到。

正在准备导出数据的时候,发现当前时间段不能导出,我先做服务搭建然后明天再导入数据

发现新问题

既然数据不能导出,那我先做一下前端页面。我尝试制作的时候发现问题了,memos的数据格式不匹配,我用的memos的api太新了。最后想想要不就改下现在的脚本,这样可能还快一些,数据也不用迁移了。

换方案自己改脚本给memos添加评论

过程曲折,修改后源码还是直接放在gtihub上了,有缘人自取。
链接地址同上一篇文章 将最新版的memos嵌入hexo

添加评论功能

修复右侧历史评论回复无法跳转到评论页面问题

留下一些遗憾

  1. 没有解决在历史评论中直接跳转到速记页面的上次评论位置
  2. 没有解决速记界面的评论数量显示,目前只能点击评论后再显示评论数量

那些我喜欢的博客

2024年7月11日 22:57

那些我喜欢的博客 - 第1张图片

千人千面,一千个读者中就有一千个哈姆雷特,独立博客圈中也是如此,每个博主都有独一无二的博客,看见圈内有人讨论那些令人讨厌或不喜欢的功能,遂心生兴趣,也来参与一番讨论。

单说“功能”或许过于片面,在我看来,一个博客能否足够吸引来访的读者,功能只是其中之一,于是今天的标题即为那些我喜欢的独立博客。

之前看王刚的探店视频,他提到过夜宵大排档和一般饭店的区别,夜宵大排档的菜味道重,多以咸、辣为主,而饭店则较为讲究,要考虑到不同地方的饮食习惯和口味,前者主要是让食客通过这种令人印象深刻的味道记住这家店,下回想吃夜宵就能第一时间想到它,而后者是为了让食客吃饱、吃好。

我喜欢夜宵大排档,约上三五好友,配上啤酒烤串,足以畅谈各种趣事,回忆曾经美好。同时,我也喜欢像夜宵大排档一样的博客,第一次访问就能给你留下深刻的印象,可能是标新立异的logo,别有寓意的名字,也可能是精彩的内容……往往这种博客,不仅能记住它长什么样,更能记住它的域名。

陈仓颉的博客,以他独具特色的 icon 让我记忆深刻,因为对其了解甚少,通过询问才得知这是注音符号,远远望去又像两人勾肩搭背,以及他的域名,imzm.im,我是最美(zm),你对他的印象自然不言而喻,确实挺美。

破袜子,正经人谁取这名?域名还是大连话破袜子的发音,但博主大致确实是正经人。记住了破袜子,还记住了大连话怎么说,另外还有他不定期更新的《每夫吐槽》,第一眼看上去是每天吐槽,但文中解释说“夫=大姨夫”,人家大姨妈才一个月来一次,大姨夫吐槽凭什么天天有,所以不是每天吐槽。

我的博客没什么特色,如果非要说一个,或许是右上角的印章,让我从一个二十多岁的小年轻,变成了别人眼里的中年男人,这可能不但是我的博客特色,更是我的审美特色。

吸引一个人,不是需要你穿得花枝招展,也不是需要你甜言蜜语,而是细节,细节上的特色。

博客上增加什么不会让人觉得多余?我觉得是一个丰富的“关于”页面。

为什么需要一个关于页面,我在之前的文章里也简单分享过,从另一个角度来说,创建一个关于页面很简单,但向别人介绍你自己却不容易,就好比面试,在有限的时间里向面试官介绍尽可能详细的自己,考验你的表达能力、思考能力、观察能力。博客上的“关于”页面又何尝不是如此,但并非越详细越好,还是上面说的,细节与特色。

有人说现在大家看长文的能力逐渐退化,越来越缺乏读完一篇文章的耐心,这其中固然有短视频的影响,但我们也要扪心自问,谁愿意阅读文章的时候弹出广告,谁愿意阅读那些”四种茴字写法“式的文章,谁愿意看到最后还需要登录账号,谁愿意看都还没看就弹出让你下载app的提醒。

吸引一个人,不是需要你穿得花枝招展,也不是需要你甜言蜜语,而是整洁、得体。

以上是我喜欢的那些博客,你不一定喜欢,也不一定非要喜欢,博客是自己的博客,喜欢是自己的喜欢,削足适履、因噎废食不可取。

那些我喜欢的博客》最先出现在印记

记录本站的一些优化

2024年9月13日 18:30

之前搭建了个本地搜索,大约1.74M,让网页访问拉慢了,但是没办法,不然搜索不能用。

现在想办法把加载速度从其他地方找补一点回来。

使用图片延迟加载

github地址: hexo-lazyload-image
使用下面指令安装
npm install hexo-lazyload-image --save

配置如下,loadingImg需要注意要添加站点url,否则会出现页面内的post找不到loading图问题

1
2
3
4
5
lazyload:
enable: true
onlypost: false
imageCDN: # eg https://same.cdn.com/
loadingImg: # eg ./images/loading.gif

在这里可免费制作loading图 loading.io

资源压缩

Hexo-minify
Hexo-minify 是一款 Hexo 压缩插件,它可以压缩 HTML、CSS、JS、Font、Image(jpg,png,gif,webp,svg)

网页预加载

InstantClick CDN
当用户的鼠标悬停在一个链接上时,InstantClick 就会开始预加载该链接指向的页面内容。一旦用户点击这个链接,新页面几乎可以瞬间显示出来,因为大部分内容已经被预加载好了。它通过在后台异步加载页面资源,减少了用户等待页面加载的时间。

让hexo同时支持valine与waline

2024年9月12日 16:28

实现这点很容易,首先valine与waline用的是一套数据结构,他们互相兼容。
数据库可以不用迁移仍使用LearnCloud的,这里顺便说下为什么我没有在本地部署数据库。

部署waline遇到的一些事

部署waline有几种方案:
git/npm/yarn 部署 与 Docker部署。看上去部署的方式很多。本质上就docker与其他。
如果用docker会面临一个问题,docker环境如果连接本地Mysql,需要将Mysql的端口暴露出去,然后通过IP访问。
它并不能支持到loadhost之类的方式去访问数据库。

用”其他” 的方式部署,倒是可以直接连本地数据库,但是又涉及到安装环境问题。wailne需要本地支持Nodejs18+。
我的主机是Centos7.9没法去安装这个,所以这个方案就pass。

最终在没有多余的选择下,还是使用docker + 使用LearnCloud数据库,当然这样做也不是没有好处的。
我可以随时在waline与valine 两种评论组件之间互相切换,它并没有切换成本。

在waline上不需要再重新调邮件部署了,两者都兼容的情况下只需要保留valine的邮件通知即可,当然你要说反过来保留waline的也是可以的。
即使他们是兼容的,也有一点不足,在waline上他是支持了Markdown图片提交,但是在value的邮件通知上,并不支持markdown格式的解析。所以会造成收到邮件后显示一串markdown格式的文本,会让人摸不着头脑。

waline有一些有趣的功能

发现有个功能类似QQ群的头衔,比较有互动性,添加一下。

环境变量参考

如果你也在宝塔下部署waline,可以参考下面的配置。注意这边没有加入邮箱的配置。
SITE_URL一栏如果启用https去访问评论后台,必须添加,否则会出现无法进入等问题。
原理是在https的环境下去请求http资源,导致不响应。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TZ=Asia/Shanghai
SERVER_URL=评论站点url
SITE_NAME=主站名
LEAN_ID=
LEAN_KEY=
LEAN_MASTER_KEY=
LEAN_SERVER=
SITE_URL=https://vrast.cn/ 启用ssl必须要有,而且不能有引号,踩坑点
LEVELS=0,10,20,50,100,200,300,400,500,600,800 用户等级
IPQPS=5 评论间隔
COMMENT_AUDIT=false 启用审核
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NODE_VERSION=20.16.0
YARN_VERSION=1.22.22
NODE_ENV=production

小结

这玩意坑也不少,前端倒是容易解决,无非在console里面调试下代码。
环境问题要么就docker要么升级系统,不过谁会为一个评论插件去升级系统,这不本末倒置。

以上浪费6小时,仅以此文纪念失去的六小时,啊,六儿啊…

给hexo添加本地搜索

2024年9月11日 11:00

之前用多个google搜索,baidu搜索也用过,实际上体验并不如何好。
主要是更新慢,百度收录还不全。
所以我还尝试了 swiftype ,这个搜索引擎是收费的。
搜索效率高,收录提交虽然也不慢,但是它收费呀。

这时候我看到有个本地搜索的选项:

1
self_search: false ## Use a jQuery-based local search engine, true/false.

稍微了解下发现它是基于xml文件索引的,大概原理是将往期文章要素存在xml,然后js搜索对应的数据。
通过npm进行安装,这是源项目地址 https://github.com/wzpan/hexo-generator-search

1
$ npm install hexo-generator-search --save

工作原理

运行 hexo g 之后,实际会生成下面的xml文件在根路径下。节选部分结构,发现这确实只是一个内容匹配。

1
2
3
4
5
6
7
8
9
10
11
12
<entry>
<title>五分钟了解 GitHub Actions</title>
<link href="/posts/30334/"/>
<url>/posts/30334/</url>
这里是一些文章数据
<categories>
<category> 分享 </category>
</categories>
<tags>
<tag> github_action </tag>
</tags>
</entry>

加载与搜索速度都比站站外的工具快,好用,推荐。

效果如下:

演示站点: https://vrast.cn

WordPress 版本 Text Only 和 Writing 主题错误修复

2024年9月7日 10:53

昨晚更新 Paper 主题的时候发现了一处拷贝错误,把旧主题的代码直接粘贴了,部分 PHP 版本没有提示错误,所以没发现。现已对 WordPress 版本 Text Only 和 Writing两个主题发新版本修复,可针对性更新。主要是 archives.php 和 search.php 两个模板文件。

详细可查看主题发布页:Text Only (WordPress)Writing (WordPress)

WordPress & Typecho 极简主题 Paper v1.1.0

2024年9月7日 00:32

Paper 这款纯文本的极简主题得到不少同学的喜爱,应部分同学的要求对主题进行了更新。主要增加独立的“搜索模板”,并对多处负空间进行调整,增加文字呼吸的空间。还修正了”文章归档“模板的一处错误,可针对性更新。

主要更新内容:

- 增加独立“搜索模板”
- 菜单及部分代码调整
- CSS 样式移至 style.css 文件
- 优化多处负空间距离
- 优化评论框样式
- 修复文章归档模板错误

新版本请从主题发布页面获取 Github 链接:

WordPress 版本Typecho 版本

不知不觉这个月搭了一堆服务

2024年9月6日 10:48

昨天晚上补充了下uptimerobot的网站监控列表,没想到多了那么多应用。

基本上都是自用的服务,小小的vps承受了难以承受之重。

有个服务想推荐一下

其中 思绪导图 (https://map.vrast.cn) 是开放的服务。我比较喜欢这个应用。之前下了好几个不同的思维导图,在家里的mac上,公司的电脑也没有相关的软件,主要是没找到合适的windows上的,刚好看到这个docker果断下手,结果就是真香。
它并没有在服务器存储东西,实际上是个本地文件编辑器,所以权限上是很让人放心的。
快捷键也是很全的,所以编辑起来比较顺手。下面是参考图。

你有什么推荐的docker应用吗?

自定义 Mac 文件夹图标

2024年9月5日 22:55

不知道是否有网友和我一样,看多了macOS 系统蓝色文件夹图标,难免有些审美疲劳,并且文件夹一多,找起来也会头晕眼花。这篇文章将简单分享一下如何自定义文件夹图标,将其修改为类似于“下载”、“文稿”、“资源库”等系统文件夹那样带图案的文件夹。

自定义 Mac 文件夹图标最先出现在Jack‘s Space

Obsidian 和 WordPress 我都用什么插件

2024年9月3日 19:24

Obsidian 插件

1. Hover Editor
快速悬浮模式编辑。

2. Outliner
整理大纲。

3. Clearing Unused Images
用于清理图片,该插件默认不开启,需要清理时才启用。但现在基本不插入图片到笔记,纯文本记录。

以上就是我当前使用的所有第三方插件。之前也试过安装 Calendar、Kanban、Thino 等等插件,但感觉都没太大必要,软件自带功能和核心插件完全可以应付常规笔记需求。插件多了反而影响软件秒开。

我使用 Obsidian 插件的使用原则是,脱离 Obsidian 后,所有内容可以在其他编辑软件中继续正常使用。这意味着类似 Dataview 需要语法来判断、筛选内容的插件不符合我的要求。没有 Dataview 的便捷性,反而让我对于索引卡制作和双链的使用更加严格,对内容有更多的思考。提升效率的插件可以考虑安装一两个,或者多记几个快捷键。


WordPress 插件

1. Akismet
默认插件,能应付部分垃圾评论。

2. Autoptimize
优化 HTML、CSS、JS。

3. Object Cache
优化缓存。

4. WP Permalinks Migration
去年简化固定链接后作重定向安装的,计划明年删除。

以上就是我当前使用的所有插件,其他就是依赖部署服务器的时候一些优化,买的最低配轻量应用服务器。目前感觉网站整体速度还可以。我的开源主题,我会在functions.php 中禁用一些不需要的功能。我自己用的主题,我会禁用更多,比如禁止WordPress自动生成缩略图、禁止响应式图片。我不考虑使用第三方服务,比如图床,以避免以后服务终止或迁移带来的困扰。

-

个人觉得,做笔记也好,写博客也好,软件/程序功能上的需求没有那么多,就是图片和文本信息。基于极简原则,其他都是画蛇添足或锦上添花。花样多,需要投入的非必要时间就多,让你分心的东西越多。够用就好。

自定义 Mac 文件夹图标

2024年9月2日 09:55

不知道是否有网友和我一样,看多了macOS 系统蓝色文件夹图标,难免有些审美疲劳,并且文件夹一多,找起来也会头晕眼花。这篇文章将简单分享一下如何自定义文件夹图标,将其修改为类似于“下载”、“文稿”、“资源库”等系统文件夹那样带图案的文件夹。

自定义 Mac 文件夹图标最先出现在Jack‘s Space

修改FoF:Upload 插件 贴图字符串规则,使其兼容markdown

2024年8月29日 13:00

修改FoF:Upload插件

Flarum站点使用的图片上传插件,他有自己的格式如下:

1
[upl-image-preview url={URL}]

当然这个格式肯定不是我想要的,于是乎需要对该插件进行一点小小的扩展;
通过在工程内搜索 [upl-image-preview url= 这串文本可以定位到 ImagePreviewTemplate.php 文件。

虽然我没做过php开发,但是略懂一点语法,找到BBCode的格式化的函数,修改之。

继续看这个ImagePreviewTemplate.php派生自AbstractTextFormatterTemplate.php文件,找到他的应用BBCode解析的函数,发现这是一个正则匹配模板,这样就只需要添加一个新的正则匹配即可。

效果达成,如果你也有类似需求可参考我的修改,文末奉上调整后的代码.

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
public function preview(File $file): string
{
$bbcode = $this->bbcode();

// 针对新的 bbcode 格式进行替换
return preg_replace_callback_array([
'/\]\((?<find>.*)\[\)/' => function ($m) use ($file) {
return str_replace($m['find'], $file->base_name, $m[0]);
},
'/size=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->humanSize, $m[0]);
},
'/uuid=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->uuid, $m[0]);
},
'/path=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->path, $m[0]);
},
'/url=(?<find>{.*?})/' => function ($m) use ($file) {
return str_replace($m['find'], $file->url, $m[0]);
},
// 处理新的格式 '![]({URL})'
'/\!\[\]\((?<url>{.*?})\)/' => function ($m) use ($file) {
$replacedUrl = str_replace('{URL}', $file->url, $m['url']);
return '!['. $file->base_name. ']('. $replacedUrl. ')';
},
], $bbcode);
}

去文字说明部分

在hexo下一般会显示图片说明,如下图:

我这边是截图居多,不需要这个,可以做如下修改,改完之后就像上面这张图一样没有文字说明了:

1
2
3
return '!['. $file->base_name. ']('. $replacedUrl. ')';
替换为
return '![]('. $replacedUrl. ')';

七牛云存储做图床

2024年8月28日 21:59

有一些大图在自己的小破站上存储有点捉襟见肘,想着弄个图床吧。外面的图床免费是免费但是图片也丢到公共空间去了。
博客算是半开放空间,大概我是这样定义的,还是自己弄个七牛云的图床用下。

我在网上云了一下有个叫Lsky Pro的项目,方便部署(是个方便上传图片的前端),图片提交之后还是会获取到一个七牛云存储的固定连接:
比如这个:

1
http://file.vrast.cn/2024-08-28/1724860812-796130-dsc00528?imageMogr2/rotate/-90

部署 Lsky Pro 需要仔细对着文档操作,注意使用的php版本最好为8.0最佳。

这样就能省去每次都登陆七牛空间提交图片的繁琐步骤。

新方案

我这个站点的结构有点特殊,主站是hexo,子站是flarum。实际上文章都是在flarum上拟好稿子,然后再提交到主站点上。
现在我的操作步骤变成了,先在wiki站点上编辑,然后在图床站点提交图,然后再回来粘贴图片地址。
???
哇,要问什么要搞图床前端,我看你们好多人都搞了呀。而我,一个flarum用户,只需要安装个插件就可以直接在flarum站点上粘贴图片,自动提交到七牛云。


使用 composer require "overtrue/flysystem-qiniu:*" -W 安装七牛云支持。

别忘了设置下自定义源站域名

七牛云提供免费90天dv证书


给二级域名套一下,这样就可以实现全站https

成果感人

以上,折腾一天浪费时间,姑且水它一篇文。

后记

收到好几条回复,dujun 基本把我遇到的问题都点出来了。

1
2
3
4
5
6
7
dujun Chrome 128.0.0.0 macOS 10.15.7
9 小时前回复
所以我用动态博客,并且不用图床。客观上的原因是不想花额外的钱——云服务器无限流量不怕刷,
其他都有破产风险。主观上,要专门找地方存储图片视频这个额外动作,会打断我写文章的思路,
很烦躁——能够产生表达欲,想生产一篇内容是极其难得事情了。而且我写内容时比较随性,
把图传上去之后预览看效果,再挑挑拣拣。就会留下很多垃圾文件。我后台做了定时清理,
删除没被引用的文件。图床还要额外管理吧。

你说的这个问题,我刚才已经在七牛的存储空间看到了,如果我粘贴了A图,然后删除,再次粘贴A图,实际后台会向七牛空间传递两次同样的数据,七牛并没有做数据筛选,会出现两个前缀不通的,同名后缀文件。白话就是,文件会重。

还有碎文件的问题,如果本地我只需要收集下所有文章的url,然后用目录中的图名做一个contains,不存在链接中的图做一个删除操作。在七牛我不知道如何去收集一个列表,而且又涉及到双站点的问题。

我还是给云主机做个硬盘扩容10G存图用,外层再套个全站CDN,大概效果也是一样的。

valine添加邮件通知

2024年8月21日 10:41

服务都是基于LeanCloud的,顺便调查下LearnCloud公司的背景,原来这家公式主业是服务游戏企业的。

  • 迅驰智能科技有限公司自主研发的精益管理系统(lean management system)云平台。
  • 最初由美味书签(北京)信息技术有限公司开发和运营。2021 年 4 月 6 日,心动公司(2400.hk)宣布完成对 Leancloud 的收购。收购后,Leancloud 将与心动公司旗下 TapTap 的开发者服务(TDS)团队整合,一起负责公司面向开发者的产品线。
  • 为开发者提供数据存储、文件存储与 CDN、消息推送和即时通讯等后端云服务,同时提供支撑后端代码的云引擎和云函数等开发工具,全面涵盖移动开发的需求,并提供易于集成的全平台 SDK,支持 iOS、Android 应用和游戏开发。2020 年,在 Leancloud 的收入结构中,来自游戏开发商用户贡献的收入占比已超过 50%。

本篇记录下Valine-Admin文档里没写的,可以提供一些文档之外的补充。

在最新的文档指导下出现报错

在Valine-Admin的官网指导下,部署出现报错,然后看了下issues ,果然有人跟我一样的问题,随后进入抄作业流程。

参考 zhaojun1998@aa10da0 将 package.json 中的 “node”: “6.x” 改为 “node”: “12.x” 即可。
那就直接用 https://github.com/Druadach/Valine-Admin.git 也是可以的。
如果需要定制还是要自己改配置,所以最佳方案还是自己fork下,然后修改nodejs版本号
https://github.com/KeyleXiao/Valine-Admin 这是我改好的链接。

设置自动唤醒

配置好环境之后还有一点小活儿需要做,免费账户主机一天之中有7小时会休息,需要设置下自动唤醒。
先准备好账号密码,账号需要用smtp发信的账号。前面测试可以弄个1分钟触发,测试是否能正确登录url,本质上是模拟评论后台的登录过程,要求在user表配置的账户信息就是自动登录需要的账号密码。
账号处理完毕之后添加自动登录功能,其实这个绑定的域名手动登陆也挺方便的。

设置安全域名

最后不要忘记了添加安全域名,防止自己的api被盗用。如果设置错了,会显示你的页面被拒绝。

所以填写的时候需要注意

充值十块钱保平安,防止免费账户被删除。

网站运行状态监控工具(uptimerobot)

2024年8月12日 12:39

今天介绍一下 uptimerobot (uptimerobot.com) 它提供的服务(网站运行状态监控)对于我们小体量用户来说是免费的,有需求的小伙伴可以准备薅羊毛了。

uptimerobot 主要提供以下功能:

  • 实时监控:UptimeRobot能够实时监控网站的运行状态,包括服务器的响应时间、网站的可访问性等。一旦网站出现问题,如宕机或响应缓慢,UptimeRobot会立即通知用户,以便用户及时采取措施。
  • 多种通知方式:UptimeRobot支持多种通知方式,包括电子邮件、短信、电话等,用户可以根据自己的需求选择适合自己的通知方式。这样,无论用户身处何地,都能够及时了解到网站的运行情况。
  • 自定义监控:UptimeRobot允许用户自定义监控参数,如监控频率、监控节点等。用户可以根据自己的需求设置监控策略,以便更准确地掌握网站的运行情况。
  • 全球监控节点:UptimeRobot在全球多个地区设有监控节点,能够覆盖更广泛的地区,提供更准确的监控结果。无论用户的网站位于哪个地区,UptimeRobot都能够进行有效的监控。
  • 免费版与付费版:UptimeRobot提供免费版和付费版的服务。免费版的服务允许用户同时监控最多50个网站的运行状态,每5分钟检查一次。如果用户需要监控更多的网站或需要更短的检查间隔,或者需要通过短信接收宕机通知,则需要升级到付费版。

配置成功后你可以得到像下图一样的看板。

选择status pages 可以生成一个url 链接到网站监测的状态页。注意这个url是开放的,如果你不想给其他人看到,就不要在公开页面展示这个url。

我的状态页连接就把它搁在网站页面的底部,这样就能轻松查看网站的状态啦!个人的网站运行状态这信息不算太敏感(毕竟只是个人站,又没搞商业化嘛)。要是你也有类似的站点,不妨琢磨琢磨把它放底部,起码还能让人想起来点一下!

Bing网站管理员工具(Bing Webmaster Tools)

2024年8月9日 23:40


今天介绍下Bing Webmaster Tools ,这是个非常强大的网站优化工具。主要有以下的功能:

  • 网站性能数据:提供关于网站流量、点击率和搜索词的详细报告,帮助你了解用户如何找到并使用你的网站。
  • SEO 工具:包括关键字研究、反向链接分析和 SEO 报告,帮助你优化网站内容,提高搜索引擎排名。
  • 网站扫描:按需进行网站审核,检查常见的技术 SEO 问题,并提供修复建议。
  • 移动友好性检查:确保你的网站在移动设备上表现良好。
  • URL 提交:允许你手动或通过 API 提交新内容,以便 Bing 快速抓取和索引。


注册成功后需要你进行网站所有权验证,如果你验证是网站的master,可以通过上面的功能去做网站优化,但是有一点,你没法分析流量的来源(指的是从非bing的搜索入口)。


Bing 网站管理员工具(Bing Webmaster Tools)确实提供了一些关于流量来源的信息,但它的主要功能集中在优化网站在 Bing 搜索引擎中的表现。要详细了解访问你网站的用户从哪里跳转过来,通常需要结合其他分析工具,如 Google Analytics,我这边主要是面对国内用户用的是百度统计,当然你可以同时使用多种分析报告工具。

那些我喜欢的博客

2024年7月11日 22:57

那些我喜欢的博客 - 第1张图片

千人千面,一千个读者中就有一千个哈姆雷特,独立博客圈中也是如此,每个博主都有独一无二的博客,看见圈内有人讨论那些令人讨厌或不喜欢的功能,遂心生兴趣,也来参与一番讨论。

单说“功能”或许过于片面,在我看来,一个博客能否足够吸引来访的读者,功能只是其中之一,于是今天的标题即为那些我喜欢的独立博客。

之前看王刚的探店视频,他提到过夜宵大排档和一般饭店的区别,夜宵大排档的菜味道重,多以咸、辣为主,而饭店则较为讲究,要考虑到不同地方的饮食习惯和口味,前者主要是让食客通过这种令人印象深刻的味道记住这家店,下回想吃夜宵就能第一时间想到它,而后者是为了让食客吃饱、吃好。

我喜欢夜宵大排档,约上三五好友,配上啤酒烤串,足以畅谈各种趣事,回忆曾经美好。同时,我也喜欢像夜宵大排档一样的博客,第一次访问就能给你留下深刻的印象,可能是标新立异的logo,别有寓意的名字,也可能是精彩的内容……往往这种博客,不仅能记住它长什么样,更能记住它的域名。

陈仓颉的博客,以他独具特色的 icon 让我记忆深刻,因为对其了解甚少,通过询问才得知这是注音符号,远远望去又像两人勾肩搭背,以及他的域名,imzm.im,我是最美(zm),你对他的印象自然不言而喻,确实挺美。

破袜子,正经人谁取这名?域名还是大连话破袜子的发音,但博主大致确实是正经人。记住了破袜子,还记住了大连话怎么说,另外还有他不定期更新的《每夫吐槽》,第一眼看上去是每天吐槽,但文中解释说“夫=大姨夫”,人家大姨妈才一个月来一次,大姨夫吐槽凭什么天天有,所以不是每天吐槽。

我的博客没什么特色,如果非要说一个,或许是右上角的印章,让我从一个二十多岁的小年轻,变成了别人眼里的中年男人,这可能不但是我的博客特色,更是我的审美特色。

吸引一个人,不是需要你穿得花枝招展,也不是需要你甜言蜜语,而是细节,细节上的特色。

博客上增加什么不会让人觉得多余?我觉得是一个丰富的“关于”页面。

为什么需要一个关于页面,我在之前的文章里也简单分享过,从另一个角度来说,创建一个关于页面很简单,但向别人介绍你自己却不容易,就好比面试,在有限的时间里向面试官介绍尽可能详细的自己,考验你的表达能力、思考能力、观察能力。博客上的“关于”页面又何尝不是如此,但并非越详细越好,还是上面说的,细节与特色。

有人说现在大家看长文的能力逐渐退化,越来越缺乏读完一篇文章的耐心,这其中固然有短视频的影响,但我们也要扪心自问,谁愿意阅读文章的时候弹出广告,谁愿意阅读那些”四种茴字写法“式的文章,谁愿意看到最后还需要登录账号,谁愿意看都还没看就弹出让你下载app的提醒。

吸引一个人,不是需要你穿得花枝招展,也不是需要你甜言蜜语,而是整洁、得体。

以上是我喜欢的那些博客,你不一定喜欢,也不一定非要喜欢,博客是自己的博客,喜欢是自己的喜欢,削足适履、因噎废食不可取。

那些我喜欢的博客》最先出现在印记

利用 Mac 快速操作实现图片批量转换为 AVIF 格式

2024年8月26日 23:43

继上一文介绍了我“利用 Mac 快速操作实现图片批量转换为 WebP 格式”捣腾成功后,希望通过同样的方法实现利用 Mac 快速操作实现图片批量转换为 AVIF 格式,捣腾结果分享如下。

为什么使用 AVIF 格式?

AVIF 是一种基于AV1 视频格式的现代图片格式,实现卓越的压缩效率,同时保持高图像质量。AVIF 通常比WebP、JPEG、PNG 和 GIF 具有更好的压缩效果,并且旨在取代它们。AVIF 对宽色域、高动态范围 (HDR) 和渐进式渲染的支持增强了视觉体验,预示着图像细节精美且高效交付的未来。号称 Web 开发人员和摄影师的首选。据统计,AVIF 全球使用情况为 92.95%,除 IE 浏览器、Opera Mini、QQ 浏览器、KaiOS 浏览器外都已支持,WordPress 6.5+ 已支持 AVIF 格式

利用 Mac 快速操作实现图片批量转换为 AVIF 格式-雅余

通过 AVIF 格式其开发组织“开放媒体联盟”(AOMedia),顺藤摸瓜在其 Github 账号上找到了 libavif 这个用于编码和解码 AVIF 格式的库和使用文档。

我的操作步骤如下:

一、安装 Homebrew

这部分就不重复介绍了,见“利用 Mac 快速操作实现图片批量转换为 WebP 格式”一文。

二、使用 Homebrew 命令安装 libavif 包

在终端中运行一下命令:

brew install libavif

回车直至安装完成。注意是否有出错或文件无授权的提示,按需对文件夹进行可操作授权。注意 libavif 包的安装路径,后面需要用到。

三、添加 Mac 快速操作 Workflow

1、在 Mac 上打开“自动操作”,选取“快速操作”; 利用 Mac 快速操作实现图片批量转换为 AVIF 格式-雅余

2、在工作流的顶部,它显示“工作流程收到当前”,选择“图像文件”,然后在“位于”下选择“访达.app”;

利用 Mac 快速操作实现图片批量转换为 AVIF 格式-雅余

3、接下来,在“自动操作”的左侧面板,在“资源库”下选择“实用工具”,然后将“运行 Shell 脚本”,拖放到右侧工作流程面板中;

4、对于“运行 Shell 脚本”,“Shell”选择“/bin/zsh”,“传递输入”选择“作为自变量”。

把以下代码片段粘贴到下面文本框中:

for f in "$@"
do
fname="${f%.*}.avif"
/usr/local/Cellar/libavif/1.1.1/bin/avifenc -s 10 -q 85 "$f" "${f%.*}.avif"
done

然后在“文件”菜单选择“储存”,保存文件名为“转换为 AVIF”,保存到默认地址即可。

注意:
1)libavif 的路径是为通过 Homebrew 安装的 libavif 设置的,如果您手动安装了 libavif,那么它可能在 /usr/bin 中,您需要相应地调整路径(我的最终路径是 /usr/local/Cellar/libavif/1.1.1/bin/avifenc );

2)-q 质量标志当前设置为 85,默认为 60,但您可以将其设置为 1-100 之间的任何值(越高将产生更高质量的图像,但压缩较少);-s 代表速度,默认为6;默认不删除照片 exif 信息,需删除则加上 --ignore-exif 参数。

5、选择你需要转换格式的图片,可多选,右键菜单的“快速操作”中选择“转换为 AVIF”选项,图片将在当前文件夹中自动生成 AVIF 格式文件。

利用 Mac 快速操作实现图片批量转换为 AVIF 格式-雅余

至此,教程结束。

下图为 WebP 和 AVIF 格式压缩率都设置为 85 所得到的压缩结果,结果是 WebP 的文件更小一些,有点困惑。不知道是不是我设置的压缩率太高了,libavif 官方默认值是 60。本文方法大致如上,至于多少压缩率更好,大家自己摸索吧。

利用 Mac 快速操作实现图片批量转换为 AVIF 格式-雅余

另外,我通过 AVIFQuickLook 插件,已经实现了在老苹果中直接预览 AVIF 格式。使用 Brew 进行安装,命令如下:

brew install avifquicklook

如有误,或有更好的方案,欢迎指正和交流。

利用 Mac 快速操作实现图片批量转换为 WebP 格式

2024年8月25日 20:45

周末进行网站整站备份的时候发现,整站压缩后的压缩包大小为 1G 多,有点难接受。原因是网站图片较多,主要是 JPG 格式照片,占用较多空间。网站流量不大,服务器流量压力方面倒是不担心,但是会对未来网站可能出现的整体迁移、备份造成了压力。虽然去年改版已经对 WordPress 缩略图生成做了限制,只生成必须的三个尺寸,但网站体积还是在快速的增长。

为此,我打算整站改用 WebP 格式图片,在本地处理好图片之后再进行上传。因为使用 WordPress 的插件普遍会保留原文件,另外再生成一批 WebP 格式的文件,反而增加了存储空间。至于 WordPress 媒体库中历史的图片如何替换为 WebP 格式,另行研究。

为什么使用 WebP 格式?

WebP 是谷歌在 2010 年提出的一种新型的图片格式,其优势在于 WebP 格式的图片可以比 JPEG 格式的图片小 26%-34%比 PNG 格式的图片小 25%-34 %拥有更快的加载速度,可以保持比 JPEG 格式更好的图像质量,还支持透明度和动画效果。据统计,WebP 全球使用情况为 96.35%,除 IE 浏览器外都已支持。WordPress 5.8+ 增加了对 WebP 格式的全面支持

利用 Mac 快速操作实现图片批量转换为 WebP 格式-雅余

也有更新更先进的 AVIF 格式WordPress 6.5+ 支持 AVIF 格式),压缩率更高,但浏览器支持度目前略差一些,我的老苹果电脑无法直接预览,所以先忽略,以后再考虑。

Windows 下有不少免费的 WebP 格式批量转换工具,Mac 下比较少。转换 WebP 格式的在线应用也是有的,但上传下载太耗时。可喜的是,Mac 可以通过命令行工具,配合自动操作功能也可以实现批量转换。

我的操作步骤如下:

一、安装 Homebrew

前提条件,需要在运行 MacOS 至少为 10.14(Mojave) 或更高版本的 Mac 上安装 Homebrew。如果您尚未安装 Homebrew,请先安装。

什么是 HomeBrew?

HomeBrew 是一个免费且开源的包管理器,它简化了 MacOS 用户安装软件的过程。无论是命令行工具、语言运行时还是应用程序,HomeBrew 都能帮助你轻松管理。它的口号是“The missing package manager for macOS”,意即它弥补了 MacOS 缺失的包管理功能。

安装 HomeBrew 非常简单,执行一行脚本即可。为了提升安装速度,建议更改 Homebrew 的安装源,将其替换成国内镜像

方法1、Homebrew 官方脚本:(速度欠佳,会出现超时)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

方法2、中科大镜像 Homebrew 镜像服务脚本:

/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"

注:最后出现 Installation successful! 或者 Checking out files: 100% (5392/5392), done. 说明安装成功。

必须配置:

更改安装源,替换为国内镜像:

1)替换 brew.git:

git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git

2)替换 homebrew-core.git:

git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

方法3、 Gitee 国内镜像服务脚本:(推荐!!)

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装过程中按 brew 官方脚本执行,提示安装成功后会让选择国内哪个镜像源:
1)中科大国内源
2)清华大学国内源
3)上海交通大学国内源
4)腾讯国内源
5)阿里巴巴国内源(推荐)

提示配置成功,但还需要重启终端 或者 运行命令 source /Users/用户名/.bash_profile,否则国内地址无法生效。

二、使用 Homebrew 命令安装 WebP 包

在终端中运行一下命令:

brew install webp

回车直至安装完成。注意是否有出错或文件无授权的提示,按需对文件夹进行可操作授权。注意 WebP 包的安装路径,后面需要用到。

三、添加 Mac 快速操作 Workflow

1、在 Mac 上打开“自动操作”,选取“快速操作”; 利用 Mac 快速操作实现图片批量转换为 WebP 格式-雅余

2、在工作流的顶部,它显示“工作流程收到当前”,选择“图像文件”,然后在“位于”下选择“访达.app”;

利用 Mac 快速操作实现图片批量转换为 WebP 格式-雅余

3、接下来,在“自动操作”的左侧面板,在“资源库”下选择“实用工具”,然后将“运行 Shell 脚本”,拖放到右侧工作流程面板中;

4、对于“运行 Shell 脚本”,“Shell”选择“/bin/zsh”,“传递输入”选择“作为自变量”。

把以下代码片段粘贴到下面文本框中:

for f in "$@"
do
fname="${f%.*}.avif"
/usr/local/Cellar/webp/1.4.0/bin/cwebp -q 85 -m 6 -metadata all -mt "$f" -o "${f%.*}.avif"
done

然后在“文件”菜单选择“储存”,保存文件名为“转换为 WebP”,保存到默认地址即可。

注意:
1)cwebp 的路径是为通过 Homebrew 安装的 cwebp 设置的,如果您手动安装了 cwebp,那么它可能在 /usr/bin 中,您需要相应地调整路径(我选择方法3的脚本,最终路径是 /opt/homebrew/Cellar/webp/1.4.0/bin );

2)-q 质量标志当前设置为 85,但您可以将其设置为 1-100 之间的任何值(越高将产生更高质量的图像,但压缩较少);-metadata all 为保留所有图片信息,可选值还有 all, none, exif, icc, xmp。

5、选择你需要转换格式的图片,可多选,右键菜单的“快速操作”中选择“转换为 WebP”选项,图片将在当前文件夹中自动生成 WebP 格式文件。

利用 Mac 快速操作实现图片批量转换为 WebP 格式-雅余

至此,教程结束,可以看看我上一篇文章中图片的转换效果,压缩后图片体积减少了 2-3 倍,效果喜人。本文所有图片均使用 WebP 格式。

利用 Mac 快速操作实现图片批量转换为 WebP 格式-雅余

如有误,或有更好的方案,欢迎指正和交流。

Typecho 纯文本极简主题 Text Only v1.0.0 发布

2024年7月26日 23:58

应朋友们要求,制作了 Typecho 版本的 Text Only 主题,和 WordPress 版本样式上基本保持一致。使用愉快~

主题介绍如下:

Text Only 为纯文本极简主题,黑白配色,对程序极简优化,主题无 JS 和图片文件载入。

主题支持自定义背景、自定义菜单,保留搜索及评论功能;内置文章归档和搜索模板;已作中文字体优化,内置3种字体方案可选。

主题类型:极简 / 博客 / 纯文本 / 单栏 / 自适应 / 免费

提供 WordPress 版本Typecho 版本

主题免费开源,供学习交流,不提供售后支持。如有建议,欢迎评论留言,不喜勿喷。

主题可按授权方式继续随意改造,但望保留我的信息。感谢!

Typecho 纯文本极简主题 Text Only v1.0.0 发布-雅余

Typecho 纯文本极简主题 Text Only v1.0.0 发布-雅余

Typecho 纯文本极简主题 Text Only v1.0.0 发布-雅余

Typecho 纯文本极简主题 Text Only v1.0.0 发布-雅余

Typecho 纯文本极简主题 Text Only v1.0.0 发布-雅余

详细介绍和使用见主题两个版本的发布页面。

WordPress 纯文本极简主题:Text Only
Typecho 纯文本极简主题:Text Only

欢迎提供建议,以便继续完善。

WordPress & Typecho 极简主题 Writing v1.1.0

2024年7月21日 15:10

上个月收到 Github 上面一条 Issue,借周末时间对主题小改动了一下。毕竟不是全职运维,拖拖拉拉一个月才改。

主要更新内容:

- 增加独立“搜索模板”
- CSS 样式移至 style.css 文件
- 部分样式完善

新版本请从主题发布页面获取 Github 链接:

WordPress 版本Typecho 版本

-

小插曲:太不专业了,commit 的时候手一抖,把另外一个主题的文件给替换了,哈哈。

WordPress 纯文本极简主题 Text Only v1.0.0 发布

2024年7月8日 23:18

手痒,又发一款极简主题。这是一款初始化主题,仅提供最基础的页面展示,简洁的样式,简洁的代码,方便后期加工。提供两个页面模板,归档模板和独立搜索页面。较以前主题,对评论区进行了适当的美化。

主题介绍如下:

Text Only 为纯文本极简主题,黑白配色,对程序极简优化,主题无 JS 和图片文件载入。

主题支持自定义背景、自定义菜单,保留搜索及评论功能;内置文章归档和搜索模板;已作中文字体优化,内置3种字体方案可选。力求极简,对程序自带功能进行禁用,若对使用有影响,按需删除即可。

主题类型:极简 / 博客 / 纯文本 / 单栏 / 自适应 / 免费

目前仅提供 WordPress 版本。

主题免费开源,供学习交流,不提供售后支持。既然供学习交流,故也欢迎和我交流。如有建议,欢迎评论留言,不喜勿喷。

主题可按授权方式继续随意改造,但望保留我的信息。感谢!

WordPress 纯文本极简主题 Text Only v1.0.0 发布-雅余

WordPress 纯文本极简主题 Text Only v1.0.0 发布-雅余

WordPress 纯文本极简主题 Text Only v1.0.0 发布-雅余

WordPress 纯文本极简主题 Text Only v1.0.0 发布-雅余

WordPress 纯文本极简主题 Text Only v1.0.0 发布-雅余

详细介绍和使用见主题的发布页面。

WordPress 纯文本极简主题:Text Only

欢迎提供建议,以便继续完善。

借助 Memos 为 WordPress 博客添加「说说」功能

2023年7月28日 15:53

在博客我会和网友们分享一切,但并非所有内容都适合以文章的形式展示,更多时候是自己内心里的一两句碎语、吐槽或是逼逼赖赖,我一直期盼能为博客添加一个「说说」功能。在这篇文章中记录一下 Docker 部署 Memos,并将 Memos 整合进 Wordpress 博客页面的过程。

借助 Memos 为 WordPress 博客添加「说说」功能最先出现在Jack‘s Space

❌
❌