Sat Oct  4 09:16:18 CST 2025

有个叫 jina reader 的服务,可以把任意网站变成 llm 友好的 markdown 格式。虽然是开源的,但是部署不是很方便。它依赖了一些内部的不开源的软件包。官方没有提供部署途径,有人做了个自己的 docker 版本的。

docker 野蛮。看看能不能改成 systemd 的。

https://github.com/intergalacticalvariable/reader

这是那个 docker 项目

似乎需要从 google 的源里安装 chrome stable。puppeteer 看起来不支持 chromium。它支持 firefox,看看能不能用 firefox 跑一下。

哎,好想给自己环境打个快照(

Docker 里用的是 node 18,debian 最新的是 node 20,不知道会不会有影响

而且 puppeteer 也有点老,看起来只支持 nightly 的 firefox。希望它们有兼容吧……

    jyi-00-rust-dev 09:52 ~/dev/jina-reader-deps
    0 ./run.sh
    node:internal/modules/cjs/loader:1215
    throw err;
    ^

    Error: Cannot find module 'libmagic-ffi'
    Require stack:
    - /home/jyi/dev/jina-reader-deps/node_modules/civkit/lib/mime.js
    - /home/jyi/dev/jina-reader-deps/node_modules/civkit/lib/fancy-file.js

哎,为什么会这样呢。不懂 js,问问 ai 好了。

哦,libmagic-ffi 没装。安装需要 cmake,神奇。不会是染上 cxx 了吧

    [CHANGE_LOGGER_NAME] ERROR: Unknown firebase issue, just die fast. {
    err: Error: Failed to launch the browser process!
    Error: no DISPLAY environment variable specified


    TROUBLESHOOTING: https://pptr.dev/troubleshooting

        at Interface.onClose (/home/jyi/dev/jina-reader-deps/node_modules/@puppeteer/browsers/lib/cjs/launch.js:310:24)
        at Interface.emit (node:events:536:35)
        at Interface.close (node:internal/readline/interface:527:10)
        at Socket.onend (node:internal/readline/interface:253:10)
        at Socket.emit (node:events:536:35)
        at endReadableNT (node:internal/streams/readable:1698:12)
        at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
    }

坏,puppeteer 爆了。

看来 firefox 没能用 headless 模式启动吗……

https://www.bannerbear.com/blog/how-to-run-puppeteer-with-firefox-instead-of-chrome/

学习一波

哦,原来安装 puppeteer 的时候要用 `PUPPETEER_PRODUCT=firefox`

还是不行,疑似会出现 NODISPLAY 的错误,必须得用 firefox nightly,不然无法启动。太坏了。

https://pptr.dev/supported-browsers

    0 firefox --version
    Mozilla Firefox 140.3.1esr

查了下网站,我的 firefox 是 140,那应该用 Puppeteer v24.14.0 比较好吗……手动指定一下版本号再试试。

哎还是不行,太坏了。

如果让它下载 firefox nightly 的话会遇到 404 错误,可能是版本太老了旧的 firefox nightly 已经无了……

    src/services/puppeteer.ts:613:21 - error TS2322: Type 'Uint8Array' is not assignable to type 'Buffer'.

    613                     screenshot = await page.screenshot();


换新版本的话又会出现新错误,我也不会修啊……

https://github.com/Level/level-js/pull/31/files

哦,好像 new Buffer(await page.screenshot()) 就行了?不懂喵,偷一下

哦!我可以把 screenshot 的类型改成 Uint8Array 试试。……不太行

https://github.com/feross/typedarray-to-buffer

这个可以试试。试着学一点 ts ……

修好了,泪目

并没有,试着用的时候会出现 target closed 的错误

https://stackoverflow.com/questions/51629151/puppeteer-protocol-error-page-navigate-target-closed

把 `single-process` 的参数移掉就好了,好神奇。

https://hacks.mozilla.org/2017/12/using-headless-mode-in-firefox/

好像还要开 ws。

    *** You are running in headless mode.
    [GFX1-]: glxtest: Unable to open a connection to the X server
    Could not run chrome debugger! You need the following prefs to be set to true: devtools.debugger.remote-enabled, devtools.chrome.enabled
    [GFX1-]: RenderCompositorSWGL failed mapping default framebuffer, no dt
    ^CExiting due to channel error.
    Exiting due to channel error.
    Exiting due to channel error.
    Exiting due to channel error.
    Exiting due to channel error.

有没有什么办法能给一个 headless 的 firefox 设置 prefs ……

哦,原来是 puppeteer 没有正确识别出我在用 firefox 导致的。手工在 launch options 里指定一下就好了。

有两个 web debugger 的协议,一个叫 cdp,一个叫 bidi。firefox 只能 bidi,兼容性有点差,不兼容 puppeteer 的 stealth 插件和 set bypass csp 选项

也不支持 resource type,puppeteer block resource 也用不了。

哎,算了,好像 jina 的一堆脚本也是只支持 cdp 的。看来不搞个 chrome 确实是用不了了。


Wed Oct  8 02:04:36 CST 2025

本来以为跑起来就能用的,但是发现它的并发控制和错误处理有问题。需要仔细修一下……

Fri Oct 10 14:06:02 CST 2025

这玩意好像会漏内存,虽然没有明显证据,但是我怀疑上次把集群主脑搞炸的就是它