PYM博客https://pym.plus欢迎!Welcome!Halo v2.23.0zh-cnhttps://pan.pym.plus/f/kOtY/PYMbk.pngPYM博客https://pym.plusWed, 18 Mar 2026 00:00:09 GMT<![CDATA[免费的AI和付费的API区别到底在哪里?付费的AI真的更聪明吗?]]>https://pym.plus/archives/1773721817520

叠甲

本文并不针对任何一个AI,文中的免费AI,付费AI也不代指或暗指任何一个AI。

本文属于个人观点。

前言

不知道大家有没有感觉,在使用一个免费AI回答某个问题时,如果对话的篇幅很长,你会感觉这个AI越来越笨笨的了。或者,你问免费的AI它是什么模型,它通常不会告诉你它是什么模型,只会说是XXX公司的XX AI。而付费的AI(以付费API为例)的,你问它是什么模型,它是会告诉你的,且对话篇幅很长不会出现变笨了的感觉,只是感觉钱包空空了

区别

免费的AI

免费的AI通常有3大限制:

  1. 限流,限定时间内提问过快过多,AI可能就不会理你了

  2. 自己会切模型,问多了,因为考虑到成本,你用的ProAI可能就变成了LiteAI或者MiniAI,能力瞬间下降,这也是为什么用免费AI解决不了某个问题时,开个新对话,或者等会再问,AI可能就变聪明了

  3. 提问内容的限制,官网的一些免费AI远比它的付费版本,内容限制多得多

付费的AI

提到付费的AI,大家可能首先想到的就是XXX套餐或者XXX会员,但是我这里想讲的是AI的付费API

这种给AI掏钱买API用的方式与免费的通常有2个区别:

  1. 不限流,你余额还有钱就可以稳定输出

  2. 可以指定使用什么模型,不会遇到变笨的情况

总结

总结一下,付费的AI,无论是XX套餐或者会员,还是它的付费API的形式,并不是比免费的AI多聪明多少,而是能一直稳定,按照你需求的质量输出。

至于大家是需要付费的AI,还是免费的AI,就看个人需求了。

]]>
/archives/1773721817520PYMAITue, 17 Mar 2026 04:44:17 GMT
<![CDATA[每个月900万免费Tokens的AI,书生大模型!]]>https://pym.plus/archives/1773452396154

前言

前些天在网上找免费API的AI,找到了https://chat.intern-ai.org.cn/models,据说这个AI的Intern-S1-Pro模型参数高达968B,最最最关键的是:
普通用户注册后有免费的额度,每个月都有

9,000,000input tokens/月

3,000,000output tokens/月

获取API Key

https://internlm.intern-ai.org.cn/api/tokens获取,需要手机号注册,注册后可以直接创建API Key,但是每6个月需要更换,否则会失效。

申请更高限流


默认是限制每分钟只能调用30次,每分钟最大50000Tokens,但是可以在https://internlm.intern-ai.org.cn/api/strategy申请更高限流
我目前申请到了每分钟60次,最大300000Tokens。

模型列表

模型

描述

窗口长度

intern-latest

默认指向我们最新发布的 Intern 系列模型,当前指向intern-s1-pro

256K

internvl3.5-latest

默认指向 InternVL3.5 系列最新模型,当前指向internvl3.5-241b-a28b

32K

intern-s1-pro

我们最新发布的最先进的开源科学多模态推理模型,拥有极致的表现

256K

intern-s1

融合了专业科学能力的多模态大模型

32K

intern-s1-mini

轻量级科学强推理多模态大模型

32K

internvl3.5-241b-a28b

我们最新发布多模态大模型,具备更强的图文理解能力、长时序图片理解能力,性能比肩顶尖闭源模型

32K

调用模型

BaseUrl: https://chat.intern-ai.org.cn/api/v1/

from openai import OpenAI

client = OpenAI(
    api_key="eyJ0eXBlIjoiSl...请填写准确的 token!",  # 此处传token,不带Bearer
    base_url="https://chat.intern-ai.org.cn/api/v1/",
)

chat_rsp = client.chat.completions.create(
    model="intern-latest",
    messages=[{"role": "user", "content": "hello"}],
)

for choice in chat_rsp.choices:
    print(choice.message.content)

]]>
/archives/1773452396154PYMAISat, 14 Mar 2026 02:12:06 GMT
<![CDATA[OpenClaw老烧钱了,有没有方法省点钱?有的有的!]]>https://pym.plus/archives/1773120903924
屏幕截图 2026-03-10 133532.png

今天闲得无聊,随便问了几个问题(可能20个的样子),然后花出去13.67元,那太贵了,有没有方法省点钱呢?

还真有,每家大厂都有自己的CodingPlan,如果你Token用的多的话相当于是打了1折,CodingPlan是什么呢?

请看下图(示例对象为豆包模型的火山方舟):

由此我们可以知道,如果自己请求很多的话用CodingPlan无非是等等,价格却是相当于打了1折,非常便宜,基本可以说是个人使用随便问了。

下面给出3家大厂的链接(基本都集成了很多模型):

阿里云(主要是Qwen模型):阿里云百炼 Coding Plan - AI 编码订阅计划 - 阿里云

腾讯云(主要是HY模型):腾讯云 Coding Plan 智能 AI 编程订阅服务

火山引擎(主要是Doubao模型):方舟Coding-Plan

]]>
/archives/1773120903924PYMAITue, 10 Mar 2026 05:44:12 GMT
<![CDATA[Docker Compose部署OpenClaw,真正能做事的 AI!]]>https://pym.plus/archives/1772877423955

前言

最近OpenClaw老火了,号称啥事都能帮你干的AI,任务丢过去就会自己完成,完美解决了Token滞销的问题,那么今天就用Docker Compose来搞一个玩玩!

注意:不要随便给别人用!!!否则AI可能把你的API和个人信息之类的打包发给别人!!!也不要在自己的主力电脑上部署,小心AI直接给你文件删完了!!!附带一句请随时注意你的Token账单和你的钱包!

安装

步骤 1:创建工作目录

mkdir -p ~/openclaw-docker
cd ~/openclaw-docker

步骤 2:创建 .env 环境文件

nano .env # 创建.env文件 

将以下内容复制到 .env 文件:

# 镜像配置
OPENCLAW_IMAGE=jiulingyun803/openclaw-cn:latest

# 数据目录(相对于 docker-compose.yml 所在目录)
OPENCLAW_CONFIG_DIR=./data/.openclaw
OPENCLAW_WORKSPACE_DIR=./data/clawd

# 网关配置
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_BRIDGE_PORT=18790
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_TOKEN=your-secure-token-here

# Claude 集成(可选,仅使用 Claude 作为后端时填写)
CLAUDE_AI_SESSION_KEY=
CLAUDE_WEB_SESSION_KEY=
CLAUDE_WEB_COOKIE=

这里附一份表格,关于.env的配置解释:

变量

含义

默认值

必需

说明

OPENCLAW_IMAGE

Docker 镜像名称

openclaw-cn:local

使用预构建镜像:jiulingyun803/openclaw-cn:latestjiulingyun803/openclaw-cn:vX.Y.Z

OPENCLAW_CONFIG_DIR

配置文件目录

~/.openclaw

Clawdbot 配置和凭证存储位置

OPENCLAW_WORKSPACE_DIR

工作空间目录

~/clawd

代理工作文件存储位置

OPENCLAW_GATEWAY_PORT

网关端口号

18789

访问 Web UI 的端口(如需修改,访问时用新端口)

OPENCLAW_BRIDGE_PORT

桥接端口号

18790

用于客户端连接的端口

OPENCLAW_GATEWAY_BIND

网关绑定地址

lan

localhost(仅本机)/ lan(局域网)/ 0.0.0.0(公网可访问,⚠️ 谨慎使用)

OPENCLAW_GATEWAY_TOKEN

网关认证令牌

自动生成

Web UI 登录令牌(可自定义或留空自动生成)

CLAUDE_AI_SESSION_KEY

Claude.ai 会话密钥

⚠️ 仅使用 Claude AI 作为后端时填写,获取方式见 Claude 登录指南

CLAUDE_WEB_SESSION_KEY

Claude Web 会话密钥

⚠️ 仅使用 Claude Web 版时填写

CLAUDE_WEB_COOKIE

Claude Web Cookie

⚠️ 仅使用 Claude Web 版时填写

步骤 3:创建 docker-compose.yml 文件

nano docker-compose.yml # 创建docker-compose.yml文件

将以下内容复制到 docker-compose.yml

services:
  openclaw-cn-gateway:
    image: ${OPENCLAW_IMAGE:-openclaw-cn:local}
    user: node:node
    environment:
      HOME: /home/node
      TERM: xterm-256color
      OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
      CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
      CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
      CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
    volumes:
      - ${OPENCLAW_CONFIG_DIR:-./data/.openclaw}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR:-./data/clawd}:/home/node/clawd
    ports:
      - "${OPENCLAW_GATEWAY_PORT:-18789}:18789"
      - "${OPENCLAW_BRIDGE_PORT:-18790}:18790"
    init: true
    restart: unless-stopped
    command:
      [
        "node",
        "dist/index.js",
        "gateway",
        "--bind",
        "${OPENCLAW_GATEWAY_BIND:-lan}",
        "--port",
        "${OPENCLAW_GATEWAY_PORT:-18789}"
      ]

  openclaw-cn-cli:
    image: ${OPENCLAW_IMAGE:-openclaw-cn:local}
    user: node:node
    environment:
      HOME: /home/node
      TERM: xterm-256color
      BROWSER: echo
      CLAUDE_AI_SESSION_KEY: ${CLAUDE_AI_SESSION_KEY}
      CLAUDE_WEB_SESSION_KEY: ${CLAUDE_WEB_SESSION_KEY}
      CLAUDE_WEB_COOKIE: ${CLAUDE_WEB_COOKIE}
    volumes:
      - ${OPENCLAW_CONFIG_DIR:-./data/.openclaw}:/home/node/.openclaw
      - ${OPENCLAW_WORKSPACE_DIR:-./data/clawd}:/home/node/clawd
    stdin_open: true
    tty: true
    init: true
    entrypoint: ["node", "dist/index.js"]

步骤 4:启动容器

docker compose up -d

步骤 5:运行配置向导

docker compose run --rm openclaw-cn-cli onboard

配置向导可以帮助你完成以下基础设置:

  • 选择网关后端(Claude、Gemini 等)

  • 配置 Feishu、Telegram 等渠道

  • 生成和保存配置

步骤 6:访问 Web UI

打开浏览器访问:

http://127.0.0.1:18789/

将配置向导生成的令牌复制到登录页面即可。

如果你有公网IP的话,就用 http://你的公网IP:端口/ 访问。

个人观点

最后文章的结尾,我附带一些个人的观点,欢迎大家在评论区参与讨论!

OpenClaw的出现,无疑是智能体AI的又一大进步。

对于一些真正有需求的企业,肯定不敢大规模使用,就算是大规模使用了,也不会没有审核之类的一道防线,只能说继续期待AI发展。

对于普通个人而言,我建议玩玩就可以了,不要想着这个东西能挣钱,要知道使用AI的成本就是非常高的,我自己也试了试的,基本上一个很简单的问题,比如问问今天的天气,就能干到10万Tokens左右,这还是正常的,以 Doubao-Seed-2.0-pro 的价格来算,就约为1.6元,实际情况更多,编程一类的,账单更是飞上天了(我试了试开发一个Windows下能用的计算器,AI完成后花费了我23.6元),当你玩久后发现,能干的事多,但真正的能干的事情少,真的太少了,在OpenClaw AI能干的事情,你基本上也能完成,还能省少说10元钱,因为现在的AI不成熟,你永远无法知道AI会给你来上波什么操作。

对于有钱,且真的需求效率的,我推荐试一试,真的能快太多。

最后的最后,如果你真的决定用了,请随时注意有关OpenClaw的安全升级和漏洞消息,谨防信息泄露等等问题!

]]>
/archives/1772877423955PYMAIDockerSat, 7 Mar 2026 10:26:53 GMT
<![CDATA[优化了下网站访问速度,大家有没有感觉快点呢?]]>https://pym.plus/archives/1772430609723
itdog网站测速

欢迎评论区留言,我会继续优化的

]]>
/archives/1772430609723PYM服务器Mon, 2 Mar 2026 05:52:37 GMT
<![CDATA[Halo插件推荐(微言-即时通讯):69元的功能全面还在更新的在线聊天?]]>https://pym.plus/archives/1772419029086

介绍

Halo本身是没有在线通讯的聊天平台的,所以 微言-即时通讯 提供了一个即使通讯的平台,让你能在这里面组建群聊发布公告之类的,价格很是亲民,只有69.9元,甚至还在不断更新,效果参考

本文是图片测评

功能

后台

它的后台大概是图片这样。

可以看到还是很丰富的,基本上可以详细的配置你需求的聊天场景。

角色的权限管理也很细致,需要什么可以勾选什么权限。

这样的好处就是你可以细致的管理聊天,比如让某人当超管,某人处理举报等等

客户界面

这不放图,大家可以注册账号去在线聊天看看。

总结

价格亲民,功能还有这么多,后台管理细致,权限分配详细,界面现代美观,是个好插件!

]]>
/archives/1772419029086PYMHalo服务器Mon, 2 Mar 2026 03:46:26 GMT
<![CDATA[游玩本站必读公告]]>https://pym.plus/archives/1772415751172

本文用于长期保存各种重要公告。

我的联系方式

邮箱: [email protected]

在线聊天: 添加好友->pymcn

在线聊天

注册账号并同意协议可以使用 在线聊天 服务,可以使用 添加群聊 搜索 所有人 加入所有人都可以加入的公共群聊。

一直掉线无法连接,请尝试清空聊天消息,可能是消息太多导致连接掉线。N

]]>
/archives/1772415751172PYM公告Mon, 2 Mar 2026 01:44:19 GMT
<![CDATA[使用Cloudflare路由你的电子邮件!]]>https://pym.plus/archives/1772361547424

前言

自己有了网站后,总觉得自己的邮箱结尾得是 xxx@自己的域名,才能把域名价值最大化,于是就有了这篇文章,实例:我的邮箱 [email protected]

操作步骤

第1步:托管域名

参考文章

第2步:邮件路由

进入到你托管好的域名,在左侧栏点击 电子邮件 -> 电子邮件路由 ,然后点击 开始使用 ,在里面填入你要收邮件的地址,例如 [email protected] 这里的 yours.com 是你自己的域名,然后目标填你 实际收邮件的邮箱 ,例如 [email protected]

创建并继续

然后点继续,会给你刚填的目标邮箱,发封验证邮件,验证完显示已验证就可以继续了

添加记录并启用

到了这个界面直接点 添加记录并启用 就完成了!你可以测试下给你的路由邮件发邮件,看看你的目标邮件能不能收到,需要注意的是回复只能用目标邮件回复。

]]>
/archives/1772361547424PYM邮箱CloudflareSun, 1 Mar 2026 10:53:48 GMT
<![CDATA[将域名托管到Cloudflare上,享受它的各种免费服务!]]>https://pym.plus/archives/1772356643196

托管域名

如果你是在Cloudflare购买的域名可以跳过这一步

如果不是则需要先将域名托管到Cloudflare上才能使用它的各种服务。

注册并登陆你的Cloudflare账户,然后打开Cloudflare主页点击添加站点

添加站点

在下面填入你要托管的域名

你的域名

选择免费套餐,也就是那个标注Free的套餐,然后DNS让它自己搜索记录,你也可以手动添加。

随后回到你购买域名的服务商的域名控制台,因为我是在新网购买的域名,所以这里用新网做演示,其他服务商操作步骤大差不差。

进入到域名管理页面,在你要托管的域名的旁边点击管理按钮,然后点击修改DNS,就会进入一个类似于这样的界面,在这里分别填入两个Cloudflare要求你填入的DNS地址,其他多余的留空不填。

Cloudflare给的DNS
修改你的DNS

然后等待DNS修改生效,通常等2个小时左右,建议先去干点别的事或者休息会,然后回来刷新页面看看有没有添加成功,如果添加的域名显示状态为活动,就是添加成功了,没有的话还需要再等等,等到站点激活成功能进入具体界面就托管成功了!

]]>
/archives/1772356643196PYM域名CloudflareSun, 1 Mar 2026 09:20:03 GMT
<![CDATA[Docker Compose 部署 Uptime Kuma,轻量强大的监控站]]>https://pym.plus/archives/1772329240013

前言

Uptime Kuma是一个用于监控网站各项服务状态,在线时间,故障时间的Docker项目。

本文需要Docker和Docker Compose才能完成安装,没有先去装,参考这篇文章

安装

第1步:创建目录

mkdir -p ~/opt/uptime-kuma
cd ~/opt/uptime-kuma

第2步:编写文件

在目录下使用

nano docker-compose.yml

会自动创建一个文件,在里面填入如下内容,默认端口为 13001 可以自行更改。

version: '3.8'
services:
 uptime-kuma:
   image: louislam/uptime-kuma:2
   container_name: uptime-kuma
   restart: unless-stopped
   volumes:
     - ./data:/app/data
   ports:
     - "13001:3001"

第3步:启动服务

目录里执行:

docker compose up -d

等待命令跑完就可以 http://你的IP:13301 访问了。

初始登陆要设置管理员账户和选择数据库之类的。

如果无法访问,请看看有没有放行防火墙,或者看看是否存在端口冲突。

效果参考

我的监控站

PYM的监控站
PYM的监控站

我的网站使用了自定义的CSS美化,需要的话下面有:

/* GLOBALS
-------------------------------------------------- */

:root {
  /* Palette colors */
  --color-gray: #7f8c8d;
  --color-red: #e74c3c;
  --color-orange: #f39c12;
  --color-teal: #1abc9c;
  --color-blue: #3498db;
  --color-green: #27ae60;
  --color-indigo: #5c6bc0;
  --color-purple: #9b59b6;
  --color-pink: #e84393;

  /* Palette RGB colors */
  --rgb-color-gray: 127, 140, 141;
  --rgb-color-red: 231, 76, 60;
  --rgb-color-orange: 243, 156, 18;
  --rgb-color-teal: 26, 188, 156;
  --rgb-color-blue: 52, 152, 219;
  --rgb-color-green: 39, 174, 96;
  --rgb-color-indigo: 92, 107, 192;
  --rgb-color-purple: 155, 89, 182;
  --rgb-color-pink: 232, 67, 147;

  /* Light theme base colors */
  --color-bg: #fbfbfc;
  --color-text-primary: #566573;
  --color-text-heading: #141414;
  --color-text-secondary: #85929e;
  --color-block-bg: #fff;
  --color-border: rgba(0, 0, 0, .1);
  --color-uptime-bar-empty-bg: #d7dbdd;
  --color-tooltip-bg: #fff;

  /* Button: Secondary */
  --color-btn-secondary-bg: transparent;
  --color-btn-secondary-hover-bg: #ebebeb;
  --color-btn-secondary-active-bg: #d7d7d7;
  --color-btn-secondary-border: rgba(0, 0, 0, .16);

  /* Sizing */
  --size-container-width: 864px;
  --size-edit-container-width: 1164px;
  --size-logo-width: 48px;
  --size-logo-height: 48px;
  --size-uptime-bar-height: 24px;

  /* Spacing */
  --spacing-4: .25rem;
  --spacing-8: .5rem;
  --spacing-12: .75rem;
  --spacing-16: 1rem;
  --spacing-20: 1.25rem;
  --spacing-24: 1.5rem;
  --spacing-32: 2rem;

  /* Border radius */
  --border-radius-200: .25rem;
  --border-radius-400: .375rem;
  --border-radius-500: .5rem;

  /* Typography */
  --font-size-50: 0.75rem;
  --font-size-100: .875rem;
  --font-size-300: 1.125rem;
  --font-size-350: 1.25rem;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-line-height-200: var(--spacing-24);

  /* Shadow */
  --shadow-filter: rgba(0, 0, 0, .05) 0px 1px 6px 0px;
}

/* DARK THEME OVERRIDES
-------------------------------------------------- */

.dark {
  /* Base colors */
  --color-bg: #141414;
  --color-text-primary: #909497;
  --color-text-heading: #f1f1f1;
  --color-text-secondary: #626567;
  --color-block-bg: #1e1e1e;
  --color-border: rgba(255, 255, 255, .07);
  --color-uptime-bar-empty-bg: #424949;
  --color-tooltip-bg: #1e1e1e;

  /* Button: Secondary */
  --color-btn-secondary-bg: transparent;
  --color-btn-secondary-hover-bg: #232323;
  --color-btn-secondary-active-bg: #1e1e1e;
  --color-btn-secondary-border: rgba(255, 255, 255, .13);
}

/* BASE STRUCTURE
-------------------------------------------------- */

body:not(:has(.edit)) {
  background-color: var(--color-bg) !important;
  color: var(--color-text-primary) !important;
}

.container {
  margin-top: 0 !important;
  padding: var(--spacing-32) var(--spacing-20) 0;
  max-width: var(--size-container-width);
}

/* Link (excluding button) */
a:not(.btn),
.dark a:not(.btn) {
  color: inherit;
  text-underline-offset: .125em;
}
a:not(.btn):hover,
.dark a:not(.btn):hover,
a:not(.btn):focus-visible {
  outline: none;
  color: var(--color-blue);
}

/* HEADER
-------------------------------------------------- */

/* Wrapper for logo and title */
.title-flex {
  margin-bottom: var(--spacing-32) !important;
}

/* Center the logo */
.logo-wrapper {
  margin: 0 auto;
}

/* Resize the logo */
.logo {
  width: var(--size-logo-width) !important;
  height: var(--size-logo-height) !important;
}

/* Remove the margin of the logo */
[dir="ltr"] .logo {
  margin-right: 0 !important;
}

/* Remove the title adjacent to the logo */
span[data-v-7d4a7f28] {
  display: none;
}

/* ADMIN BUTTONS
-------------------------------------------------- */

/* Fix vertical margin of admin buttons on mobile */
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) {
  margin-bottom: var(--spacing-32) !important;
}

.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) div {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-8);
}

.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) div button {
  margin: 0 !important;
}

/* Admin button */
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary {
  box-shadow: none;
  border: 1px solid var(--color-btn-secondary-border);
  border-radius: var(--border-radius-400);
  background-color: var(--color-btn-secondary-bg);
  padding: var(--spacing-4) var(--spacing-12);
  color: var(--color-text-heading);
  font-weight: var(--font-weight-medium);
  font-size: var(--font-size-100);
  line-height: var(--font-line-height-200);
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary:hover,
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary:focus-visible {
  background-color: var(--color-btn-secondary-hover-bg);
}
.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary:active {
  box-shadow: none;
  background-color: var(--color-btn-secondary-active-bg);
}

.mb-4[data-v-a2098280]:has([data-testid="edit-button"]) .btn-primary svg {
  display: none;
}

/* INCIDENT BLOCK
-------------------------------------------------- */

.incident[data-v-a2098280] {
  margin-bottom: var(--spacing-16) !important;
  box-shadow: none;
  border-radius: var(--border-radius-500);
  padding: var(--spacing-20) !important;
  color: var(--color-text-heading) !important;
}
.incident[data-v-a2098280].bg-info {
  border: 1px solid rgba(var(--rgb-color-teal), .23);
  background-color: rgba(var(--rgb-color-teal), .08) !important;
}
.incident[data-v-a2098280].bg-warning {
  border: 1px solid rgba(var(--rgb-color-orange), .23);
  background-color: rgba(var(--rgb-color-orange), .08) !important;
}
.incident[data-v-a2098280].bg-danger {
  border: 1px solid rgba(var(--rgb-color-red), .23);
  background-color: rgba(var(--rgb-color-red), .08) !important;
}
.incident[data-v-a2098280].bg-primary {
  border: 1px solid rgba(var(--rgb-color-green), .23);
  background-color: rgba(var(--rgb-color-green), .08) !important;
}
.incident[data-v-a2098280].bg-light {
  box-shadow: var(--shadow-filter);
  border: 1px solid var(--color-border);
  background-color: var(--color-block-bg) !important;
}
.incident[data-v-a2098280].bg-dark {
  box-shadow: var(--shadow-filter);
  border: 1px solid var(--color-border);
  background-color: var(--color-bg) !important;
}

.incident[data-v-a2098280] h4 {
  font-size: var(--font-size-300);
}

.incident[data-v-a2098280] div {
  color: var(--color-text-primary);
}

.date.mt-3 {
  border-top: 1px solid var(--color-border);
  padding-top: var(--spacing-20);
}

/* MAIN STATUS BLOCK
-------------------------------------------------- */

.overall-status[data-v-a2098280] {
  margin-bottom: var(--spacing-16) !important;
  box-shadow: none;
  border-radius: var(--border-radius-500);
  padding: var(--spacing-20) !important;
  color: var(--color-text-heading);
  font-weight: var(--font-weight-semibold);
  font-size: var(--font-size-350);
  line-height: var(--font-line-height-200);
}
.overall-status[data-v-a2098280]:has(.ok) {
  border: 1px solid rgba(var(--rgb-color-green), .23);
  background-color: rgba(var(--rgb-color-green), .08);
}
.overall-status[data-v-a2098280]:has(.warning) {
  border: 1px solid rgba(var(--rgb-color-orange), .23);
  background-color: rgba(var(--rgb-color-orange), .08);
}
.overall-status[data-v-a2098280]:has(.danger) {
  border: 1px solid rgba(var(--rgb-color-red), .23);
  background-color: rgba(var(--rgb-color-red), .08);
}
.overall-status[data-v-a2098280]:has(.status-maintenance) {
  border: 1px solid rgba(var(--rgb-color-blue), .23);
  background-color: rgba(var(--rgb-color-blue), .08);
}

.overall-status[data-v-a2098280] div {
  display: flex;
  align-items: center;
  gap: var(--spacing-20);
}

.overall-status[data-v-a2098280] svg {
  margin-right: 0 !important;
  width: 1.5em;
  height: 1.5em;
}
.overall-status[data-v-a2098280]:has(.ok) svg {
  color: var(--color-green);
}
.overall-status[data-v-a2098280]:has(.warning) svg {
  color: var(--color-orange);
}
.overall-status[data-v-a2098280]:has(.danger) svg {
  color: var(--color-red);
}
.overall-status[data-v-a2098280]:has(.status-maintenance) svg {
  color: var(--color-blue);
}

/* MAINTENANCE BLOCK
-------------------------------------------------- */

.shadow-box.bg-maintenance {
  margin: var(--spacing-16) 0 !important;
  box-shadow: none;
  border: 1px solid rgba(var(--rgb-color-blue), .23);
  border-radius: var(--border-radius-500);
  background-color: rgba(var(--rgb-color-blue), .08) !important;
  padding: var(--spacing-20) !important;
  color: var(--color-text-heading) !important;
}

.shadow-box.bg-maintenance .alert-heading {
  color: var(--color-text-heading);
  font-weight: var(--font-weight-semibold);
  font-size: var(--font-size-300);
}

.shadow-box.bg-maintenance .content {
  color: var(--color-text-primary);
}

.timeslot {
  display: flex;
  margin: 0 !important;
  border-top: 1px solid var(--color-border);
  border-radius: 0;
  background-color: transparent !important;
  padding: var(--spacing-20) 0 0;
  color: var(--color-text-primary) !important;
  font-size: var(--font-size-50);
}

/* USER MARKDOWN ELEMENTS
-------------------------------------------------- */

.alert-heading.p-2 {
  margin-bottom: var(--spacing-32);
  padding: 0 !important;
}

.alert-heading.p-2 p {
  margin: 0;
}

/* PAGE DESCRIPTION
-------------------------------------------------- */

div > .alert-heading.p-2:has(*) {
  margin-top: var(--spacing-32);
  box-shadow: var(--shadow-filter);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-500);
  background-color: var(--color-block-bg);
  padding: var(--spacing-20) !important;
}

/* MONITOR GROUP
-------------------------------------------------- */

div[data-v-026459e0]:has(> .group-title) {
  margin-bottom: var(--spacing-32) !important;
}

/* Monitor group title */
.group-title {
  display: flex;
  align-items: center;
  margin-bottom: var(--spacing-16);
  color: var(--color-text-heading);
  font-weight: var(--font-weight-semibold);
  font-size: var(--font-size-350);
}

/* Monitor elements in the group */
.shadow-box.monitor-list {
  margin-top: 0 !important;
  box-shadow: none;
  background-color: transparent !important;
  padding: 0;
}

.shadow-box.monitor-list > .monitor-list {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--spacing-16);
}
/* Enable 2 columns on wider screens; comment out to disable */
@media (min-width: 532px) {
  .shadow-box.monitor-list > .monitor-list {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* MONITOR ITEM
-------------------------------------------------- */

.monitor-list .item {
  box-shadow: var(--shadow-filter);
  border: 1px solid var(--color-border);
  border-radius: var(--border-radius-500);
  background-color: var(--color-block-bg);
  padding: var(--spacing-16) var(--spacing-20) !important;
}
.monitor-list .item:hover {
  background-color: var(--color-block-bg) !important;
}

.monitor-list .item > .row > div {
  display: flex;
  flex-direction: column;
  width: 100%;
}

/* Monitor name and uptime percentage container */
.info {
  display: flex;
  align-items: center;
  order: 2;
  margin-bottom: var(--spacing-8);
}

/* Monitor name */
.item-name[data-v-026459e0] {
  padding-left: 0;
  overflow: hidden;
  color: var(--color-text-heading);
  font-weight: var(--font-weight-semibold);
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Uptime percentage */
.badge {
  all: unset;
  order: 1;
  margin-left: auto;
  background-color: transparent !important;
  color: var(--color-text-primary) !important;
}

/* Monitor tags wrapper */
.extra-info[data-v-026459e0] {
  flex-wrap: wrap;
  order: 1;
  gap: var(--spacing-8);
  margin-top: var(--spacing-4);
}
.extra-info:not(:has(div[data-v-12c40cbd])) {
  margin-top: 0;
  margin-bottom: 0;
}
.extra-info[data-v-026459e0] div {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-8);
  min-width: 0;
}

/* Monitor tags */
.tag-wrapper {
  align-items: center;
  padding-top: 2px !important;
  padding-bottom: 2px !important;
}
.tag-wrapper[style*="rgb(75, 85, 99)"] {
  border: 1px solid rgba(var(--rgb-color-gray), .23);
  background-color: rgba(var(--rgb-color-gray), .08) !important;
  color: var(--color-gray) !important;
}
.tag-wrapper[style*="rgb(220, 38, 38)"] {
  border: 1px solid rgba(var(--rgb-color-red), .23);
  background-color: rgba(var(--rgb-color-red), .08) !important;
  color: var(--color-red) !important;
}
.tag-wrapper[style*="rgb(217, 119, 6)"] {
  border: 1px solid rgba(var(--rgb-color-orange), .23);
  background-color: rgba(var(--rgb-color-orange), .08) !important;
  color: var(--color-orange) !important;
}
.tag-wrapper[style*="rgb(5, 150, 105)"] {
  border: 1px solid rgba(var(--rgb-color-green), .23);
  background-color: rgba(var(--rgb-color-green), .08) !important;
  color: var(--color-green) !important;
}
.tag-wrapper[style*="rgb(37, 99, 235)"] {
  border: 1px solid rgba(var(--rgb-color-blue), .23);
  background-color: rgba(var(--rgb-color-blue), .08) !important;
  color: var(--color-blue) !important;
}
.tag-wrapper[style*="rgb(79, 70, 229)"] {
  border: 1px solid rgba(var(--rgb-color-indigo), .23);
  background-color: rgba(var(--rgb-color-indigo), .08) !important;
  color: var(--color-indigo) !important;
}
.tag-wrapper[style*="rgb(124, 58, 237)"] {
  border: 1px solid rgba(var(--rgb-color-purple), .23);
  background-color: rgba(var(--rgb-color-purple), .08) !important;
  color: var(--color-purple) !important;
}
.tag-wrapper[style*="rgb(219, 39, 119)"] {
  border: 1px solid rgba(var(--rgb-color-pink), .23);
  background-color: rgba(var(--rgb-color-pink), .08) !important;
  color: var(--color-pink) !important;
}

/* Wrapper for the uptime bars home and uptime time */
.wrap {
  padding: 0 !important;
}

/* Uptime bars home */
.hp-bar-big {
  display: flex;
  margin-bottom: 6px;
  padding: 0;
}
.mobile .hp-bar-big {
  padding-bottom: 0;
}

/* Uptime bar in the uptime bars home */
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3] {
  border-radius: 0;
  background-color: var(--color-green);
  width: 100% !important;
  height: var(--size-uptime-bar-height) !important;
}
.hp-bar-big .beat-hover-area[data-v-ce0d40a3] {
  flex: 1;
  padding: 0 1px 0 0 !important;
}
.hp-bar-big .beat-hover-area[data-v-ce0d40a3]:not(.empty):hover,
.hp-bar-big .beat-hover-area[data-v-ce0d40a3]:not(.empty):focus-visible {
  transform: none;
  opacity: .7;
  outline: none;
}
.hp-bar-big .beat-hover-area:first-of-type .beat[data-v-ce0d40a3] {
  border-top-left-radius: var(--border-radius-200);
  border-bottom-left-radius: var(--border-radius-200);
}
.hp-bar-big .beat-hover-area:last-of-type .beat[data-v-ce0d40a3] {
  margin: 0 !important;
  border-top-right-radius: var(--border-radius-200);
  border-bottom-right-radius: var(--border-radius-200);
  padding: 0 !important;
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].empty {
  background-color: var(--color-uptime-bar-empty-bg) !important;
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].down {
  background-color: var(--color-red);
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].pending {
  background-color: var(--color-orange);
}
.hp-bar-big .beat-hover-area .beat[data-v-ce0d40a3].maintenance {
  background-color: var(--color-blue);
}

/* Uptime time (below uptime bars) */
.word[data-v-ce0d40a3] {
  color: var(--color-text-primary);
}

/* FOOTER
-------------------------------------------------- */

/* User markdown, Uptime Kuma branding, refresh timer */
footer[data-v-a2098280] {
  margin: var(--spacing-32) 0 !important;
  color: var(--color-text-secondary);
}

/* Extra spacing if the user footer has anything */
footer .alert-heading.p-2:has(*) {
  margin-bottom: var(--spacing-16) !important;
}

/* Refresh timer */
/* Remove or comment "display: none" to restore visibility */
.refresh-info[data-v-a2098280] {
  display: none;
  opacity: 1;
  margin-bottom: 0 !important;
}

/* EDIT WINDOW
-------------------------------------------------- */

.container:has(.edit) {
  max-width: var(--size-edit-container-width);
}

/* Input field for the monitor group name */
.edit span[data-v-7d4a7f28][data-v-026459e0] {
  padding: var(--spacing-4) var(--spacing-8);
}

/* Input field for page description and footer */
.edit h4[data-v-7d4a7f28][data-v-a2098280][contenteditable="true"],
.edit div[data-v-7d4a7f28][data-v-a2098280] {
  padding: var(--spacing-8) var(--spacing-12) !important;
  color: var(--color-text-heading);
}

/* OVERLAYS
-------------------------------------------------- */

/* Uptime bar hover tooltip */
.tooltip-wrapper .tooltip-content[data-v-abd90d66] {
  box-shadow: var(--shadow-filter);
  border-color: var(--color-border);
  background-color: var(--color-tooltip-bg) !important;
  text-align: start;
}
.tooltip-wrapper .tooltip-content[data-v-abd90d66]::before {
  display: none;
}

.tooltip-wrapper .tooltip-content .tooltip-status[data-v-abd90d66] {
  font-size: var(--font-size-100);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-up[data-v-abd90d66] {
  color: var(--color-green);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-pending[data-v-abd90d66] {
  color: var(--color-orange);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-down[data-v-abd90d66] {
  color: var(--color-red);
}
.tooltip-wrapper .tooltip-content .tooltip-status.status-maintenance[data-v-abd90d66] {
  color: var(--color-blue);
}

.tooltip-wrapper .tooltip-content .tooltip-time[data-v-abd90d66] {
  margin-bottom: 0;
  color: var(--color-text-primary);
  font-size: var(--font-size-50);
}

.tooltip-wrapper .tooltip-arrow[data-v-abd90d66] {
  display: none;
}

]]>
/archives/1772329240013PYMlinuxDocker服务器Sun, 1 Mar 2026 01:55:11 GMT
<![CDATA[Ubuntu安装Docker和Docker-compose并配置国内镜像]]>https://pym.plus/archives/1772243427656

一、安装Docker

sudo apt update # 更新软件包索引
sudo apt install -y docker.io # 安装Docker
docker -v # 验证Docker是否安装成功
# 如果成功,应输出类似的 Docker version 24.0.7, build afdd53b
sudo systemctl start docker # 启动Docker服务
sudo systemctl status docker #查看Docker运行状态
# 输出大概应为 Active: active (running)
sudo systemctl enable docker # 设置Docker开机自启动
sudo systemctl is-enabled docker # 验证上面设置成功没
# 输出应为 enabled
# 执行后需要重启终端才会生效
sudo usermod -aG docker $USER # 配置当前用户不用sudo也能用Docker

二、安装Docker-compose

# 下载最新的Docker-compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose # 给执行权限
docker-compose --version # 验证安装是否成功
# 示例输出:Docker Compose version v2.27.0

三、配置国内镜像源

sudo nano /etc/docker/daemon.json # 打开配置文件

在文件里输入以下内容:

{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com",
        "https://cjie.eu.org"
    ]
}

保存并退出。

# 重载Docker并重启服务
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker

到这里就恭喜你安装成功了!

]]>
/archives/1772243427656PYMlinuxDocker服务器Sat, 28 Feb 2026 02:01:33 GMT
<![CDATA[Meilisearch太吃内存了,吐槽]]>https://pym.plus/archives/1772161536671

不多说了,放图,其实我有些无语。。。

虽然说,内存是根据实际可用内存调整的,但是这睡眠状态的内存是不是也有些太多了。。。

问题解决了,配置增加

deploy:
      resources:
        limits:
          # 内存限制为 2.5GB
          memory: 2.5G

可以有效限制内存使用量

2026-3-1:我限制成2.5G后,今天直接异常了,无法启动,报错原因是内存不足。。。

]]>
/archives/1772161536671PYM吐槽Fri, 27 Feb 2026 03:10:04 GMT
<![CDATA[使用Docker-compose搭建TailChat即时通讯平台]]>https://pym.plus/archives/1772102645819

前言

TailChat是一个非常好用的开源即时通讯平台,在本文发布前,已经在Github斩获了3.6K Stars,支持多种方式部署,比较简单方便的还是Docker-compose的方式部署,本文就介绍了用Docker-compose搭建TailChat的详细教程和一些注意事项。

安装

第一步:创建安装目录

你得有Docker和Docker-compose才能完成安装,没有可以先去装一下,参考这篇文章

# 创建一个目录,用于安装TailChat
mkdir -p /opt/tailchat
# 切换到TailChat的安装目录
cd /opt/tailchat

第二步:编辑文件

# 编辑Docker容器编排文件
vim docker-compose.yml

docker-compose.yml中填入以下内容:

version: "3.3"

services:
  # 应用网关
  service-gateway:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/gateway
      PORT: 3000
    depends_on:
      - mongo
      - redis
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
      - "traefik.http.services.api-gw.loadbalancer.server.port=3000"
    networks:
      - internal

  # 用户服务
  service-user:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/user/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # 群组服务
  service-group:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/group/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # 聊天服务
  service-chat:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/chat/*
    depends_on:
      - mongo
      - redis
    networks:
      - internal

  # 文件服务 / 插件注册中心 / 配置服务
  service-file:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: core/file,core/plugin/registry,core/config
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  service-openapi:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICES: openapi/app,openapi/oidc/oidc
      OPENAPI_PORT: 3003
      OPENAPI_UNDER_PROXY: "true"
    depends_on:
      - mongo
      - redis
      - minio
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"
      - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
    networks:
      - internal

  # 插件服务(所有插件)
  service-all-plugins:
    build:
      context: .
    image: tailchat
    restart: unless-stopped
    env_file: docker-compose.env
    environment:
      SERVICEDIR: plugins
    depends_on:
      - mongo
      - redis
      - minio
    networks:
      - internal

  # 数据库
  mongo:
    image: mongo:4
    restart: on-failure
    volumes:
      - ./data:/data/db
    networks:
      - internal

  # 数据缓存与中转通讯
  redis:
    image: redis:alpine
    restart: on-failure
    networks:
      - internal

  # 存储服务
  minio:
    image: minio/minio
    restart: on-failure
    networks:
      - internal
    environment:
      MINIO_ROOT_USER: tailchat
      MINIO_ROOT_PASSWORD: P@ssw0rd123456
    volumes:
      - ./storage:/data
    command: minio server /data --console-address ":9001"

  # 路由转发
  traefik:
    image: traefik:v2.1
    restart: unless-stopped
    command:
      - "--api.insecure=true" # Don't do that in production!
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:80"
      - "--entryPoints.web.forwardedHeaders.insecure" # Not good
    ports:
      - 8080:80            			 # 8080 可以改成自己需要的端口
      - 127.0.0.1:11001:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - internal
      - default

networks:
  internal:
    name: tailchat-internal

编辑环境变量文件

vim docker-compose.env

docker-compose.env里填入如下内容:

LOGGER=true
LOGLEVEL=info
SERVICEDIR=services

TRANSPORTER=redis://redis:6379

CACHER=redis://redis:6379

REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=P@ssw0rd123456  # 改成自己的密钥,重要!一定要改!!!

# file
API_URL=http://192.168.80.8  # 改成自己的网站实际访问地址或域名

# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=P@ssw0rd123456   # 改成自己的密码,重要!一定要改!!!

# SMTP
# 如果需要邮件功能可以在这里填写,但我建议搭好后去界面里填
SMTP_SENDER=    # 发件人,就是邮箱
SMTP_URI=       # 发件URI,比如:smtp.qq.com

# metrics
PROMETHEUS=1

第三步:拉取镜像

docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # 与配置文件填的一致,没有改就默认tailchat

第五步:创建服务,部署!

在之前的安装目录里执行:

docker-compose up -d

等待跑完,就安装完成了

默认访问地址为 http://服务器IP地址:8080

搭建完成后的样子
搭建完成后的样子

]]>
/archives/1772102645819PYMDocker服务器Thu, 26 Feb 2026 11:12:09 GMT
<![CDATA[忘了冰点还原的密码,下了个密码查看器?别急,可能是木马!]]>https://pym.plus/archives/wang-liao-bing-dian-huan-yuan-de-mi-ma-xia-liao-ge-mi-ma-cha-kan-qi-bie-ji-ke-neng-shi-mu-ma

起因

自己整的冰点还原的密码忘了,在网上一通搜索后找到了,在其发表的官网下载了MeltdownDFC_V1.7

其网址如下!我得声明!仅供技术研究的大佬去看看,病毒风险,谨慎啊!

https://lifeinhex.com/updated-meltdown-and-enigmavb-unpacker/

据说可以查看冰点还原的密码,下载下来后,运行,确实能看冰点还原5.x-8.31版本的密码,但是!随后Windows安全中心报毒,分类为木马,显示严重且无法处理,到了这里我就将文件提交至了微步云沙箱进行检测。

检测结果

检测结果基本可以确定,MeltdownDFC这个冰点密码查看器的文件有类似于木马的行为。

如图。

毕竟,这样一个看密码的软件,只是密码查看的功能,不应该有ICMP流量和获取按键信息这样的行为,更不会引起杀软的报毒!

处理方式

如果已经运行了的话,建议找可疑进程,比如查查系统日志,看看有没有最近添加的启动项和系统服务,我本人是直接电脑还原了,所以说网上找软件工具,还是得小心啊!

]]>
/archives/wang-liao-bing-dian-huan-yuan-de-mi-ma-xia-liao-ge-mi-ma-cha-kan-qi-bie-ji-ke-neng-shi-mu-maPYM技术记录文件分析Wed, 25 Feb 2026 12:50:23 GMT
<![CDATA[Halo自带的搜索引擎太难用,那就改用Meilisearch!]]>https://pym.plus/archives/halozi-dai-de-sou-suo-yin-qing-tai-nan-yong-na-jiu-gai-yong-meilisearch-sou-suo-yin-qing

前言

Halo自带的搜索引擎搜文章必须全字匹配,有时候根本搜不到,非常不好用,我在应用商店里逛了逛,发现了 Meilisearch 搜索引擎 这个神奇的插件,那就来用一用!

安装

本文需要先安装Docker,没有安装参考此文

第一步:安装插件

在应用商店里先安装插件,并点开到插件的基本设置,方便后续直接设置。

第二步:安装Meilisearch

你得有Docker Docker-compose 才能安装,没有可以先去安装。

有了的话,新建任意一个文件夹,新建一YAML 文件,里面填入如下内容:

services:
  meilisearch:
    image: getmeili/meilisearch:v1.16
    restart: unless-stopped
    ports:
      - "7700:7700"
    environment:
      - MEILI_ENV=production
      - MEILI_MASTER_KEY=你的KEY
    volumes:
      - meilisearch_data:/meili_data

volumes:
  meilisearch_data:
    driver: local

注意!MEILI_MASTER_KEY 后面等号的内容需要你自己填写,后续在插件里调用会用到,端口默认为 7700 有需求可以自行更改。

第三步:开放服务

防火墙开放对应的端口,我的是7700,然后在插件里的 基本设置->Meilisearch 服务地址 里填入 你的服务器IP:对应的端口

这里需要注意,已经安装了 Halo 的小伙伴不能直接 localhost 等方式调用,因为容器不在同一网络,只能公网的方式访问!

再在Meilisearch 主密钥里填入先前安装时你的密钥,点击保存开启插件就快完成了!

第四步:设置搜索引擎

进入到你的Halo后台的这个页面 /console/plugins/extension-point-settings?extension-point-definition-name=search-engine 在里面对Meilisearch点一下使用,然后就完成了

第五步:出现无法搜索

如果有无法搜索的情况再尝试此步,进入你的后台的这个页面 /console/plugins/meilisearch?tab=overview 点下 重建索引 等待完成应该就可以搜索了!

]]>
/archives/halozi-dai-de-sou-suo-yin-qing-tai-nan-yong-na-jiu-gai-yong-meilisearch-sou-suo-yin-qingPYMHaloseoDocker服务器Mon, 23 Feb 2026 04:57:08 GMT
<![CDATA[为你的Halo添加外链跳转提示,预防搜索引擎降低SEO!]]>https://pym.plus/archives/wei-ni-de-halotian-jia-wai-lian-tiao-zhuan-ti-shi-yu-fang-sou-suo-yin-qing-jiang-di-seo

前言

当你拥有了一个Halo博客,添加一些站外链接是不可能避免的,有时候如果链接导向的内容发生变化,比如域名更换,内容变化等,都有可能使搜索引擎降低你的SEO,甚至是直接取消你的站点的收录,多年来的辛苦就化为灰烬,这时候站外链接跳转提示的插件就显得很重要了。

哔哔几句:你也可以在写文章时添加链接时勾选搜索引擎忽略链接关系,但是每次都得选,比较麻烦。

安装

第一步:下载

这里下载这个插件,建议直接下最新的正式版,本文介绍的是1.1.0版本(发布时的最新正式版)

第二步:安装并设置

在插件里,选择本地上传完成安装,点击进入插件,根据你自己的需求,可以进行一些对应的设置

第三步:测试

建议随便试一试看看有没有起效果,如果有了的话就恭喜大功告成啦,现在你的博客可以避免外链的变化影响搜索引擎降低你的SEO啦!

]]>
/archives/wei-ni-de-halotian-jia-wai-lian-tiao-zhuan-ti-shi-yu-fang-sou-suo-yin-qing-jiang-di-seoPYMHaloseoMon, 23 Feb 2026 03:51:03 GMT
<![CDATA[一个网站,解决Github下载慢的问题!]]>https://pym.plus/archives/yi-ge-wang-zhan-jie-jue-githubxia-zai-man-de-wen-ti

前言

Github在国内并不稳定,有时候下载会非常缓慢,而这个网站能完美解决解决这个问题!

使用方法

打开这个网站,里面粘入你要下载的github的文件的链接,然后点击重新检测延迟,会自动帮你选择最优的节点,再点击开始下载就可以了,速度一般很快,同理也可以用来加速 Git Clone Wget Curl 等。

GithubProxy

]]>
/archives/yi-ge-wang-zhan-jie-jue-githubxia-zai-man-de-wen-tiPYMGithubSat, 21 Feb 2026 09:28:17 GMT
<![CDATA[ubuntu换源为清华源,解决软件下载缓慢的问题!]]>https://pym.plus/archives/ubuntuhuan-yuan-wei-qing-hua-yuan-jie-jue-ruan-jian-xia-zai-huan-man-de-wen-ti

前言

国内的小伙伴们,在使用ubuntu的时候,有没有感觉安装软件进度条跑得很慢?如果有那大概率就是软件源的问题,ubuntu默认的软件源在国内下载比较缓慢,今天教你简单换源,用清华源快速下载软件!

注意:ubuntu24.04参考 ubuntu24.04特殊步骤 见后文!!!

换源

第一步:备份原有源配置文件

为了避免后续一些稀缺古怪的操作,导致文件损坏,所以我们先备份一下,后续如果需要换回也比较方便

sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

第二步:编辑源配置文件

vim 或者 nano 或者 vi 等文本编辑器,打开 /etc/apt/sources.list 文件

sudo vim /etc/apt/sources.list

第三步:换清华源

清空原文件所有内容,粘贴以下内容:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu focal-security main restricted universe multiverse

这里需要将 focal 改为你的ubuntu版本代号,可以用这条命令查看

lsb_release -c

比如ubuntu22.04的代号为 jammy ,就这么填写:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

第四步:更新软件包列表

保存并退出编辑器,执行下面2条命令:

sudo apt update
sudo apt upgrade

ubuntu24.04特殊步骤

因为ubuntu24.04源配置文件改为了 DEB822 格式,步骤也变成如下步骤:

备份原文件:

sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

编辑文件:

sudo vim /etc/apt/sources.list.d/ubuntu.sources

填入如下内容:

Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 安全更新建议保留官方源
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

保存并退出编辑器,更新软件包列表:

sudo apt update
sudo apt upgrade -y

恭喜你到这里就换源完成了!

]]>
/archives/ubuntuhuan-yuan-wei-qing-hua-yuan-jie-jue-ruan-jian-xia-zai-huan-man-de-wen-tiPYMlinux服务器Fri, 20 Feb 2026 00:21:03 GMT
<![CDATA[使用Docker安装MCSM面板,搭建各种游戏服务器!]]>https://pym.plus/archives/shi-yong-dockeran-zhuang-mcsmmian-ban-da-jian-shu-yu-ni-zi-ji-de-mcfu-wu-qi

前言

MCSManager 是一款开源,分布式,支持 MinecraftSteam 游戏服务器 的控制面板。

可以轻松搭建并管理多个服务器,今天我们就来学学这款好用的面板如何安装!

本文介绍如何使用 MCSM 搭建 Minecraft 服务器,其他服务器可以参考并在 MCSM 里安装。

安装步骤

第一步:安装Docker

参考本站的这篇文章

第二步:安装 MCSM 面板

这里使用 Docker-compose 完成安装。

注意!所有的 <CHANGE_ME_TO_INSTALL_PATH> 需要替换为你实际数据存储的位置,该位置需要被持久化,web 和 daemon 的安装位置可以不同。

sudo su
mkdir <CHANGE_ME_TO_INSTALL_PATH> 
cd <CHANGE_ME_TO_INSTALL_PATH>
nano mcsm.yml #也可以使用vim

在mcsm.yml填入如下内容:

# docker-compose.yml
services:
  web:
    image: githubyumao/mcsmanager-web:latest
    ports:
      - "23333:23333"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - <CHANGE_ME_TO_INSTALL_PATH>/web/data:/opt/mcsmanager/web/data
      - <CHANGE_ME_TO_INSTALL_PATH>/web/logs:/opt/mcsmanager/web/logs

  daemon:
    image: githubyumao/mcsmanager-daemon:latest
    restart: unless-stopped
    ports:
      - "24444:24444"
    environment:
      - MCSM_DOCKER_WORKSPACE_PATH=<CHANGE_ME_TO_INSTALL_PATH>/daemon/data/InstanceData
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - <CHANGE_ME_TO_INSTALL_PATH>/daemon/data:/opt/mcsmanager/daemon/data
      - <CHANGE_ME_TO_INSTALL_PATH>/daemon/logs:/opt/mcsmanager/daemon/logs
      - /var/run/docker.sock:/var/run/docker.sock

默认端口是2333324444 可以更改为你需要的端口。

一切就绪后执行这条命令:

docker compose pull && docker compose up -d

等待安装完成即可。

第三步:访问 MCSM 面板

在你的云服务商那里开放对应端口的防火墙,如果你安装了如1Panel,宝塔,GMSSH等面板的话,还需要在面板开放对应的端口。

然后在浏览器输入你的服务器IP:23333(如果更改了的话使用你更改的端口) 就可以访问面板了,初次打开会要求你设置管理员账号。

第四步:添加节点

点击顶部导航栏 节点,点击右侧的 新增节点,填写你的服务器公网 IP,密钥和默认的 24444 端口(如果更改了的话使用你更改的端口)。

总结

到这里就完成 MCSM 面板的搭建,你可以通过直观的界面安装各种游戏服务器,如Minecraft秘密实验室等等,快去试试吧。

]]>
/archives/shi-yong-dockeran-zhuang-mcsmmian-ban-da-jian-shu-yu-ni-zi-ji-de-mcfu-wu-qiPYMMinecraftDocker服务器Wed, 18 Feb 2026 04:11:05 GMT
<![CDATA[因为学校作业,所以我寒假做了一个Scratch版的I wanna]]>https://pym.plus/archives/yin-wei-xue-xiao-zuo-ye-suo-yi-wo-han-jia-zuo-liao-yi-ge-scratchban-de-i-wanna

通关的发截图或者全程视频我瞅瞅,难度较难,我打了412次过关😂

操作方式如下:

操作方式

点我下载游戏

可以全屏👇

]]>
/archives/yin-wei-xue-xiao-zuo-ye-suo-yi-wo-han-jia-zuo-liao-yi-ge-scratchban-de-i-wannaPYMhtmliwannascratchWed, 18 Feb 2026 03:44:00 GMT