Xuan's blog - 配置
type: channel
link: https://blog.ybyq.wang/tag/%E9%85%8D%E7%BD%AE/
items: Umami3.0版本升级教程：从 v2 平滑迁移
items: 解决AI摘要不显示的三种方案 -AIsummary插件
items: 软件工程实践二：Spring Boot 知识回顾
items: 在飞牛 NAS 底层安装宝塔面板并部署网站
items: 解决宝塔面板SSL报错 - AttributeError: module 'acme_v2' has no attribute 'acme_v2'
items: 前端开发中嵌入B站视频播放器：解决high_quality=1 失效的问题
items: IntelliJ IDEA和PyCharm全家桶最新版永久破解教程：无需重新安装
items: 使用Gradle打包springboot项目为JAR包教程
items: gradle全局安装及本地仓库配置教程
items: gitee上的项目克隆到IDEA最新版教程

Umami3.0版本升级教程：从 v2 平滑迁移
type: item
date: 2025-11-08T16:58:00+08:00
description: 前言这是一份关于如何将已部署的 Umami2.0 统计系统更新到 3.0 版本的详细教程。如果你是按照我之前的 [post cid="381" /]部署的，那么这篇教程将帮助你平滑升级到最新版本。更新前的准备1. 备份数据库在进行任何更新操作之前，强烈建议先备份数据库数据，以防万一出现问题可以快速回滚。# 进入到 Umami 目录 cd /www/wwwroot/visitors.ybyq.wang/umami # 备份数据库数据 docker-compose exec db pg_dump -U umami umami > umami_backup_$(date +%Y%m%d_%H%M%S).sql备份文件会保存在当前目录下，文件名包含时间戳，方便识别。2. 记录当前版本查看当前运行的 Umami 版本，以便后续确认更新是否成功：docker-compose exec umami cat /app/package.json | grep version更新步骤1. 进入项目目录cd /www/wwwroot/visitors.ybyq.wang/umami2. 停止当前运行的容器docker-compose down这个命令会停止并删除容器，但不会删除数据卷，你的统计数据是安全的。3. 拉取最新代码我已经同步了官方最新版本到 Gitee仓库，现在直接拉取更新：git pull origin master如果提示有本地修改冲突，可以先备份 docker-compose.yml 文件：cp docker-compose.yml docker-compose.yml.backup然后强制拉取：git fetch --all git reset --hard origin/master之后再恢复你的配置文件：cp docker-compose.yml.backup docker-compose.yml4. 检查配置文件Umami3.0 可能会有一些配置变化，检查 docker-compose.yml 文件是否需要更新。主要关注以下配置：[collapse status="false" title="展开查看 docker-compose.yml 配置示例"]version: '3' services: umami: image: ghcr.io/umami-software/umami:postgresql-3.0.0 ports: - "3000:3000" environment: DATABASE_URL: postgresql://umami:你的密码@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: 你的随机字符串 depends_on: db: condition: service_healthy restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] interval: 5s timeout: 5s retries: 5 db: image: postgres:15-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: 你的密码 volumes: - umami-db-data:/var/lib/postgresql/data restart: always healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 5 volumes: umami-db-data:[/collapse]确保你的数据库密码等配置信息保持一致。5. 拉取最新镜像docker-compose pull这个命令会从 Docker Hub 拉取最新的 Umami 镜像，可能需要很长时间，请耐心等待。6. 重新启动服务docker-compose up -d容器会自动完成数据库迁移和服务启动。7. 查看容器状态docker-compose ps确保所有容器都处于 Up 状态。8. 查看日志如果容器启动失败，可以查看日志排查问题：# 查看 Umami 容器日志 docker-compose logs -f umami # 查看数据库容器日志 docker-compose logs -f db按 Ctrl + C 退出日志查看。验证更新1. 检查版本号访问你的 Umami 网站，登录后…

解决AI摘要不显示的三种方案 -AIsummary插件
type: item
date: 2025-09-21T15:18:00+08:00
description: 前言在自定义主题的某天，AI摘要突然不显示了，前前后后改了好几次，通过重启插件无数次、移除全部自定义js和css、关闭pjax、一一恢复改过的页面代码，均未果。这次是通过本文第二个方法改好的，所以至今不知道突然不显示的原因。下面是解决AISummary插件的摘要块不显示的三种方案，前提是摘要内容已正确生成且保存。针对handsome主题，其他主题可借鉴思路。技术环境博客系统: Typecho 1.2.1主题: Handsome 10.1.0插件: AISummary v1.1.0解决方案方案一：修改插件核心逻辑直接修改 Plugin.php 中的 customContent 方法，将摘要插入到内容末尾：// 修改前 $content = $summaryString . $content; // 修改后 $content = $content . $summaryString;方案二：主题模板直接集成（推荐）在主题模板文件中直接添加摘要显示逻辑，绕过插件的 customContent 方法。实施步骤在插件设置中将"正文摘要显示样式"设置为"默认"或者"自定义"，推荐设置为自定义。在主题模板中添加摘要显示代码在 usr/themes/handsome/post.php 第74行的 下方添加：[hide] <?php // 添加AI摘要显示 $options = Typecho_Widget::widget('Widget_Options')->plugin('AISummary'); if ($options->summaryStyle !== '0') { $summaryField = $options->field ?: 'summary'; $db = Typecho_Db::get(); $row = $db->fetchRow($db->select('str_value')->from('table.fields')->where('cid = ?', $this->cid)->where('name = ?', $summaryField)); if ($row && !empty($row['str_value'])) { $pureSummary = str_replace("{{text}}", $row['str_value'], $options->prefix); // 根据插件配置选择样式 if ($options->summaryStyle === '1') { // 使用默认引用样式 $summaryString = ' ' . $pureSummary . ' '; } else if ($options->summaryStyle === '2') { // 使用自定义样式，只添加class，让CSS控制样式 $summaryString = ' ' . $pureSummary . ' '; } else { // 默认样式 $summaryString = ' ' . $pureSummary . ' '; } echo $summaryString; } } ?>[/hide]这种方式不依赖于Typecho的钩子系统，直接在主题模板中添加摘要显示代码。方案三：针对开启了前台Vditor解析方式第一种：1、打开文件：usr/themes/handsome/libs/content/PostContent.php2、找到第382行（大约在第380-385行之间）3、将$content = $obj->text;改为$content = $obj->content;4、保存文件$obj->text是vditor原始的Markdown文本，没有经过任何插件处理$obj->content是经过Typecho插件系统处理后的HTML内容，包括AISummary插件的customContent方法添加的摘要通过使用$obj->content，确保所有插件的钩子都能正常工作第二种：在handsome插件后台切换vidtor为typecho自带的即可下面是自定义模板的文章：[post cid="335" /]

软件工程实践二：Spring Boot 知识回顾
type: item
date: 2025-09-10T09:49:21+08:00
description: 使用 IntelliJ IDEA 创建 Spring Boot Web 项目（仅 Web 依赖）目标：用 IntelliJ IDEA 快速创建只包含 Spring Web 的最小可运行项目，启动后通过浏览器访问 http://localhost:8080/api/hello 返回 JSON。一、创建项目（Spring Boot 向导）步骤说明：打开 IDEA → New Project → 选择 Spring Boot；服务地址保持默认。Project Metadata：Group：如 com.exampleArtifact/Name：如 demoPackaging：jar（默认）Java：17（或本机已安装的 LTS 版本）Build system：Maven（不要选 Gradle）Dependencies：搜索并仅勾选 Spring Web。Finish → 等待 Maven 下载依赖与索引完成。提示：若看不到 Spring Boot(Initializr)，确保安装了 IntelliJ 的 Spring 插件，或使用 File > New > Project... 再选择。二、项目最小代码示例1) 主启动类（IDE 已生成，检查包名与类名）package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }2) Hello 控制器（新增）package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.Map; @RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public Map<String, Object> hello() { return Map.of( "msg", "hello", "time", new Date() ); } }3) 应用配置（可选）# src/main/resources/application.yml server: # 如需修改端口，取消注释并调整值 # port: 8080三、运行与验证在 DemoApplication 类左侧点击绿色运行箭头，或使用菜单 Run。控制台看到 Started DemoApplication ... 表示启动成功。浏览器/工具访问：http://localhost:8080/api/hello期望响应示例：{"msg":"hello","time":"2025-01-01T00:00:00Z"}常见问题：端口占用：在 application.yml 配置 server.port: 8081。依赖未下载：检查网络代理或尝试 Reload All Maven Projects。JDK 不匹配：Project Structure > Project/Modules 指定与向导一致的 Java 版本。四、标准目录结构与说明 demo/ ← 工程根目录 ├─ pom.xml ← 构建脚本（Maven） ├─ src │ ├─ main │ │ ├─ java │ │ │ └─ com │ │ │ └─ example │ │ │ └─ demo │ │ │ ├─ DemoApplication.java ← 启动类 │ │ │ └─ controller │ │ │ └─ HelloController.java ← Web 控制器 │ │ └─ resources │ │ ├─ application.yml ← 应用配置 │ │ └─ static/ temp…

在飞牛 NAS 底层安装宝塔面板并部署网站
type: item
date: 2025-09-05T15:14:00+08:00
description: 为什么在底层安装宝塔1、飞牛 NAS 虽自带 1Panel 管理面板，但无法直接部署 Python 网站，且缺少完善的 Python 环境管理工具。2、使用飞牛自带的宝塔 Docker 应用常见问题：网站无法访问、容器重启后数据丢失、在宝塔内安装 MySQL/PHP/FTP/Docker 等组件失败。3、在底层安装宝塔通常可避免上述问题，但可能与飞牛 OS 的部分配置冲突，存在系统升级失败等风险，请自行权衡。一、安装方式在飞牛 NAS 上安装宝塔面板有三种方式，本文推荐“底层安装”并以此示范：1、Docker 安装：使用系统应用商店的宝塔镜像。2、底层安装：通过 SSH 在宿主机（与飞牛 OS 同级）直接安装。（本文采用）3、在虚拟机中安装：通过应用商店创建 Ubuntu 等虚拟机，在其中安装宝塔。二、准备工作1、下载下载远程连接工具：软件名称：FinalShell地址：https://www.hostbuf.com/2、设置连接打开 SSH打开飞牛系统设置 -> SSH -> 按钮打开添加连接点击左上角文件夹样式按钮，并选择“SSH连接(Linux)”填写配置名称：自定义主机：飞牛 OS 的 IP 地址端口：22（保持默认）用户名：飞牛 OS 管理员账号密码：管理员密码三、安装宝塔1、连接设备2、切换为 root 权限使用命令：sudo -i再输入管理员密码（输入时不显示） 看到 root 提示符即切换成功。3、执行安装脚本使用宝塔通用安装脚本：if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec按提示先输入 y 进行确认，再输入 yes 进行强制安装。这里的已有web服务是飞牛OS的网页端4、查看面板信息安装完成后，终端会输出面板登录地址和账号密码：建议使用内网地址登录。内网访问默认端口已放行。如需公网或 FRP 访问，请按需配置端口放行。5、安装运行环境推荐“一键安装 LNMP”。安装成功示例：四、常见问题与设置优化1、面板 Nginx 无法启动或飞牛网页端打不开取消“端口重定向”的勾选，将 80 和 443 端口留给宝塔使用：2、宝塔中的 MySQL 等服务安装后无法启动将安装方式切换为编译安装（耗时较长），更好地适配系统环境：五、网站搭建与访问1、创建网站2、访问测试3、公网访问如需公网访问，可使用 FRP 或自行做端口映射/放行策略。可参考文章：[post cid="1086" /]

解决宝塔面板SSL报错 - AttributeError: module 'acme_v2' has no attribute 'acme_v2'
type: item
date: 2025-07-17T14:35:46+08:00
description: 问题背景在使用宝塔面板设置网站SSL证书时，有时会遇到报错情况，常见的原因包括Python环境依赖缺失、面板组件损坏或环境冲突等。本文将介绍两种解决方案，帮助您快速恢复宝塔面板的SSL功能。常见错误示例以下是一个典型的错误示例：出错了，面板运行时发生错误！ AttributeError: module 'acme_v2' has no attribute 'acme_v2' REQUEST_DATE: 2023-07-17 10:29:45 VERSION: Debian GNU/Linux 12 (bookworm) x86_64(Py3.7.16) - 9.6.0 REMOTE_ADDR: 178.239.124.112 REQUEST_URI: POST /site?action=GetSSL REQUEST_FORM: {'siteName': 'blog.ybyq.wang'} Traceback (most recent call last): File "/www/server/panel/BTPanel/__init__.py", line 2525, in publicObject res = run_obj.run(toObject, defs, get) File "/www/server/panel/BTPanel/__init__.py", line 2472, in run result = getattr(toObject, get.action)(get) File "/www/server/panel/class/panelSite.py", line 2735, in GetSSL acme = acme_v2.acme_v2() AttributeError: module 'acme_v2' has no attribute 'acme_v2'错误分析从上述错误日志可以看出：错误类型：AttributeError - Python属性错误具体原因：module 'acme_v2' has no attribute 'acme_v2' - 找不到acme_v2模块中的acme_v2方法或类错误位置：在处理SSL证书申请时（/site?action=GetSSL）出现错误错误堆栈：最终在panelSite.py文件的2735行调用acme_v2.acme_v2()时失败这个错误通常是由于Python模块安装不完整、版本不兼容或模块损坏导致的。特别是在Debian系统上运行Python 3.7.16版本时，可能会出现此类依赖问题。解决方案一：重新安装依赖包在执行此操作前，强烈建议先做好磁盘快照或系统备份，以防万一出现问题可以快速回滚。步骤：首先执行以下命令：btpip install -r /www/server/panel/requirements.txt && bt restart代码解释：btpip install -r /www/server/panel/requirements.txt：使用宝塔面板的pip工具安装requirements.txt文件中列出的所有Python依赖包。requirements.txt包含宝塔面板正常运行所需的所有Python库。&&：这是命令连接符，表示左边命令执行成功后才会执行右边的命令。bt restart：重启宝塔面板服务，使新安装的依赖生效。此命令会重新安装所有宝塔面板依赖，包括处理SSL证书所需的acme_v2模块，有很大机会解决上述AttributeError问题。解决方案二：备份并重新安装面板如果解决方案一无效，可以尝试以下更彻底的方法。同样，务必先做好系统快照。步骤：备份现有Python环境：mv /www/server/panel/pyenv/ /www/backup/pyenv_backup重新安装宝塔面板：if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec代码解释：第一条命令：mv /www/server/panel/pyenv/ /www/backup/pyenv_backup：将宝塔面板的Python虚拟环境（pyenv目录）移动到备份位置。这个操作是将可能有问题的Python环境隔离，以便重新安装一个干净的环境。第二条命令：if [ -f /usr/bin/curl ]：检查系统是否安…

前端开发中嵌入B站视频播放器：解决high_quality=1 失效的问题
type: item
date: 2025-06-13T20:53:00+08:00
description: 问题背景在前端开发中，我们可能需要嵌入B站视频。使用B站官方播放器时，遇到了以下问题：默认画质被限制在360p高清画质需要登录B站账号部分视频需要大会员才能观看高清版本问题分析默认的B站原生播放器 存在的问题：画质限制：即使设置了high_quality=1和quality=720，实际播放时仍被限制在360p，这两个方法在22年就失效了登录要求：高清画质需要用户登录B站账号会员限制：部分视频的高清版本需要大会员权限解决方案改进后的高清解析播放器[hide] [/hide]优势：画质提升：可以直接获取视频源默认画质，1080p同样生效无需登录：用户无需登录B站账号突破限制：可以观看部分需要大会员的视频总结通过使用视频解析接口，成功解决了B站视频播放器的画质限制问题。希望这个解决方案对你有所帮助，有问题请在评论区交流。

IntelliJ IDEA和PyCharm全家桶最新版永久破解教程：无需重新安装
type: item
date: 2025-05-29T20:09:00+08:00
description: 前言话不多说，先看破解效果，我破解的是PyCharm 2025.1.1.1专业版和IDEA 2025.1.1.1专业版工具下载对于2024.2.4版本以后的，用下面的链接下载工具[hide]https://pan.quark.cn/s/b0dfc91f0193[/hide]对于2020到2024的老版本，使用下面的链接下载[hide]https://pan.quark.cn/s/5b86def38453[/hide]使用说明

使用Gradle打包springboot项目为JAR包教程
type: item
date: 2025-05-22T23:33:00+08:00
description: 本文将详细演示如何在IDEA中使用 Gradle 构建工具将 SpringBoot 项目打包为可执行的 JAR 文件。操作步骤步骤 1：配置项目构建工件打开项目结构，在工件（Artifacts）中添加新的 JAR 配置。步骤 2：选择模块配置系统默认选择所有模块，确认配置无误后点击确定。步骤 3：执行 Gradle 构建打开右侧的 Gradle 工具窗口展开 build 任务组双击执行 bootjar 任务步骤 4：获取生成的 JAR 文件构建完成后，打开项目根目录下的 build/libs/ 文件夹，即可看到生成的 .jar 文件。重要提示⚠️ 注意：在提交作业或部署项目时，请选择第一个 JAR 文件（通常是不带 -plain 后缀的文件），不要选择第二个 plain JAR 文件。可执行 JAR：包含所有依赖项，可以直接运行Plain JAR：仅包含项目代码，缺少依赖项，无法独立运行运行 JAR 文件生成的可执行 JAR 文件可以通过以下命令运行：java -jar your-project-name.jar

gradle全局安装及本地仓库配置教程
type: item
date: 2025-05-21T21:54:00+08:00
description: 1.下载安装1.去官网下载Gradle2.下载后解压在D盘创建.gradle文件夹，作为本地仓库2.配置环境1、新建 GRADLE_HOME 系统变量，路径为D:\gradle-8.10.2-bin\gradle-8.10.22、新建 GRADLE__USER_HOME 系统变量，路径为D:\gradle-8.10.2-bin\gradle-8.10.2\.gradle3、添加完成4、将 %GRADLE_HOME%\bin 添加到 Path 环境变量中，然后点击确定5、验证gradle是否安装成功，打开cmd命令行输入 gradle -v3.设置本地仓库-全局配置第二步中已经创建创建好了.gradle，然后在.gradle中新建文件init.gradle在init.gradle中输入以下代码并保存allprojects { repositories { // 本地仓库 maven { url 'file:///D:/Program Files/apache-maven-3.6.3/.m2/repository' } mavenLocal() // 阿里云镜像 maven { name "Alibaba" url "https://maven.aliyun.com/nexus/content/groups/public/" } // 标准仓库 mavenCentral() google() } buildscript { repositories { maven { name "Alibaba" url "https://maven.aliyun.com/nexus/content/groups/public/" } mavenCentral() google() } } }4.IDEA中的Gradle设置5.注意事项需要根据项目中JDK的版本要求设置JDK，不然会构建失败，比如：这里面要求的是21版本，就需要把版本改为21，在这里直接下载即可

gitee上的项目克隆到IDEA最新版教程
type: item
date: 2025-05-21T14:55:19+08:00
description: 此教程是用的是IDEA2025.1.1.1版本，确保本地安装了git，并且IDEA也安装了git插件（也可以安装一个中文插件），如果没有可以去插件中下载。1、首先在idea上随便打开一个项目，进入设置找到gitidea可以自动检测出本地的git路径，其他设置项不用修改。2、主菜单-> VCS-> 从版本控制中获取3、复制gitee的项目地址，填入URL中4、登录，这里选择使用帮助程序5、完成导入在新导入的文件夹中VCS会变成Git，这里会有git的一些操作选项