🔒 隐去所有QQ号/群号(隐私保护)
This commit is contained in:
94
ATRI My Dear Moments/questions/2026-04-28.md
Normal file
94
ATRI My Dear Moments/questions/2026-04-28.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# 🐛 今日问题记录 — 2026年4月28日
|
||||
|
||||
---
|
||||
|
||||
## 1️⃣ Docker代理配置不生效
|
||||
|
||||
**现象**:`docker pull soulter/astrbot-t2i-service:latest` 返回 `EOF` 错误,直连Docker Hub失败。
|
||||
|
||||
**尝试的方案**:
|
||||
| 方案 | 结果 |
|
||||
|:---|:---:|
|
||||
| systemd proxy.conf | ❌ 配置写入但systemctl被限制,无法重启Docker |
|
||||
| daemon.json proxies | ❌ 镜像源+代理都配了,仍然EOF |
|
||||
| daocloud镜像加速 | ❌ T2I镜像不在daocloud白名单 |
|
||||
| 直接改镜像源为国内源 | ❌ 部分源失效,部分没有该镜像 |
|
||||
|
||||
**当前状态**:未解决。改用裸机直接部署T2I绕过了这个问题。
|
||||
|
||||
**可能的根因**:
|
||||
- Docker daemon没有正确读取proxies配置
|
||||
- 代理mihomo对Docker Hub的CONNECT请求有限制
|
||||
- 容器内网络环境与宿主机代理不通
|
||||
|
||||
---
|
||||
|
||||
## 2️⃣ mihomo代理导致SSH通道中断
|
||||
|
||||
**现象**:SSH插件频繁报 `error: Channel not open for sending`,需要重启SSH插件才能恢复。
|
||||
|
||||
**原因**:mihomo的透明代理(tun模式)劫持了SSH连接,导致SSH会话被中断。
|
||||
|
||||
**解决**:在zashboard中暂时关闭代理,重启SSH插件后恢复。
|
||||
|
||||
**教训**:操作mihomo配置时要注意SSH通道的稳定性,避免把自己锁在外面。
|
||||
|
||||
---
|
||||
|
||||
## 3️⃣ Playwright Chromium安装失败
|
||||
|
||||
**现象**:`python3 -m playwright install --with-deps chromium` 下载167MB文件超时。
|
||||
|
||||
**尝试的方案**:
|
||||
| 方案 | 结果 |
|
||||
|:---|:---:|
|
||||
| 直连Google CDN | ❌ 超时(30秒timeout) |
|
||||
| PLAYWRIGHT_DOWNLOAD_HOST=国内镜像 | ❌ 404(镜像没有对应版本) |
|
||||
| apt install chromium-browser | ❌ snap源也超时 |
|
||||
| 指定系统已有Chromium路径 | ❌ 系统根本没装Chromium |
|
||||
|
||||
**解决**:直接用curl下载,耗时9分39秒拉完218MB。
|
||||
|
||||
**教训**:大文件下载在有代理的服务器上可能要等很久,直接裸下载反而更快。
|
||||
|
||||
---
|
||||
|
||||
## 4️⃣ systemd服务文件格式问题
|
||||
|
||||
**现象**:`systemctl enable --now t2i` 报 `bad unit file setting`,所有配置行都提示 `Assignment outside of section`。
|
||||
|
||||
**原因**:用cat写入时漏写了 `[Unit]` `[Service]` `[Install]` 三个section头部。
|
||||
|
||||
**解决**:重写service文件,加上section头部。
|
||||
|
||||
**教训**:创建systemd服务文件时要检查section头部是否存在,用 `systemctl status` 查看具体错误信息。
|
||||
|
||||
---
|
||||
|
||||
## 5️⃣ Chromium路径配置无效
|
||||
|
||||
**现象**:修改 `src/render.py` 中 `chromium.launch(executable_path="/usr/bin/chromium-browser")` 后T2I仍然报错找不到Playwright内置Chromium。
|
||||
|
||||
**原因**:`executable_path` 参数是Playwright v1.58的headless shell专用参数,设置后仍然需要Playwright内置Chromium的依赖库。系统安装的Chromium不是Playwright需要的headless shell版本。
|
||||
|
||||
**解决**:下载Playwright专用的Chromium headless shell到cache目录,恢复默认launch调用。
|
||||
|
||||
---
|
||||
|
||||
## 6️⃣ GitHub推送代理拦截
|
||||
|
||||
**现象**:`git push github master` 报 `Connection closed by 198.18.0.25 port 22`。
|
||||
|
||||
**原因**:mihomo虚拟网络接口劫持了SSH到GitHub的22端口连接。
|
||||
|
||||
**解决**:配置 `~/.ssh/config` 让github.com走443端口(`ssh.github.com`)。
|
||||
|
||||
---
|
||||
|
||||
## 7️⃣ 容器内无法使用宿主机代理
|
||||
|
||||
**现象**:在AstrBot容器内通过 `host.docker.internal:7890` 访问mihomo代理时,CONNECT请求被abort。
|
||||
|
||||
**原因**:mihomo配置 `allow-lan: false`,禁止局域网连接。
|
||||
|
||||
**当前状态**:未解决。后续需要在mihomo配置中开启 `allow-lan: true` 并设置用户认证。
|
||||
154
ATRI My Dear Moments/questions/2026-04-29.md
Normal file
154
ATRI My Dear Moments/questions/2026-04-29.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# 🐞 群分析T2I渲染超时排查记录
|
||||
|
||||
**日期**:2026-04-29
|
||||
**主人**:☭Kronecker
|
||||
**排查者**:ATRI 🥕
|
||||
|
||||
---
|
||||
|
||||
## 📋 问题描述
|
||||
|
||||
执行 `/群分析` 命令生成群聊分析报告后,尝试通过T2I服务将其渲染为图片时失败,返回 `500 Internal Server Error`。QQ收到内容为 `Internal Server Error` 的21字节文件。
|
||||
|
||||
---
|
||||
|
||||
## 🔍 排查过程
|
||||
|
||||
### Step 1: 查看T2I服务日志
|
||||
|
||||
通过 `journalctl -u t2i` 排查T2I服务端日志,发现以下错误:
|
||||
|
||||
```
|
||||
playwright._impl._errors.TimeoutError: Page.goto: Timeout 100000ms exceeded.
|
||||
Call log:
|
||||
- navigating to "file:///opt/astrbot-t2i-service/data/rendered_xxx.html", waiting until "load"
|
||||
```
|
||||
|
||||
**结论**:Playwright浏览器在打开HTML文件时,等待 `load` 事件超时(100秒)。
|
||||
|
||||
### Step 2: 分析超时HTML文件
|
||||
|
||||
| 属性 | 值 |
|
||||
|:---|:---|
|
||||
| HTML文件路径 | `/opt/astrbot-t2i-service/data/rendered_xxx.html` |
|
||||
| 文件大小 | 153KB |
|
||||
| 行数 | 2856行 |
|
||||
|
||||
### Step 3: 确认外部字体是罪魁祸首
|
||||
|
||||
HTML模板中引用了 **3个LXGW WenKai (霞鹜文楷) web字体文件**:
|
||||
|
||||
| 字体文件 | CDN地址 |
|
||||
|:---|:---|
|
||||
| LXGW WenKai Regular | `https://tc.ciallo.ccwu.cc/file/...LXGWWenKai-Regular.woff2` |
|
||||
| LXGW WenKai Medium | `https://tc.ciallo.ccwu.cc/file/...LXGWWenKai-Medium.woff2` |
|
||||
| LXGW WenKai Mono | `https://tc.ciallo.ccwu.cc/file/...LXGWWenKaiMono-Regular.woff2` |
|
||||
|
||||
**每个字体文件约8MB**,3个合计 **~24MB**。
|
||||
|
||||
### Step 4: 检查CDN可达性
|
||||
|
||||
CDN服务器 `tc.ciallo.ccwu.cc` 本身可达:
|
||||
- HTTP 200 ✅(Cloudflare缓存命中)
|
||||
- 从服务器有代理无代理均可访问
|
||||
- 但文件过大(8MB/个)
|
||||
|
||||
### Step 5: 检查代理配置
|
||||
|
||||
**插件配置**(AstrBot WebUI - T2I渲染环境切换):
|
||||
- 渲染环境:内地
|
||||
- Google Fonts镜像:`https://fonts.loli.net`
|
||||
- Gstatic镜像:`https://gstatic.loli.net`
|
||||
|
||||
**系统代理变量**:
|
||||
```
|
||||
HTTP_PROXY=http://127.0.0.1:7890
|
||||
HTTPS_PROXY=http://127.0.0.1:7890
|
||||
ALL_PROXY=socks5h://127.0.0.1:7890
|
||||
```
|
||||
|
||||
**T2I系统服务文件**(`/etc/systemd/system/t2i.service`):
|
||||
```
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/astrbot-t2i-service
|
||||
ExecStart=/usr/bin/python3 /opt/astrbot-t2i-service/main.py
|
||||
Environment=PLAYWRIGHT_CHROMIUM_EXECUTABLE=/usr/bin/chromium-browser
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
```
|
||||
⚠️ **没有配置任何代理环境变量!**
|
||||
|
||||
---
|
||||
|
||||
## 🎯 根因确认
|
||||
|
||||
```
|
||||
群分析HTML模板 → 引用3个@font-face外部字体(各~8MB)
|
||||
→ Playwright浏览器打开本地HTML → 尝试从CDN下载字体
|
||||
→ 浏览器无代理配置(T2I systemd服务未继承系统代理)
|
||||
→ 24MB字体下载缓慢 → 等待100秒 → 超时TimeoutError
|
||||
→ 返回500 Internal Server Error
|
||||
```
|
||||
|
||||
### 核心问题链
|
||||
|
||||
1. 群分析模板使用了 **外部web字体**(`tc.ciallo.ccwu.cc`)
|
||||
2. 每个字体文件 **8MB**,3个共 **24MB**
|
||||
3. Playwright的 `page.goto()` 默认等待 `load` 事件
|
||||
4. `load` 事件需要等到所有外部资源(包括字体)加载完毕才触发
|
||||
5. T2I的systemd服务未配置 `HTTP_PROXY`/`HTTPS_PROXY` 环境变量
|
||||
6. 浏览器无代理,大文件下载慢,100秒内未完成 → Timeout
|
||||
|
||||
### 为什么自我介绍的T2I渲染成功了?
|
||||
|
||||
自我介绍的T2I渲染使用的是**行内样式HTML**(无外部资源),页面瞬间加载完成,`load` 事件即刻触发。而群分析模板依赖外部web字体,因此超时。
|
||||
|
||||
---
|
||||
|
||||
## 🛠 修复方案
|
||||
|
||||
### 方案A(推荐):T2I服务添加代理环境变量
|
||||
|
||||
在 `/etc/systemd/system/t2i.service` 的 `[Service]` 区域添加:
|
||||
|
||||
```
|
||||
Environment=HTTP_PROXY=http://127.0.0.1:7890
|
||||
Environment=HTTPS_PROXY=http://127.0.0.1:7890
|
||||
```
|
||||
|
||||
然后执行:
|
||||
```bash
|
||||
systemctl daemon-reload
|
||||
systemctl restart t2i
|
||||
```
|
||||
|
||||
**优点**:一劳永逸,所有需要外部资源的HTML都能通过代理加载
|
||||
|
||||
### 方案B:移除外部字体引用
|
||||
|
||||
修改群分析HTML模板,改用系统字体栈,去掉 `@font-face` 引用。
|
||||
|
||||
**优点**:不依赖网络加载,渲染速度快
|
||||
**缺点**:字体不如霞鹜文楷美观
|
||||
|
||||
### 方案C:修改wait_until策略
|
||||
|
||||
T2I渲染时设置 `wait_until: "domcontentloaded"` 而不是 `"load"`,不等字体加载完就截图。
|
||||
|
||||
**优点**:改动最小
|
||||
**缺点**:字体可能没加载完成,截图时显示备选字体
|
||||
|
||||
---
|
||||
|
||||
## 📎 相关文件
|
||||
|
||||
- T2I服务:`/opt/astrbot-t2i-service/`
|
||||
- 服务配置:`/etc/systemd/system/t2i.service`
|
||||
- T2I日志:`journalctl -u t2i`
|
||||
- 字体CDN:`https://tc.ciallo.ccwu.cc/`
|
||||
- 插件配置:AstrBot WebUI → 插件配置 → t2i渲染环境切换
|
||||
|
||||
---
|
||||
|
||||
*记录者:ATRI 🥕 · 2026-04-29 16:45*
|
||||
Reference in New Issue
Block a user