普通视图

CloudCone和飞牛都暴雷了!

2026年2月3日 14:04

CloudCone和飞牛都暴雷了! - 第1张图片

这段时间网络上最火除了OpenClaw外,就应该是CC和飞牛的“暴雷”事件了。这已经不是新闻了!

CloudCone,简称CC,虽然是阿三开的,但是在国内有大量的用户,也能算得上是一个“大厂”了。我在《我在使用的VPS:CloudCone(简称:CC)》里也提到,我的博客使用了CC有三四年之久。好在《老张博客搬家至酷鸭数据香港VPS》,这次暴雷老张博客才没有受到影响 ,但是我的几个Docker服务还都在CC上。昨天晚上看到的通知,VPS可以重建了,但是所以数据全丢了。数据丢了这么严重的事件上,阿三却是一句话带过,好像这次暴雷和他没有关系一样!

1月22号开始,就有不少飞牛用户反映自己的网络卡顿、网络连接数上万,上传下截数据猛增。但是官对开始对这件事好像不是太重视,只是提到出现这种情况是把飞牛放在公网且用了http协议导致的。直到最后事态严重了,才承认自己代码有疏漏,才做了紧急的版本更新和专项的查杀脚本。因为我的飞牛是及时更新,也没有出现网络连接数上万、下传下载等异常情况,以为没有中招。昨天下午官方发布查杀脚本 ,我便跑了一下,NND,也中招了。也不知道自己的数据有没有被外流!

从这两件暴雷事情,来聊一聊!

服务商都是一个尿性

虽然免费使用飞牛,不应该这样说,但是飞牛官方在最初处理这件事情上是不到位了。不管是飞牛还是CC或是其他,遇到这样的情况时,好像都会去极力掩饰自己的问题,这么做估计是想保住自己的口碑,但是为什么不能直面问题去解决了。其实早在几个月前,就有人提出过飞牛的漏洞,但是官方并没有去解决!想一想,大厂都是这样,就更不要说小厂或是野鸡商家了。如果CC的事情发生在小厂上,估计会跑路!所以,以后就不要说什么大厂小厂了!

安全意识淡薄

我的爱快、OP、飞牛、黑群晖,都是直接用动态域名解析放在公网上的,而且密码全都是一样的,更为可怕的都是弱口令密码。这次事情之后,已把端口映射停掉了,目前正在寻求一个安全的方案。不知道你是不是这样!以后一定得要谨记教训了!千万不能让自己的设备在网络上“裸奔”了!随着飞牛暴雷事件,很多人都提到了Lucky,这几天得要好好研究研究,好给我的飞牛加装几把安全锁!

数据备份的重要性!

不管是大厂还是小厂,一定得要记住对数据进行备份!一定要备份!一定要备份!一定要备份!重要的情况说三遍!我的博客以及Docker服务都是三方备份,除备份到服务器本地外,同时还备份到了阿云OSS和OneDrive网盘。CC这次暴雷,虽然数据有备份,但是服务器重装、网站环境配置等等,又得要折腾好几天了!这都第四天了,我的两台CC还不能重装!NND,也不知道什么时候可以恢复。

 

视频水尺太难搞!L2TP 异地组网助我远程调试渡口摄像头

2026年2月1日 21:27

前段时间,我在某市县实施当地的平安渡运项目智能化部分施工,主要负责水文气象设备前端的安装与调试,我们团队一行几人,我作为总体技术负责人,具体工作涵盖点位勘察、设备选型、线路与供电规划、现场实施协调以及与甲方、总包的技术沟通等。这项目拉拉扯扯搞了很多年,最近终于是落地了!

该项目面向县域内主要河段沿岸的码头和渡口,建设水文及气象监测系统,将实时数据统一上报至中心平台,供相关管理单位查看和研判,作为平安渡运和是否允许通航的重要决策依据,例如水位、降雨量或风力达到设定阈值时,当地渡船(俗称过河船)即需停航。

项目所在河段枯水期与丰水期水位差极大,历史上个别年份甚至出现过二十多米的水位落差,沿河不少房屋和设施都曾被淹没,我们沿线踏勘时也能明显看到这些痕迹,所幸近些年得益于水利工程建设和系统治理,整体情况已明显改善。该县举例我的家乡并不远,但我的老家是没有这么大的河,我也几乎么有乘坐过渡船,因而每到一处见到爬坡上坎又过河的场景时,我便会感叹:这偌大的中国啊,这形形色色的故乡啊!

因为设备的安装点位大多分布在乡镇和偏远村落,通常需要从县道转入乡道,再进入村村通道路,路况好的十来分钟可达,路况差的连小型面包车都难以通行,最折腾的一个点位先是要走几公里布满坑洼的烂路,随后还需乘坐十多分钟快艇才能到达,单程交通耗时接近两个小时。

[ 阅读全文 ]

原文链接: https://www.shephe.com/post/video-water-gauge-l2tp-remote-debug/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

已解毒!HHKB键盘!

2026年1月28日 22:04

已解毒!HHKB键盘! - 第1张图片

2024年1月份《还是买了GPD win max2》,其实那是台“游戏机”,但是到目前为止也就玩过一次游戏。平常在单位没办法玩,而在家更不能玩,怕孩子看到。所以这台GPD便当成了随身携带的小巧的笔记本使用了。GPD本身就小导致键盘也小,而手感也不是太好,特别是《入坑客制化键盘80Retros GB65(GAME 1989)》机械键盘后,导致我根本不想去按GPD的键盘,这让我更是加重了我购买一台小巧的便于携带的键盘来配合GPD使用了。

大概在两三周前,在V2论坛上看到有人提到HHKB键盘,便找度娘了解了,特别是很多键盘狂人给它定义为“键盘爱好者的最后一块退烧键盘!”,更加勾起了我对HHKB键盘的好奇心!HHKB双模静音款某宝的官方店售价在两千三左右,而海淘店的售价大约是一千九左右。价格这么高,当然舍不得买新的,在海鲜上守了一个多星期,买了一台二手货。这台原主是2024年11月份京东官方店买的,送了防尘罩和手托,最后1450拿下。因为蹲海鲜也一周多,看了很多二手的HHKB的价格,我这台1450拿的,价格应该中规中举。

上周五下午三点收到的货,拆开后折腾了半天终于连接上电脑,急不可待的试了手感!HHKB静电容键盘的手感,真的不如机械键盘,和我的299的京造JZ990还是有一定的差距的,更不如我的80Retros的手感了!另外就是HHKB的键位布局,真的适应不了!周五下午用了半天,星期天下午用了半天,周一晚上装箱上柜!HHKB键盘虽好,但是不适合我!

好像我就有这个“病”,虚荣心在作怪,买东西老是想买贵的,不考虑对的!这次又重重的打脸了!不过也不能完全怪,毕竟购买之前没有试用过HHKB的键盘,如果能有在实体店试了HHKB键盘的手感的话,你打死我八顿我也不会买HHKB键盘的。

我把这台键盘又重新上架了海鲜,到目前挂了两天了,浏览量还不到一百,没有一个询价的!看来HHKB键盘还是比较小众的!可千万不能砸手上呀!呵呵!(就在刚刚,1450顺丰包邮给出了,贴了邮费,等于用邮费体验了HHKB键盘一天时间2026.1.29)

说到最后,还是想买一台小巧的键盘来配合GPD来使用!

两款moviepilot-v2插件,实现115网盘strm302播放

2026年1月5日 10:58

两款moviepilot-v2插件,实现115网盘strm302播放 - 第1张图片

去年11月初的时候,配置了真正意义上的第一台NAS,《DIY人生第一台NAS-硬件篇》。虽然当时花了七千多块,很多人都认为是大冤种,但是这才过两个月,硬件又涨了一千多上去,看了一些新报报道,内存、固态等今年还会持续上涨。本来想把这台NAS转成台式机再配置一个低配的NAS用的,还是算了吧!

这台NAS本是不准备搞影视库的,但是老婆这段时间天天追剧、几个视频平台的年度会员也都连续买了几年,所以也就想着干脆买了115会员,自己来折腾算了。先在论坛上收了一个原石会员,不到30T的空间几十块钱,然后再充值8年会员再送永久40T空间,基本上够用了。

拿网盘来做影视库,最需要解决的就是“网盘直链播放”,也就是大家正常说的302重定向播放。简单的理解就是播放网盘视频时,流量不经过你的NAS或服务器,即使是你家宽带上行很低或是你的服务器VPS在国外,都可以流畅的播放网盘视频。所以,有些没有NAS的朋友,用国外便宜的VPS也可以搭建网盘影视库。飞牛fnos是原生的支持网盘直链播放的,但是经过测试,飞牛影视刮削准确率不高,同一网盘我在单位和在家分别进行了测试,刮削出的影视总量相差近千,所以,不得不再折腾起来。

实现115网盘302播放的,目前主流有moviepilot-v2、CloudMediaSynC(cms)和symedia,后面两者都是那收费版的,今天我们先折腾moviepilot-v2。moviepilot-v2部署好之后,只需要通过115网盘STRM助手、mediawarp这两款插件,就可以实现115网盘strm302播放了。

部署moviepilot-v2

version: '3'

services:
  moviepilot-v2:
    image: jxxghp/moviepilot-v2:latest
    container_name: moviepilot-v2
    stdin_open: true
    tty: true
    hostname: moviepilot-v2
    network_mode: bridge
	
    ports:
      - "4000:3000"
      - "9000:9000"
    volumes:
      - /vol1/1000/Docker/moviepilot/media:/media
      - /vol1/1000/Docker/moviepilot/config:/config
      - /vol1/1000/Docker/moviepilot/core:/moviepilot/.cache/ms-playwright
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      NGINX_PORT: "3000"
      PORT: "3001"
      PUID: "0"
      PGID: "0"
      UMASK: "000"
      TZ: "Asia/Shanghai"
      SUPERUSER: "admin"
      SUPERUSER_PASSWORD: "你的用户名和密码"
	restart:wlways  
	  

部署emby

version: '3'

services:
  emby:
    image: amilys/embyserver:latest
    container_name: emby
    restart: unless-stopped
    ports:
      - "8096:8096"
      - "8920:8920"
      - "65039:7359/udp"
      - "65040:1900/udp"
    volumes:
      - /vol1/1000/Docker/emby/config:/config
	  - /vol1/1000/Docker/emby/data:/data
      - /vol1/1000/Docker/moviepilot/media:/video
    environment:
      PUID: "0"
      PGID: "0"
      GIDLIST: "0"
      TZ: "Asia/Shanghai"
      EMBY_PublishedServerUrl: "xxx.xxx.xxx.xxx"
    privileged: true	

安装这个amilys/embyserver版本,能让你很开心!你懂的!

安装115网盘STRM助手、mediawarp插件

在moviepilot-v2插件中心中,搜索安装即可。

必要配置

moviepilot-v2设定,系统设置最下清加媒体服务器。(IP地址自定)

两款moviepilot-v2插件,实现115网盘strm302播放 - 第2张图片

moviepilot-v2的API令牌刷新,这点必须注意,是一个坑,否则生成的strm文件缺少api代码,不可用!我就掉在这个坑里折腾了几个小时。

moviepilot-v2-设定-系统-API令牌-刷新即可。

115网盘strm助手配置

两款moviepilot-v2插件,实现115网盘strm302播放 - 第3张图片

mediawarp配置

两款moviepilot-v2插件,实现115网盘strm302播放 - 第4张图片

emby添加媒体库

这个就不赘述了!

写在最后

moviepilot-v2主要功能是PT玩家的影视“一条龙”服务,我们只是使用了他的两款插件。

不要太“迷信”AI,我在部署moviepilot-v2的时候,AI直接把network_mode: bridge这行给去掉了,说是Docker默认就是bridge。结果emby302端口界面老是打不开,又是折腾了几个小时。即使在中途把docker停掉修改配置也不行。最后重新部署才成功。

这篇教程说的比较粗略,只是列出了基本的核心操作,也可以参考网上其他教程进行。

 

typecho插件-MemosSync,Memos 同步插件

2025年12月22日 21:50

typecho插件-MemosSync,Memos 同步插件 - 第1张图片

这款插件是我找deepseek写的,主要功能是把typecho发布的内容自动同步到Memos上。应该是绝大部分博主都用不上,各取所需吧!也是想说,AI成熟了,我们每位都是程序员,都可以让AI写出自己想要的功能的代码!

一直以来,除老张博客外,还有一个后花园,老张随笔。老张随笔就是每天记一些点滴,发一点牢骚!字数都是在一两百字,到目前为止,也记录了近一千五百篇日志了。老张随笔最初选用的是较轻量的Typecho程序,后来Memos在博客圈流行的时候,老张随笔便换成了Memos程序,这样能更好的和五木大佬开发的哔哔广场融合。Typecho数据导入到Memos数据库中也非常的简单,这篇《简单几步,Typecho博客文章轻松导入到Memos》教程,便可以教大家很方便的把Typecho的文章导入到Memos中。Memos也使用了两三年吧,但是由于作者的任性更新,版本一直还停留在0.18.1上。加之大家对Memos热度的减少,现在玩Memos的人很少了,原来五木大佬的哔哔广场,每天都好几十条哔文,现在基本上很少有人发了。种种原因,老张随笔又换回了Typecho程序,但是老张又舍不得Memos,所以在Typecho上发布一篇文章后,便手动复制到Memos上,也算是做为备份吧!每天手动甚是麻烦,便有了这款Typecho插件-MemosSync,Memos同步插件。

typecho插件-MemosSync,Memos 同步插件 - 第2张图片

插件功能特点:

  • ✅ 文章发布时自动同步到Memos

  • ✅ 支持将文章分类作为Memos标签

  • ✅ 可配置可见性(公开/受保护/私有)

  • ✅ 完整的错误处理,不影响文章发布

  • ✅ 后台配置界面

安装和使用说明

1.安装插件

将下面的文件上传到 /usr/plugins/MemosSync/ 目录

在Typecho后台启用插件

2.配置插件:

进入插件设置页面

填写Memos地址(例如:https://memos.example.com)

输入Access Token(在Memos设置中生成)

选择可见性设置

启用同步功能

3.获取Access Token:

登录您的Memos实例

进入设置 → 权限 → Access Tokens

生成新的Token并复制到插件设置中

注意事项

  1. 确保您的Typecho服务器可以访问Memos实例

  2. 如果同步失败,会在Typecho日志中记录错误信息

  3. 标签会自动过滤特殊字符,只保留字母、数字、中文和下划线

插件结构

/usr/plugins/MemosSync/

├── Plugin.php ├── config.xml └── form.php

1. config.xml

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<name>MemosSync</name>
<description>将Typecho文章同步到Memos</description>
<author>Your Name</author>
<version>1.0.0</version>
<module>MemosSync</module>
</plugin>

2. form.php

<?php if(!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
<h2>Memos 同步设置</h2>

<div class="typecho-page-title">
    <h2>Memos 配置</h2>
</div>

<div class="typecho-option">
    <label class="typecho-label" for="memos_url">Memos 地址</label>
    <input type="text" class="text" name="memos_url" id="memos_url" value="<?php $this->options->memos_url(); ?>" />
    <p class="description">请输入完整的Memos地址,例如:https://memos.example.com</p>
</div>

<div class="typecho-option">
    <label class="typecho-label" for="memos_token">Access Token</label>
    <input type="text" class="text" name="memos_token" id="memos_token" value="<?php $this->options->memos_token(); ?>" />
    <p class="description">在Memos设置中生成的Access Token</p>
</div>

<div class="typecho-option">
    <label class="typecho-label" for="memos_visibility">可见性</label>
    <select name="memos_visibility" id="memos_visibility">
        <option value="PUBLIC" <?php if($this->options->memos_visibility == 'PUBLIC') echo 'selected'; ?>>公开</option>
        <option value="PROTECTED" <?php if($this->options->memos_visibility == 'PROTECTED') echo 'selected'; ?>>受保护</option>
        <option value="PRIVATE" <?php if($this->options->memos_visibility == 'PRIVATE') echo 'selected'; ?>>私有</option>
    </select>
    <p class="description">选择同步到Memos的可见性设置</p>
</div>

<div class="typecho-option">
    <label class="typecho-label">
        <input type="checkbox" name="memos_enable_sync" value="1" <?php if($this->options->memos_enable_sync == '1') echo 'checked'; ?> />
        启用同步功能
    </label>
    <p class="description">启用后,发布文章时会自动同步到Memos</p>
</div>

<div class="typecho-option">
    <label class="typecho-label">
        <input type="checkbox" name="memos_include_tags" value="1" <?php if($this->options->memos_include_tags == '1') echo 'checked'; ?> />
        包含分类作为标签
    </label>
    <p class="description">将文章分类作为Memos的标签</p>
</div>

3. Plugin.php

<?php
/**
 * MemosSync - Typecho文章同步到Memos插件
 * 
 * @package MemosSync
 * @author Your Name
 * @version 1.0.0
 * @link https://yourblog.com
 */
class MemosSync_Plugin implements Typecho_Plugin_Interface
{
    /**
     * 激活插件
     */
    public static function activate()
    {
        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('MemosSync_Plugin', 'syncToMemos');
        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishSave = array('MemosSync_Plugin', 'syncToMemos');
        
        return _t('插件已激活,请配置Memos设置');
    }

 /**
     * 禁用插件
     */
    public static function deactivate()
    {
        return _t('插件已禁用');
    }

    /**
     * 插件配置面板
     */
    public static function config(Typecho_Widget_Helper_Form $form)
    {
        require_once 'form.php';
    }

    /**
     * 个人用户的配置面板
     */
    public static function personalConfig(Typecho_Widget_Helper_Form $form) {}

/**
     * 同步到Memos
     */
    public static function syncToMemos($contents, $post)
    {
        // 获取插件配置
        $options = Typecho_Widget::widget('Widget_Options');
        $memosUrl = $options->plugin('MemosSync')->memos_url;
        $memosToken = $options->plugin('MemosSync')->memos_token;
        $memosVisibility = $options->plugin('MemosSync')->memos_visibility;
        $enableSync = $options->plugin('MemosSync')->memos_enable_sync;
        $includeTags = $options->plugin('MemosSync')->memos_include_tags;
        
        // 检查是否启用同步
        if (!$enableSync) {
            return;
        }
        
        // 验证必要配置
        if (empty($memosUrl) || empty($memosToken)) {
            return;
        }
        
        try {
            // 准备请求数据
            $apiUrl = rtrim($memosUrl, '/') . '/api/v1/memos';
            
            $content = $contents['text'];
            
            // 如果启用了标签功能,获取分类作为标签
            $tags = array();
            if ($includeTags && isset($contents['category'])) {
                $category = $contents['category'];
                if (is_array($category)) {
                    $tags = $category;
                } else {
                    $tags = array($category);
                }
            }
            
            // 构建内容,包含标签
            $memoContent = $content;
            if (!empty($tags)) {
                $tagString = '';
                foreach ($tags as $tag) {
                    $tagString .= ' #' . self::formatTag($tag);
                }
                $memoContent .= "\n\n" . $tagString;
            }

// 准备请求数据
           $postData = array(
                'content' => $memoContent,
                'visibility' => $memosVisibility
            );
            
            // 发送请求到Memos
            $http = Typecho_Http_Client::get();
            if ($http) {
                $http->setHeader('Authorization', 'Bearer ' . $memosToken)
                     ->setHeader('Content-Type', 'application/json')
                     ->setData(json_encode($postData))
                     ->setTimeout(30)
                     ->send($apiUrl);
                
                $response = $http->getResponseBody();
                $status = $http->getResponseStatus();
                
                if ($status != 200) {
                    throw new Exception('Memos API 返回错误: ' . $status . ' - ' . $response);
                }
            }
            
        } catch (Exception $e) {
            // 记录错误日志,但不影响文章发布
            Typecho_Log::write('MemosSync Error: ' . $e->getMessage(), Typecho_Log::WARN);
        }
    }
    
    /**
     * 格式化标签
     */
    private static function formatTag($tag)
    {
        // 移除特殊字符,只保留字母、数字、中文、下划线
        $tag = preg_replace('/[^\p{L}\p{N}_]/u', '', $tag);
        return $tag;
    }
}

typecho博客从宝塔面板搬到1panel面板踩的那些坑

2025年12月9日 10:57

typecho博客从宝塔面板搬到1panel面板踩的那些坑 - 第1张图片

老张博客搬家至酷鸭数据香港VPS》时,还算是比较顺利。想着既然老张博客已经搬到了酷鸭数据,那也把我的后花园“老张随笔”也搬过来吧,说干就干。

以前用的CC家服务器,安装的是宝塔面板,手里一直还有一个1panel的永久授权版,所以这次酷鸭数据的香港VPS我使用的是1panel。如果两台服务器都是宝塔,那搬家真的是分分钟的事,直接用应该商店里的“网站迁移”就行,而现在,只能通过备份网站文件、数据库文件后再上传到新服务器的方式来进行搬家了。

网站运行环境不一致

这块还比较顺利,因为两台服务器我都使用了相同版本的MYSQL、PHP等。另外需要特别注意的就是PHP的扩展、禁用函数也必须要保持一致。

链接不上数据库

这个问题非常好解决,宝塔面板链接数据库MYSQL默认的是localhost,而1panel面板连接MYSQL地址是MYSQL的容器的名称,这点必须要修改。

登录后台遇500,Unmatched '}'报错

这个是我折腾最久的一个坑,当把老张随笔搬过来后,登录后台发现出现500报错,提示为Unmatched '}'。这个坑一直折腾了几个小时。其实在这里,我也是犯了一个非常简单的错误,就是搬家之前没有关闭所有插件。所以建议像这样的搬家,最好在搬家之前把所有的插件停掉、主题换成默认的,搬家后再一个一个启用插件,以便可以更好的测试到错误。

把所有的插件和主题停用后,后台可以正常进入,这个时候再一个一个启用插件,当排查到LoveKKCommentModify这个插件,只要启用就会提示Unmatched '}'。因为对1panel不熟悉,找到AI解决了问题。修改了LoveKKCommentModify的Plugin.php文件第343行:将 <? 改为 <?php、第589行:将 <? 改为 <?php。

其实导致这个问题的最终原因是LoveKKCommentModify插件使用了PHP短标签,宝塔面板默认是开启的,而1panel默认是关闭的。只需要到1panel的运行环境中,把PHP短标签开启即可。根本就不需要修改什么代码。

开启伪静态,登录不了后台

登录1panel后台,为typecho网站设置未静态,代码是默认的,但是出问题了。登录后台出现404错误,并提示:“找不到以下 Web 地址的网页: https://zhangbo.net/index.php/action/login?_=5ca13260eXXXXXXX53adXXXXc92a HTTP ERROR 404。

deepseek分析原因为Typecho的路径处理与当前伪静态规则不匹配。我也就想不通了,为什么官方的默认的代码就不匹配了。最后解决方法添加break指令修正规则

if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
break;
}

搬了一个家,遇到很多坑,折腾N天!要是若干年前还没有AI的时候,估计请教N位大佬也不一定能把问题解决。现在好了,AI普及,遇到问题都可以自己解决,有了AI,人人都是程序员了!!

酷鸭数据2026盼新活动来了!8核16G高性能配置,香港Colo数据中心,399续费同价

2025年12月6日 14:52

酷鸭数据2026盼新活动来了!8核16G高性能配置,香港Colo数据中心,399续费同价 - 第1张图片

老张博客搬家至酷鸭数据香港VPS》,目前使用已有一段时间了,感觉还是不错的。所以这里推一推自己的AFF。我的推广链接:https://www.kooya.hk/recommend/3gwffST4RbTO

目前酷鸭数据推出2026年盼新活动,8核16G高性能配置,香港Colo数据中心,399续费同价。目前老张博客也是放在这台母鸡上。当我看到这款配置的时候,我和酷鸭交流过,首先问这样高的配置是不是超售,得到答案是绝不会超开。其实像我们这样的博主,根本用不了这样高的配置,我想着能不能把配置降一降比如降到4核4G,带宽从5M往上提一提,这样价格还可以更低。得到的答案是年底了需要向总公司提交年度报告,如果总公司发现容量空那么多就觉得没必要给那么多配置容量给这边市场。所以原来活动配置是8核8G,索性就多送了8G内存。带宽太贵,只能给到5M,对于博客来说,5M的带宽也是足够使用的了。

若有想购买的,用我的推广链接注册呀!首页会弹出活动配置链接。还是那句话,不管是大厂还是小厂,记得天天备份数据哟!

酷鸭数据2026盼新活动来了!8核16G高性能配置,香港Colo数据中心,399续费同价 - 第2张图片

Basic System Information:
---------------------------------
Uptime     : 0 days, 0 hours, 21 minutes
Processor  : Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz
CPU cores  : 8 @ 2299.984 MHz
AES-NI     : ✔ Enabled
VM-x/AMD-V : ✔ Enabled
RAM        : 15.4 GiB
Swap       : 0.0 KiB
Disk       : 130.0 GiB
Distro     : Debian GNU/Linux 12 (bookworm)
Kernel     : 4.18.0-358.el8.x86_64
VM Type    : KVM
IPv4/IPv6  : ✔ Online / ❌ Offline

IPv4 Network Information:
---------------------------------
ISP        : Cogent Communications
ASN        : AS401696 cognetcloud INC
Host       : FOJ IP TECHNOLOGY LIMITED
Location   : Mong Kok, Yau Tsim Mong District (KYT)
Country    : Hong Kong

fio Disk Speed Tests (Mixed R/W 50/50) (Partition -):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 227.97 MB/s  (56.9k) | 1.44 GB/s    (22.5k)
Write      | 228.57 MB/s  (57.1k) | 1.44 GB/s    (22.6k)
Total      | 456.54 MB/s (114.1k) | 2.88 GB/s    (45.1k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 1.56 GB/s     (3.0k) | 1.61 GB/s     (1.5k)
Write      | 1.64 GB/s     (3.2k) | 1.71 GB/s     (1.6k)
Total      | 3.20 GB/s     (6.2k) | 3.32 GB/s     (3.2k)

Geekbench 5 Benchmark Test:
---------------------------------
Test            | Value                         
                |                               
Single Core     | 739                           
Multi Core      | 4879                          
Full Test       | https://browser.geekbench.com/v5/cpu/23949468

 SysBench CPU 测试 (Fast Mode, 1-Pass @ 5sec)
---------------------------------
 1 线程测试(单核)得分:          884 Scores
 8 线程测试(多核)得分:          6533 Scores
 SysBench 内存测试 (Fast Mode, 1-Pass @ 5sec)
---------------------------------
 单线程读测试:          18155.68 MB/s
 单线程写测试:          14202.38 MB/s

酷鸭数据2026盼新活动来了!8核16G高性能配置,香港Colo数据中心,399续费同价 - 第3张图片
酷鸭数据2026盼新活动来了!8核16G高性能配置,香港Colo数据中心,399续费同价 - 第4张图片
酷鸭数据2026盼新活动来了!8核16G高性能配置,香港Colo数据中心,399续费同价 - 第5张图片

DIY人生第一台NAS-软件篇

2025年12月1日 22:16

DIY人生第一台NAS-软件篇 - 第1张图片

 

DIY人生第一台NAS-硬件篇》已经有十几天了,这段时间由于工作上的事情比较多也就没有怎么样去折腾,只是把手机里、台式机、笔记本、移动硬盘等零零散散的照片收集起来并上传到了NAS,本来想的跑N个服务的到目前为止还一个也没有安装。这个时候就会想到组的这台NAS真的是性能过剩了,提到性能过剩,就来聊聊硬件安装好后,对于软件的考虑。

NAS系统的选择

硬件组建好之后,对于系统我也有考虑。NAS必须要求稳,不能今天安装这个系统、明天再安装个那个系统,只要能稳定运行就行。所以首当选择的就是飞牛fnos,虽然之前一直玩的是黑群晖。在J4125小主机群里有几位大佬交流之后,他们说像这样性能的NAS,不搞个all in one的话,性能都不能发挥出来。他们的建议就是“算存分离”,也就是虚拟出黑群晖来存放数据,而各种应用使用飞牛,飞牛和黑群晖之间通过虚拟交换机的万兆网卡用SMB达到秒传输数据。直接点说,他们看好飞牛系统里的各项应用,但是并不看好飞牛存储数据的安全性,那也就是“即想,又要”的关系了。之前折腾J4125的时候一直用ESXI做底层,但是我的这台NAS网卡却是螃蟹卡,在海鲜上买了半高的I350T4,可是安装好之后,挡了CPU的排风,加之我也不是太想搞“算存分离”,就放弃吧。简单点,直接飞牛fnos走起。其实那时也想着搞Unraid,虽然之前在张大妈上看过阿文菌的教程,但是我想折腾起来的话又得要N久,算了吧。

硬盘陈列方案的选择

在组这台NAS前,手时就存有两块4T西数的红盘和一块4t的旧的监控盘。因为那块监控盘在我手里都运行了两种多,之前从监控上淘汰下来的时候也运行有三四年,一共是运行了五万多小时,所以准备重新买一块西数红盘,三块硬盘组RAID5的,这样8T的空间于我说来真的是足够使用了。但是群里大佬说RAID5如果有坏盘换新重建的时候,有极高的二次故障风险,这个是RAID5最为致命的缺点,而RAID1的重建风险就非常的低。想想自己使用场景也就是存个照片什么的,最终还是两块4T西数红盘组成了RAID1,用来放照片等数据。而那块旧的4T监控盘直接使用,用来放影视,就是这块盘坏了,数据丢了也无所谓。

文件系统类型选择

在我组这台NAS的前两三个月吧,飞牛正式推出了ZFS文件系统。当也有做了功课,请教了deepseek的回答就是,鉴于我的硬件配置,那是必须要上ZFS。ZFS虽然对内存的要求极高,但是32G内存安全可以应付得来。ZFS的受益:ZFS会愉快地使用10GB、甚至20GB的内存作为ARC缓存,这将让您的照片库浏览、文件搜索等操作快如闪电。最终效果是:您的NAS整体响应速度会更快,因为大量的数据请求被内存缓存消化掉了,避免了慢速的硬盘I/O。“请毫不犹豫地选择ZFS。 它的内存占用是一种积极的、提升整体系统性能的投资。您的32GB内存足以让ZFS和您所有的Docker服务和谐共处,并享受ZFS带来的极致数据安全和飞快的读取速度。这是一种“双赢”的局面,而不是一场“零和博弈”。”,虽然deepseek把ZFS说的这么好,但是考虑到后期扩容的灵活性、数据恢复等众多原因,最后还是选择了Btrfs。

其实总结下来,还是选择大众化的,安心、省心、不劳心!

 

 

自制 Ping 监控工具,助我监看网络链路疑难杂症

2025年11月21日 20:10

最近几天,我一直泡在客户现场,为一套出入管理系统做安装和调试。项目本身并不算特别复杂,但网络链路略长、设备层级较多,再叠加门禁前端设备对网络稳定性的敏感度,几乎把这个“小工程”变成了一次完整的网络排障实战。

在这个过程中,我发现仅靠临时敲几下 ping 命令远远不够:需要能够长期监控、按时间统计丢包、自动记录日志的“小工具”,帮我判断网络到底是偶发抖动,还是结构性不稳定。于是,就有了本文分享这个已经跑通、用着还不错的 BAT 监控小脚本。希望对你也有用~

1. 当前项目的网络拓扑结构

本次项目的系统依托园区现有网络架构,通过多级接入交换机构成一条从服务器到岗亭电脑、再到门禁前端设备的完整链路。整体设计看似规范,但只要其中某个环节出现问题,尤其是接入交换机 1 不稳定,后续所有设备便会受到连带影响。总体而言,这套网络结构属于典型的“业务分层 + VLAN 分区”模式:

  • 下层是门禁专网和办公终端网段
  • 上层是园区核心网络和服务器资源
  • 中间是三层/二层交换机级联

从后端服务器到岗亭电脑,大致链路如下:

Server 172.20.1.35
   │
   ▼
Core Network (Core Switch / Router / ...)
   │
   ▼
Access Switch 1 ── 10.255.18.21
   │
   ▼
Access Switc..... [ 阅读全文 ]

原文链接: https://www.shephe.com/post/pinglogger/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

使用 Total Uninstall 强力卸载顽固软件 & 清理残留

2025年10月27日 11:42

如果你想要找一款 Windows 平台的强力卸载工具,并尝试在网上搜索的话,通常会出现这么几个软件:Total Uninstall、Revo Uninstaller、Geek Uninstaller、IObit Uninstaller 等。Kevin 实际下载了它们所有的软件进行测试,最终选定了 Total Uninstall 作为长期使用。尽管它已经一段时间没有更新了,界面也不够现代化,但总体而言,作为一个对电脑系统结构略熟悉的用户,我更喜欢它在卸载逻辑上的可控性与结果的可验证性。

这几个软件在功能上最核心的点,都是围绕「卸载 Windows 系统中的软件、插件与系统残留」展开的。不同的是,有的偏重操作简便,比如 IObit Uninstaller;有的追求轻量与速度,比如 Geek Uninstaller;而 Revo Uninstaller 则以“扫描残留文件”著称。它们都能满足日常用户的需求,但如果你想进一步掌控系统变化、确保每个文件和注册表项都能被精准清理,那么 Total Uninstall 无疑是更高级的选择。

Total Uninstall 的优势在于,它采用“安装前后快照对比”的方式来识别软件的完整安装轨迹。它不仅能记录程序在系统中的文件变化、注册表写入、服务注册等细节,还能基于这些差异生成卸载方案。相比那些仅在卸载后扫描残留文件的工具,Total Uninstall 的清理更彻底、更有逻辑。


[ 阅读全文 ]

原文链接: https://www.shephe.com/post/total-uninstall-remove-clean-software/
版权声明: Kevin's Space 版权所有,转载请用明链标明本文地址
本站相关: 随机文章 | 站长微博 | 关于本站 | 联系站长 | 捐助作者

老张博客搬家至酷鸭数据香港VPS

2025年11月26日 11:54

老张博客搬家至酷鸭数据香港VPS - 第1张图片

不知道从什么时候起,老张博客打开后台评论页面时非常卡顿,经常导致浏览器无响应,甚至有时候电脑都跟着一起卡,排查了好长时间没有找到原因所在。而目前手里有一台酷鸭数据的香港VPS在跑长毛象,这台酷鸭数据的香港VPS较CC的VPS配置要高一些,所以想着搬过去之后会不会问题可以解决。

酷鸭数据的香港VPS我在《酷鸭数据香港服务器简单测评》做过推荐,从9月份跑毛长象到现在,都一直非常的流畅,线路是没得说。但是价格方面呢,2H2G香港的一个月30块钱,不像什么狐蒂云16H16G香港的才111块钱,可想而知,你自己懂的!虽然酷鸭数据的母公司https://node.co.id/和https://www.ikubaru.co.id/在印尼已经创办多年,但是初到中国市场,大家的认可度还不是太高。如果选择酷鸭数据,可以先选择月付,数据记得每天备份。记得走我的推广链接哟:我的推广链接:https://www.kooya.hk/recommend/3gwffST4RbTO 。再来说说CloudCone,因为价格在那里,中规中矩吧,效果、线路不会惊艳到你,但是也不会太让你失望。

双十一的时候“抢”了雨云的香港活动机,正常价格是48元/每月,年付450元/年,当时活动价是99元,年抛机,当时想拿过来做线路机拉美西的。经过和酷鸭数据的这台香港VPS一比,线路真的是差的有一段距离。

因为跑不少Docker服务,所以本次选择用1panel面板,不管什么,都要尝试一下嘛。到底是才接触,新建一个网站都折腾了个把小时,把老张博客完成搬家后,折腾了三个多小时。要是用宝塔的话,自带的网站迁移,分分钟搞定。折腾这么长时间的原因还是对1panel不熟悉。都说1panel占用服务器资源,我这台服务器目前只把老张博客搬了过来,内存就占用了2.5G了。

博客搬家,目前可以正常访问,估计后续还会遇到这样或那样的小问题,再慢慢解决吧!

搬家成功后,再后博客后台评论页面,卡顿现象并没有解决,说明不是服务器配置问题了。最后还是请教了AI得到了解决,不过开始AI又是让我安装插件、又是让我优化数据库、又让我修改服务器配置。为什么要优化数据库呢,因为我的博客评论数已到20000条,查询数据必然会占用资源。提到了查询,AI最后给的建议是修改每页评论显示数。NND,这个时候我才看到评论页面显示数是999条,修改成每页面显示50条之后,问题立马解决。

DIY人生第一台NAS-硬件篇

2025年11月19日 11:09

DIY人生第一台NAS-硬件篇 - 第1张图片

在内存、硬盘、CPU爆涨的今天,配电脑、配NAS的都是大冤种,当然包括我!下面是我这次DIY的价格清单,如果在两年前这样的配置便宜两千块钱不敢说,至少可以便宜一千五。

CPU Intel 酷睿 i5-13500T(散片) 1120
主板 华擎(ASRock)B760M-ITX/D4 899
内存 金百达 黑爵 DDR4 3200 32GB (16GB×2) 758
电源 全汉(FSP) 经典版MS500 398
风扇 Thermalright(利民) AXP90-X53 WHITE 156
机箱 乔思伯 N2 599
硬盘 M.2金士顿1T(系统盘、应用盘) 798
2.5寸光威512G(读写缓存盘) 268
西数红盘4T*2(raid1,数据盘) 1918
希捷监控盘4T*1-(旧,影视) 0
硬盘转接盒 2.5转3.5奥睿科-京东 49
SATA线 弯直头*4-淘宝 36
硬盘电源线 定制正反双线款-淘宝 40
风扇 猫头鹰12025-闲鱼-用于机箱后档 148
猫头鹰A6x25-闲鱼X2-用于机箱 176
M.2散热器 利民HR-10 2280 PRO 89
机箱风扇档板 华顾12CM 7
7459

最早玩NAS还是七八年前的蜗牛星际、暴风二期,为什么说是“玩”,因为不知道是什么原因,我的两块全新2T酷狼硬盘用不到半年时间就挂掉一块,因为没有组RAID,数据全部丢失,还好的就是没有存什么重要数据,另外也在网盘上做了备份。但是却有了NAS容易坏硬盘的阴影一直存在。2023年2月,折腾了J4125小主机All in oen,外接了硬盘笼用朋友送的一块4T的监控盘存放影视。这块硬盘在我手里已经两年多,目前一共运行了五万五千多小时,也就是近六年半的时间,还一直健康。

搞真正NAS的心一直都有,加之老婆说我给孩子们拍的照片都没有好好保存,而老婆自己拍的照片都放在QQ空间里,全都压缩成了几百K的,清晰度严重下降甚是可惜。种种原因,那就还是搞一个NAS吧!成品NAS不会去搞,同样配置的得要多出至少一半的年。那段时间天天泡海鲜,也没有选到心仪的,索性就搞一个全新的得了!至于配置方面,也是准备一步到位,至少三五年不过时,性能得要“过剩”的那种!

之前没有DIY经验,配置清单都是按心目中的价格参考海鲜上的。最初选择的主板是三百多块钱、电源是一百多块钱,把清单发到群里后,不少人说机箱比主板都贵,建议把主板和电源搞的好一点,这样会更加稳定,对硬盘也会有很好的保护作用。

硬盘选择了M.2金士顿的1T来安装系统,余下部分作为存储用。2块全新西数红盘组成RAID1来存储重要的数据,如照片等。另一块朋友送的4T监控盘存放影视,即使坏了数据掉了也无所谓。又搞了一台2.5光威固态做为缓存盘,其实这块硬盘是可有可无的,也可以拿金士顿余下空间来做缓存盘。

机箱通风优化方面,购买了机箱背板大4P正反双线接头、弯头的Sata数据线,这样,就可以把原配风扇换成12X25的温控风扇。在2.5寸硬盘位用扎带安装了2个6X25的猫扇,这样机箱通风散热效果会更好。

M.2金士顿硬盘真的不怎么的,待机温度就是54度往上,要知道现在室温才十来度哟。如果夏天或是工作时温度更高,无疑会影响寿命,便购买了利民HR-10 2280 PRO带风扇的。这个风扇散热效果真的是太好了,安装好之后,待机温度变成了32度,直降二十多度。买之前我看评论区有人说降了二十多度我还没有相信呢!

其实这次DIY预算是四千左右,结果就像去买车一样,从最初选择奇瑞QQ最后买了凯迪拉克!估计会有很多人说“你这NAS配置,比我电脑配置高太多”!其实我自己也是,我家里台式机CPU才是i3-7100,海鲜上卖30块!

轻身减负卖域名了!顺带卖马捷J4125小主机!

2025年11月12日 10:14

轻身减负卖域名了!顺带卖马捷J4125小主机! - 第1张图片

天天喊着要在博客上做减法,在2023年底的时候就要《将博客减法进行到底!》,首先提到的就是要把域名做减法。减法做着,域名没有被“减”少反而会越减越多(是不是每位博主都是这样呀!)。暑期的时候折腾兰空图床商业版,为了配合“商业”单独又折腾了几个域名。因为那段时间一直泡在西部数码里,又开始关注“域名抢注”起来。其实对于域名这块,只要你不关注,不去想,基本上不会有购买的欲望。

现在把手里的几个域名列列,都按成本价来出吧!

图床域名imgbed.net

意思简单直接,图+床,img+bed,cn后辍一直有人使用。域名在西部数据,已挂市场,博友注册价89元出售。https://www.365.hk/ykj/view.asp?domain=imgbed.net

图床域名pic.ge

这个域名一看就知道也是用于图床的,网站可以起名为“图歌”。图歌,名子真的好听。域名在趣域,博友注册价出售。

ICK.CC(已售)

那段时间关注着net和cc短域名,发现这个ICK.CC可以“抢”,感觉不错,ICK嘛,大家都知道,便提交是148元去抢。结果就我一个人在“抢”,尴尬!哈哈!这个域名也在西部数据,博友抢注价148元出售。https://www.365.hk/ykj/view.asp?domain=ick.cc

吐槽下,我在西部挂的域名出售价是200块,结果出售页面是230块!乖,比我赚的多呀!

所思suo.si

所思,suo.si,当时折腾长毛象时,为了装X找小韩以500块拿下的。现还是成本价500元出售。有一说一,这个域名做博客、随笔什么的,真的还是不错的。

核心理由:为什么 “所思” 适合做博客域名?

  1. 贴合博客核心属性:博客的本质是 “记录思考、分享感悟”,“所思” 直接点明 “分享内心所想” 的定位,让读者一眼就知道博客的核心内容 —— 无论是生活随笔、行业思考还是情感抒发,都能完美契合。
  2. 简洁易记,传播成本低:二字域名短小精悍,无生僻字,口头交流(如 “我的博客是‘所思’”)或书面呈现都容易被记住,相比长域名更易积累长期流量。
  3. 文学感强,自带格调:“所思” 源自古典文学,自带文雅、细腻的气质,能提升博客的质感,区别于普通流水账式博客,吸引喜欢深度内容、偏爱细腻表达的读者。
  4. 适配场景极广,不局限内容方向:无论博客是个人随笔、读书分享、行业洞察、旅行感悟还是情感记录,“所思” 都能覆盖 ——“所思” 可是读书心得,可是工作思考,也可是生活碎念,后期内容转型也无需更换域名。
  5. 无负面联想,通用性强:“所思” 是中性且积极的表达,没有特定行业或场景的限制,不挑博主身份(学生、职场人、创作者均可),也不会因内容调整显得违和。

图床域名img.ma

目前这个域名自己在用,起名曰“图妈图床”,绑定了兰空图床商业版!发现自己用还是多余了,可以连同兰空图床商业版一同成本价出售。

另外再卖一个小主机吧!

老蔡家的J4125小主机(马捷J4125),配了8G三星内存、1T梵想M.2固态。之前是买来跑点心云的,后来宽带被降速、公网IP被封就没有敢跑,J4125小主机就放在那里吃灰了。家里还有一台同款,用了Esxi做了底层,虚拟了Ikai+OP+DSM,稳定运行了近三年,目前还在效力!可以提供All in one视频教程、工具、安装ISO等,让你体验折腾的乐趣!再送外置硬盘笼,给你的小姐姐们安个家!

价格参考海鲜再适当降底!

ESXI虚拟下黑群晖DSM7.1完美升级至DSM7.2.2

2025年10月29日 09:57

ESXI虚拟下黑群晖DSM7.1完美升级至DSM7.2.2 - 第1张图片

首先来说下我的硬件环境,目前我的是用J4125小主机外拖硬盘盒,放了1块1T和1块4T的硬盘。软件环境是ESXI下虚拟了爱快、Openwrt和黑群晖。因为以前坏过盘,心里一直都有阴影,所以黑群晖上也没有放重要数据,即使是有一些照片,也是同步到第三方存储。

黑群晖的东西,求稳不求新,只要能稳定运行最好不要去升级。这次升级的原因就是为了安装可道云kodbox套件。最新版可道云套件需要PHP8.2支持,而DSM7.1里PHP最高版本才是7.4,没办法,想要安装可道云kodbox套件,那只能把黑群晖升级到7.2了。

在升级之前,需要给大家科普下,DSM7.2.2不支持硬解(我也是听群里大佬们说的),如果有硬解需求的,就不要升到7.2.2了,听说7.2.1可以。另外可道云kodbox套件安装和Docker安装的区别:kodbox套件安装,可以安装成MYSQL数据库,而数据缓存可以选择Redis数据库,这样的安装方式速度更快、性能更佳。Docker部署可道云kodbox,也可以选择上述方式,但是设置非常的麻烦,所以Docker方式部署可道云kodbox一般选择SQList数据库,而数据缓存选择文件缓存的方式。

因为有些大神的存在,给我们这些小白有了更好的折腾空间,这次升级我是用了https://rrorg.cn/家的编译引导。因为升级方法过于简单,我不用图文方式了。

1.下载引导文件

移步https://rrorg.cn,自行下载引导文件。

2.利用转盘工具,转成vmdk文件

我的ESXI还是6.7版,所以用StarWindConverter进行转盘,成功后会成生两个vmdk文件。

3.上传RR引导文件,删掉旧引导,添加新引导

把RR引导文件通过“数据存储浏览器”上传的合适的位置,注意的是生成的两个vmdk都要上传,上传成功后会合并成一个文件。

ESXI虚拟下黑群晖DSM7.1完美升级至DSM7.2.2 - 第2张图片

在黑群晖虚拟机的设置里,把原引导盘删掉,这里注意下,不要勾选“从数据存储删除文件”,方便我们降级。重新添加引导盘,选择“现有硬盘”,找到我们上传的引导文件。

4.按rrorg教程,步步升级

rrorg网站上有详细的“使用指南”步步升级即可!

5.注意点

升级过程中,一定要选择“保留系统配置”!一定一定!

 

折腾的心,停不下来!

2025年10月19日 21:52

折腾的心,停不下来! - 第1张图片

折腾的心真的停不下来,作为每一位博主,估计都能折腾。每个人手里都会有不少的域名、VPS。曾经我在《将博客减法进行到底!》要告诫自己,需要对博客做减法了,那个时候也确实有点效果,手里的域名和VPS真的减少了不少,可是,现在又折腾的域名和VPS越来越多了!

大佬论坛有一次搞了个抽奖活动,是兰空图床的商业版授权,十份奖那么多人在抽,结果可想而知了。那个时候是魔怔了,一心想着兰空图床商业版,便从中奖人的手里花了180块钱买了商业版的授权码。商业版有了,但是没有域名呀!天天的想着能搞个合适的域名,先后注册了pic.ge和imgbed.net,都不是太满意,最后注册到了img.ma,给图床起名曰“图妈”。兰空商业版有了,域名也有了,但是还是没有找到合适的存储空间,又怕被人刷流量,现在还一直用着cloudflare的R2存储呢。R2有时会抽风,图片还会开裂!唉!麻烦!

假期的时间,博友们都在折腾着长毛像,那我也不能闲着呀!为了在联邦宇宙里装X,找了韩老板花了500块钱买了域名suo.si单独配给长毛像用。所思suo.si,看上去就高大尚呀!折腾GoToSocial还不过瘾,又折腾起了Mastodon,但是Mastodon太吃VPS内存了,又在论坛上溢价150块钱收了cloudcone家的4C4G配置的一台VPS专门安装Mastodon。这几天热乎劲过去了,每天也难发一篇嘟文!

拿急的心就不断,怎么着魔怔了在西部数据上天天盯过期域名看,还“抢”注了一个CC后辍的域名,ICK.CC,我以为会有很多人和我抢,结果就我一个傻X。还TM是花了148块钱抢的!哈哈!

搬瓦工发售megabox pro的时候,小胡同学还在群里广播了下。那个时候我想着反正我的CC机器用着还不错,不是刚需就没有买。后来才发现搬瓦工的megabox pro真的是好鸡,魔怔又犯了,天天泡论坛里收,又是溢价150块钱收了一台原邮的!搬瓦工限制CPU真TM有点变态了,用宝塔面板编译个网站环境CPU高了点就给我限制了!

兜兜转转,现在手里又七个域名七台VPS了!续费的时候一定又是肉疼了!现在手里的私房钱快要吃不消了!不行,还是得要做减法,有哪位看中pic.ge、imgbed.net、suo.si、ICK.CC的,就带走吧!!

宝塔面板Docker分域部署GoToSocial

2025年9月23日 21:27

宝塔面板Docker分域部署GoToSocial - 第1张图片

GoToSocial是什么,我在《WordPress集成Mastodon嘟文之插件篇-Include Mastodon Feed》有所提及。用官方的解释“GoToSocial是一个用Golang编写的ActivityPub社交网络服务器,它提供了一个轻量级、可定制且以安全为重点的入口,进入 Fediverse(联邦宇宙)”。也就是说GoToSocial和Mastodon一样,都是一个进入联邦宇宙的工具。进入联邦宇宙的工具可远远不止这两种哟,有兴趣的可以百度自己折腾下。有了Mastodon,为什么还有一部分人选择GoToSocial呢,正如我之前说过的,Mastodon太重量了,太吃服务器资源,至少需要2C2G的服务器,所以很多人感觉到花了这么大的成本,但是只能得了一点点的功能,感觉有些不值得。而GoToSocial却不同,他是非常的轻量,单用户使用的话,只占不到100M的内存。但是呢,GoToSocial只有服务端也就是我们正常说的后端没有前端,WEB版前端我们可以选择鹿鸣elk.zone等工具。

什么是分域部署GoToSocial,我们在部署GoToSocial时可以直接使用顶级域名来部署,但是用顶级域名无形之中增加了成本,所以很多人选择了用二级域名来部署GoToSocial。比如我部署GoToSocial的二级域名是social.laozhang.org,我创建的用户名是laozhang,那么在联邦宇宙里展示出的账号就是laozhang@social.laozhang.org。这样在联邦宇宙里展示的账号感觉太长不好看也没有个性,那我们就可以通过分域部署,来达到使用二级域名部署GoToSocial,但是在联邦宇宙里显示的用户名却是顶级域名,也就是让你可以装X。比如通过分域部署后,我的原来账号laozhang@social.laozhang.org在联邦宇宙里显示的是laozhang@laozhang.org。

特别提醒的是,如果用二级域名分域部署GoToSocial,务必在第一次启动 GoToSocial 前完成。用官方的解释是“一旦与他人联合后就无法更改域名布局。服务器会因此产生混淆,而你需要说服每个与你联合的实例管理员修改其数据库来解决问题。同时,你还需要在本地重新生成数据库,创建一个新的实例账户和加密密钥对。”

新建GoToSocial目录

在合适的位置新建GoToSocial目录,并建data文件夹,设置如下图。我习惯把Docker的目录都建在一起,方便管理。

宝塔面板Docker分域部署GoToSocial - 第2张图片

创建docker-compose.yaml并修改相关配置

在刚的GoToSocial目录下新建docker-compose.yaml,将下面的代码复制保存,注意修改为自己的配置。

services:
gotosocial:
image: superseriousbusiness/gotosocial:latest
container_name: gotosocial
user: 1000:1000
networks:
- gotosocial
pull_policy: always 
environment:
GTS_HOST:"social.laozhang.org" #实例地址
GTS_ACCOUNT_DOMAIN:"laozhang.org" #用户账户所属的域名,如果使用二级子域名而非主域搭建例请整行删除
GTS_DB_TYPE: sqlite #使用sqlite数据库
GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
GTS_STORAGE_BACKEND: s3 # 使用S3存储 ,如果不需要可以删除包含STORAGE的环境变量
GTS_STORAGE_S3_BUCKET: user #桶名
GTS_STORAGE_S3_ENDPOINT: s3.bitiful.net #S3端点
GTS_STORAGE_S3_ACCESS_KEY: kmX5VsV8cB4ma8jeAg #
GTS_STORAGE_S3_SECRET_KEY: DJ9qG7pNAZy9 #密钥
GTS_STORAGE_S3_PROXY: true #代理S3,不会显示S3地址
GTS_ACCOUNTS_ALLOW_CUSTOM_CSS: true #允许自定义CSS
TZ: Asia/Chongqing #时区
GTS_SMTP_HOST: mail.cock.li #smtp服务器
GTS_SMTP_PORT: 587 #必须使用TLS
GTS_SMTP_USERNAME: admin@cock.li #用户名
GTS_SMTP_PASSWORD: ****** #密码
GTS_SMTP_FROM: admin@cock.li #邮箱地址
GTS_INSTANCE_LANGUAGES: zh #中文
GTS_ACCOUNTS_REGISTRATION_OPEN: true #开放注册
GTS_TRUSTED_PROXIES: 172.18.0.1/16 #可信代理
ports:
- "127.0.0.1:8080:8080"
volumes:
- ./data:/gotosocial/storage #修改映射目录为第一步创建的GoToSocial目录
restart: "always"

networks:
gotosocial:
ipam:
driver: default
config:
- subnet: "172.18.0.0/16"
gateway: "172.18.0.1"

修改顶级域名重定向规则

打开顶级域名laozhang.org的网站设置,在配置文件里增加下面代码

    # GoToSocial 重定向规则,不玩gotosocial就删除
    location /.well-known/webfinger {
        rewrite ^.*$ https://social.laozhang.org/.well-known/webfinger permanent;
    }

    location /.well-known/host-meta {
        rewrite ^.*$ https://social.laozhang.org/.well-known/host-meta permanent;
    }

    location /.well-known/nodeinfo {
        rewrite ^.*$ https://social.laozhang.org/.well-known/nodeinfo permanent;
    }
     # GoToSocial 重定向规则,不玩gotosocial就删除,结束

运行、创建用户、增加管理员权限

使用ssh工具远程连接到服务器,并进入到刚才创建的GoToSocial目录

运行

docker compose up -d

创建用户,注意自行修改用户名、密码、邮箱

docker exec -it gotosocial ./gotosocial admin account create --username admin --email YOUR@EMAIL.COM --password SOME_VERY_GOOD_PASSWD ;

增加管理员权限

docker exec -it gotosocial ./gotosocial admin account promote --username admin

新建网站,反代

创建social.laozhang.org域名的网站,进行反代。至此全部完成,我们在正常管理gotosocial的时候,当然还是使用二级域名,分域的目的就是在联邦宇宙里显示的账号是顶级域名的。

宝塔面板Docker部署mastodon长毛象

2025年9月18日 23:06

宝塔面板Docker部署mastodon长毛象 - 第1张图片

暑假的时候就开始折腾mastodon了,只不过那个时候没有更新博客就没有做记录。mastodon的Docker方式部署,网上教程很多,我这也是东借西借,才形成了适合自己的部署方法。

什么是mastodon,Mastodon 是一款开源软件,它催生了一系列替代性社交媒体网站。Mastodon 是互联网上最大的去中心化社交网络。 它不是一个网站,而是由独立社区节点及其数以百万计的用户组成的网络,所有这些用户都能够无缝地相互交流。 无论你进入哪一个节点,你都可以与所有在 Mastodon 的人之间进行交流。

自建mastodon是很吃资源的,起步需要要求VPS的配置是2C2G,目前我的mastodon是部署在酷鸭数据的香港VPS上,速度还不错。目前我开启了全文搜索的情况下,内存占用达到3.4G。所以如果你的VPS配置不高的情况下,就不要折腾mastodon了,不过有一个很好的轻量级的替代品GoToSocial,内存占用才一百来M。

如果不自建而想体验mastodon的话,可以直接使用官方的mastodon.social或使用长毛象中文网cmx.im,我们俗称“草莓县”!

设置SWAP虚拟内存

mastodon比较吃内存,所以一般情况下,我们都会设置SWAP,SWAP的大小一般和物理内存相等即可。因为我们是在宝塔面板下操作的,所以能直接在面板操作就直接在面板操作,省得用命令了。

在软件商店里安装“Linux工具箱”,数秒安装完成后,打开Linux工具箱,找到“Swap虚拟内存”项,直接填写即可。

创建mastodon目录

在宝塔面板文件管理器里,直接在你想要的位置创建目录。比如我是创建在/www/mastodon/mastodon下的,因为数据盘就是挂载在www的目录下。

拉取镜像、修改docker-compose.yml配置文件

使用ssh工具远程连接到服务器,并进入到刚才创建的目录

cd /www/mastodon/mastodon

拉取镜像

如果需要升级到某指定版本,请将latest改成v4.4.3等版本号。

docker pull ghcr.io/mastodon/mastodon:latest

下载docker-compose.yml文件

wget https://raw.githubusercontent.com/mastodon/mastodon/main/docker-compose.yml

在宝塔面板文件管理器下,进入mastodon目录,打开docker-compose.yml文件,修改web、streaming、sidekiq分类下的image: ghcr.io/mastodon/mastodon后的版本号,可是加:latest”,也可以直接使用指定版本,比如“v4.4.3”。

开启全文搜索

我是直接在部署的时候就开启全文搜索,后期开启也可以。把docker-compose.yml文件里"es"分类的注释#号全删掉。注意这里有个坑,就是删掉es前的#号后,还得要再删除一个空格,前面空两格,否则安装时会报错。同时在web分类下把“- es”前的注释#号也删掉。

注意:开启全文搜索后,内存占用近1G,所以如果配置低的话,建议把这个功能关掉。

初始化PostgreSQL

初始化数据库

注意初始化代码中,一定要把mastodon目录修改为你自己创建的目录。

docker run --name postgres14 -v /www/mastodon/mastodon/postgres14:/var/lib/postgresql/data -e   POSTGRES_PASSWORD=设置数据库管理员密码 --rm -d postgres:14-alpine

进入数据库

docker exec -it postgres14 psql -U postgres

创建mastodon用户

CREATE USER mastodon WITH PASSWORD '数据库密码(最好和数据库管理员密码不一样)' CREATEDB;

退出数据库

\q

停止Docker

docker stop postgres14

配置Mastodon

创建.env.production文件

进行mastodon根文件夹中创建空白.env.production文件,可以用下面命令,也可以直接在宝塔面板下新建。

touch .env.production

运行引导

docker-compose run --rm web bundle exec rake mastodon:setup

引导安装过程就不赘述了,因为看不懂,我是直接用微信截图翻译的,笨人有笨办法。运行到最后,出现下面显示后,把下面的所有数据复制下来,粘贴到.env.production文件里。

Below is your configuration, save it to an .env.production file outside Docker:

注意,因为我开启了全文搜索功能,所以务必在.env.production文件里添加下面代码

ES_ENABLED=true
ES_HOST=es
ES_PORT=9200

启动Mastodon

docker-compose down
docker-compose up -d

文件夹赋权

chown 991:991 -R ./public
chown -R 70:70 ./postgres14

如果目录内也有elasticsearch文件夹后,也对其赋权。这个是全文搜索功能需要的。

chown 1000:1000 -R elasticsearch

再次重启Mastodon

docker-compose down
docker-compose up -d

到目前为止,全部完工。如果不出意外的话,查看下Docker容器,应该是有6个。其中可以看到mastodon-es-1这个容器占用内存就近1G,他就是全文搜索!

配置图片上传至第三方存储

我设置是把图片上传至CF的R2存储中,方法是在.env.production文件里添加以下代码,不懂的可以问AI,不要忘了把XXX换成自己的KEY!配置完后,重启mastodon搞定!

# 文件上传配置
S3_ENABLED=true
S3_PROTOCOL=https
S3_ENDPOINT=https://XXXXXXXXXXXXXX.r2.cloudflarestorage.com/
S3_ALIAS_HOST=img.suo.si
S3_HOSTNAME=img.suo.si
S3_BUCKET=XXXX
S3_REGION=auto
AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXu

新建网站,进行反代

把这个茬给忘了,在蜗牛的提醒下添加一条,可以参考《宝塔面板反向代理,用域名访问Triliu》。不过最新的宝塔面板,“网站”选项里里就有“新建反代”,设置原理是一样的。这样的好处就不会产生网站目录,更为方便易于管理。

酷鸭数据香港服务器简单测评

2025年9月14日 10:41

这次是老张第二次接服务器的广告了,第一次接的是“软云”,当时也是写一篇软文《老张博客搬入软云_RuanCloud,暨谈个人博客服务器的选择!》再加上右侧栏全站图片广告。第一次接广告还是没有经验的,即使在软云没有给AFF没有给推广佣金的情况下,还是在博客群里给他推广了一把,最为后悔的就是还有“担保”的意思在里面。最后软云跑路,博客群里好几位购买软云而最后都没有得到退款,博友损失了,老张还真的是非常的愧疚的!而这第二次接广告,必须要事先说明了!只是我接的广告,只是我在推广自己的AFF,可不做任何担保哟!

还是来说说这个酷鸭吧!经过和酷鸭合伙人(我没有联系到老板)了解到,酷鸭的老板是印尼人,来中国读博,就做起来酷鸭。他们的总公司在印尼,https://node.co.id/和https://www.ikubaru.co.id/在印尼和新加坡都有自建机房。目前酷鸭上线了香港和新加坡的机器,免备案,方便做站。

我的推广链接:https://www.kooya.hk/recommend/3gwffST4RbTO

有一说一,从价格上来看,是中规中矩的市场价,并没有像很多个人作坊那样上来就搞什么超低价活动机。只是搞了一个活动,也就是1元体验。这正也说明了不像软云那样,上来就是直接圈钱。问了酷鸭合作人,他们不急着快速,想着稳中求进。

目前我的mastodon长毛象“所思”https://suo.si放在酷鸭的香港VPS上,那速度真的是起飞了!大家可以检验下!

友情提醒:不管怎么样,公司是才开的,如果想了解,可以等国庆上“一元体验”活动。另外就是数据要记得天天备份!期初建议月付!月付!月付!

酷鸭数据香港服务器简单测评 - 第1张图片

酷鸭数据香港服务器简单测评 - 第2张图片

目前“一元体验”活动机已经售空,国庆应该还会再放出。

我也入手了一台,做个测评让大家简单了解下 酷鸭数据香港服务器简单测评 - 第3张图片

酷鸭数据香港服务器简单测评 - 第4张图片

酷鸭数据香港服务器简单测评 - 第5张图片

酷鸭数据香港服务器简单测评 - 第6张图片

 

 

 

WordPress集成Mastodon嘟文之插件篇-Include Mastodon Feed

2025年9月8日 20:50

 

WordPress集成Mastodon嘟文之插件篇-Include Mastodon Feed - 第1张图片

前段时间虽然说是“断网”了,还是偷偷折腾了GoToSocial和Mastodon。GoToSocial和Mastodon都属于通过“ActivityPub”协议实现与多个平台的联邦特性与其他平台互联互通。GoToSocial虽然轻量,但是颜值和功能还是没有Mastodon好,最终选择了Mastodon。至于怎么玩Mastodon,要么像我这样自建,要么就用网上的平台,比如官方的mastodon.social和草莓县m.cmx.im。有兴趣的可以一起玩玩!目前我自建的为@laozhang@suo.si,官方平台和草莓县上分别是@laozhang@mastodon.social和@laozhang@m.cmx.im。为什么自建了还在其他平台注册呢,我怕以后我驾驭不了自建的mastodon,毕竟玩的时间久了数据都都会达到十几个G。或是感觉到单独花二百块钱搞服务器来玩mastodon不值的时候,我可能就把自建的关停掉。

东西玩多了,都想把他们“集成”到一起,比如老张博客首页的“最新动态”就是调取用 Typecho 搭建的https://zhangbo.net老张随笔第一篇内容。有兴趣的可以按《WordPress首页调用typecho方法!》的方法来;又比如在Wordpress的页面里显示Memos内容,方法可以按《巧搬空白Koobai大佬Memos页面,完美与博客整合。》来。

不难看出,在Wordpress里调用memos或是Typecho,都是完全靠代码,毕竟像这样玩的人少更甚是memos等太过小众,没有人折腾这东西,想要实现一些功能必须要靠自己才行。而同时玩Wordpress和Mastodon却大有人在,所以你想实现的功能别人都早就折腾过了。就比如在WordPress中集成Mastodon嘟文。先看效果https://laozhang.org/mastodon.html,这是我在博客里集成了@laozhang@suo.si所发的所有嘟文。那实现这个功能就只是简单的一个插件,Include Mastodon Feed。

1.安装Include Mastodon Feed

直接在后台插件菜单里搜索安装即可,并启用。

2.查找Mastodon 用户ID

不管是自建的Mastodon还是其他平台,把下面的代码内换成自己的用户名和相应的域名后在浏览器内打开,即可显示你的ID

https://yourinstance.com/api/v2/search?q=yourusername@yourinstance.com&resolve=true&limit=5

3.创建mastodon页面

在Wordpress后台新建页面,把下面代码换成自己的ID和相应域名即可。(换成英文中括号)

【include-mastodon-feed instance="YOUR-INSTANCE" account="YOUR-ACCOUNT-ID"】

4.根据自己喜好,自定义CSS

这个可以根据自己的喜好,自己折腾。

 

怎么样,插件版是不是太简单了!无脑操作即可!

 

WordPress首页调用memos方法!

2024年10月22日 14:03

WordPress首页调用memos方法! - 第1张图片

老张一直想把wordpress和memos能整合在一起,前几天在段先生的博客上看到了教程,便死皮赖脸的问他方法,原来是AI搞定的。刚开始的时候是直接拿段先生的用,但是里面有一些达不到自己想要的效果。比如段先生是从memos的RSS文件里取数但,如果memo里有多篇图片的话,RSS只能输出一张链接地址,其他找不到。通过找木木大佬,用了他提供的《Memos API 非官方不完全说明》便可以解决。另外在CSS布局上也不是自己想要的效果,便想着自己也来让AI搞吧!

让AI帮你写代码,你必须要学会怎么样能更好的和AI对话,必须要有一点点的代码基础,才能把把问题问在点子上。我在把memos的API输出的数据模式先告诉AI,然后再提出自己的要求,要求如下:

我想在wordpress获取memos的api发布第一条动态内容,API的链接地址是https://zhangbo.net/api/v1/memo?creatorId=1&rowStatus=NORMAL&limit=1 ,内容格式如下:
按以下要求进行操作:
1.读取第一个"id"后面的数据,并形成“https://zhangbo.net/m/+“id后面的数据”” 做为链接,赋值给变量$link_content
2.读取"content"后面的数据,读取以#号开始、空格结束的内容,并在前面加#号后赋值给变量$tag_content。
3.读取"createdTs"后面的数值,转化为时间后与当前时间计算时间间隔。时间间隔为1小时内的,以时间间隔+“分钟前”赋值给$time_content;时间间隔为24小时内的,以时间间隔+“小时前”赋值给$time_content;时间间隔为30天内的,以时间间隔+“天之前”赋值给$time_content;时间间隔超过30天的,直接以“年月日”形式赋值给$time_content。
4.读取"content"后面的数据,排除“![]()”图片形式、排除#、#及空格前的内容后,赋值给$content。
5.读取"content"后面的数据,如果有“![]()”图片形式,将()内的图片链接赋值给$image_content;如果"externalLink": 后面有数据,赋值给$image_content;如果"filename"后面有数据,将以“https://zhangbo.net/o/r/+filename上第四行ID后的数值+"filename"的数据”赋值给$image_content。如果以上情况都存在,那将以数值组形式赋值。
以上生成的代码,将保存在wordpress的主题文件functions.php中以便调用。
按以下要求生成CSS代码
1.对于在首页展示的要求,在首页文章列表上方,与首页文章空两行
2.显示框宽度100%、背景灰色、四角椭圆。
3.第一个DIV展示框以"h2”格式展示“最新动态”四个字、靠左对齐、左边距空20px;务必同一行展示$time_content值,右居中对齐,右边距空20PX
4.第二DIV插入细实线、深灰色
5.第三DIV展示$content值
5.第四DIV展示$image_content值的缩略图,缩略图四角椭圆并有阴影,如果多图从左往右排列。并按确保引入 Lightbox.js,也写入到本代码中,达到点击放大效果
6.第五DIV靠左对齐展示$tag_content值,背景灰色并四角椭圆,靠右展示“点击评价”点击链接到$link_content。
再生成输出代码以便插入在首页文件index.php,以便在首页显示。/

我分别测试了官方GPT、三方GPT和豆包,结果是官方GPT直接来句“问题太复杂,请分类进行提问”,三方GPT给出的代码效果完全不对,而豆包给出的代码基本上达到要求。当然,还是由于自己的表述,导致代码在图片显示这块有些问题。今天中午利用几分钟时间,进行了修改,对获取图片链接地址重新让AI写,我是这样提问的:

我现在的要求是其他代码不需修改,只对获取图片链接重新按以下要求来修改
1.读取"content"后面的数据,如果有“![]()”图片形式,将()内的图片链接赋值给$image_content;
2.获取  "resourceList": []的中括号里数据,这是图片组,每组以{}进行区分,查询每个{}内的"externalLink",如果"externalLink": 后面有数据,赋值给$image_content;如果"externalLink"无数据,则以“https://zhangbo.net/o/r/+该图片id+"filename"的数据”赋值给$image_content。
如果以上情况都存在,那将以数值组形式赋值。

经过这样的修改,图片才得要正确显示。后来又陆陆续续的修改了CSS样式,最终达到目前的效果。

现在把相关代码贴给大家吧,需要的自取,不合自己要求的,也可以让AI帮你来修改。

1.把下面的代码插入到主题文件的index.php合适位置。

 <?php
$memoOutput = processMemoData();
if ($memoOutput) {
echo $memoOutput;
}
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox-plus-jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css">/* Your code... */

2.把CSS样式代码放置到主题CSS定义设置里,当然也可以直接放到style.css中。


/* 首页调用memos效果---开始 */
/* 缩小与顶部距离,增加与首页文章列表距离 */
.memo-display {
    margin-top: 0px; /* 减少与顶部的距离 */
    margin-bottom: 40px; /* 增加与文章列表的距离 */
    margin-right: 40px; /* 设置右边距为20px */
    width: calc(100% - 40px); /* 计算宽度以适应右边距 */
    background-color: #f2f2f2;
    border-radius: 10px;
    padding: 20px;
    border: 1px solid #ccc; /* 添加细线边框,颜色为浅灰色 */
}


/* 第一个 DIV:展示“最新动态”和时间 */
.memo-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}
.memo-header h2 {
    margin-left: 0px;
}

.memo-header span {
    margin-right: 0px;
}

/* 第二 DIV:插入细实线、深灰色 */
.memo-divider {
    border-top: 1px solid #999;
    margin: 10px 0;
}

/* 第三 DIV:展示内容 */
.memo-content {
    margin-bottom: 10px;
    line-height: 1.5; /* 或者可以使用具体的像素值,如 1.5em 或 24px */
}
/* 第四 DIV:展示缩略图 */
.memo-images {
    display: flex;
    flex-wrap: wrap;
}

.memo-images img {
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
    margin-right: 10px;
    cursor: pointer;
    transition: transform 0.3s ease; /* 添加过渡效果 */
}

.memo-images img:hover {
    transform: scale(1.1); /* 鼠标悬浮时放大 */
}

/* 第五 DIV:展示标签和链接 */
.memo-footer {
    display: flex;
    align-items: center;
    margin-top: 10px; /* 设置与上面容器的距离为 30px */
}

.memo-footer div:first-child {
    background-color: #9999;
    border-radius: 6px;
    padding: 5px 10px;
    margin-right: 10px;
}

.memo-footer a {
    text-decoration: none;
    margin-left: auto; /* 靠右对齐 */
    margin-right: 0px; /* 右边距 20px */
}
/* 首页调用memos效果---结束 */

3.把下面代码插入到主题functions.php文件中。

/* Your code... */
//-------首页调用memoe代码-----开始
function getTimeContent($createdTs) {
    $current_time = time();
    $time_diff = $current_time - $createdTs;
    static $cachedTimeContent = null;
    static $lastCreatedTs = null;
    if ($lastCreatedTs === $createdTs) {
        return $cachedTimeContent;
    }
    if ($time_diff  100) {
        $substr_content = mb_substr($content, 0, 100, 'UTF-8');
        $last_char = mb_substr($substr_content, -1, 1, 'UTF-8');
        $last_char_ascii = ord($last_char);
        while ($last_char_ascii  126) {
            $substr_content = mb_substr($substr_content, 0, -1, 'UTF-8');
            $last_char = mb_substr($substr_content, -1, 1, 'UTF-8');
            $last_char_ascii = ord($last_char);
        }
        $content = $substr_content. '......';
        $link_text = '查看原文';
    } else {
        $link_text = '点击评价';
    }

    $content_without_tags_and_images = preg_replace('/#.*? /', '', $content);
    $content_without_tags_and_images = preg_replace('/!\[.*?\]\(.*?\)/', '', $content_without_tags_and_images);
    $content = $content_without_tags_and_images;

    // 构建输出内容
    $output = '
'; $header = '

最新动态

'. $time_content. '
'; $divider = '
'; $contentDiv = '
'. $content. '
'; $imagesDiv = ''; if (!empty($image_content)) { $imagesDiv = '
'; foreach ($image_content as $image_link) { $imagesDiv.= 'Image'; } $imagesDiv.= '
'; } $footer = '
'. $tag_content. '
'. $link_text. '
'; $output.= $header. $divider. $contentDiv. $imagesDiv. $footer; $output.= '
'; return $output; }

OK,结束!折腾十几个小时,就是出了这篇教程!!

❌